Vous êtes connecté en tant que anonymous Se Deconnecter
Browse code

final procedural project

ER authored on 13/04/2012 10:17:34
Showing 70 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,20 @@
1
+<?php
2
+
3
+class Application {
4
+	
5
+	public function load_body(array $page){
6
+		//Génération du contenu spécifique
7
+		//à chaque page et mise en tampon
8
+		ob_start();
9
+		require_once PAGES_PATH . DIRECTORY_SEPARATOR . $page['name'] . '.php' ;
10
+		require_once TPL_PATH . DIRECTORY_SEPARATOR . $page['name'] .'.phtml' ;	
11
+		$content = ob_get_contents();
12
+		ob_end_clean();
13
+		return $content;
14
+		
15
+	}
16
+	public function load_layout($content){
17
+		require_once INC_PATH . DIRECTORY_SEPARATOR . 'layout.phtml';
18
+	}
19
+	
20
+}
0 21
new file mode 100644
... ...
@@ -0,0 +1,55 @@
1
+<?php
2
+class Constants{
3
+	/*
4
+	
5
+//définition des chemins de l'application
6
+//les fonction n'ont pas l'air de fonctionner dans la definitions de constantes
7
+// de classes, en effet elle ne peuvent pas être déclarée de façon dynamique.
8
+	const PUBLIC_PATH = __DIR__;
9
+	const APPLICATION_PATH = dirname(__DIR__) .
10
+			 DIRECTORY_SEPARATOR . 'application'
11
+			;
12
+	const PAGES_PATH =
13
+		self::APPLICATION_PATH . DIRECTORY_SEPARATOR .
14
+		'pages'
15
+	 ;
16
+	 const INC_PATH =
17
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
18
+		'includes'
19
+	 ;
20
+	 const TPL_PATH =
21
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
22
+		'templates'
23
+	 ;
24
+	 const CLASS_PATH =
25
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
26
+		'classes'
27
+	 ;
28
+	//définition des chemins de l'application
29
+	// ne fonctionne pas ( tout le temps ou pour l'instant?!? )
30
+	define('PUBLIC_PATH', __DIR__);
31
+	define(  'APPLICATION_PATH', dirname(__DIR__) .
32
+			 DIRECTORY_SEPARATOR . 'application'
33
+			);
34
+	define(
35
+		'PAGES_PATH',
36
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
37
+		'pages'
38
+	 );
39
+	 define(
40
+		'INC_PATH',
41
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
42
+		'includes'
43
+	 );
44
+	 define(
45
+		'TPL_PATH',
46
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
47
+		'templates'
48
+	 );
49
+	 define(
50
+		'CLASS_PATH',
51
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
52
+		'classes'
53
+	 );
54
+	
55
+}
0 56
\ No newline at end of file
1 57
new file mode 100644
... ...
@@ -0,0 +1,63 @@
1
+<?php 
2
+class Url
3
+{
4
+	static function link_rewrite($page, $params = array())
5
+	{
6
+		$stringParams = '';
7
+		foreach($params as $key => $values){
8
+			$stringParams .= "/" . $key ."/" . $values;
9
+		}
10
+		return (('home' == $page) ? '/' : '/' . $page . $stringParams);
11
+		  // -- Bonne version
12
+		
13
+		/*
14
+		//Changement de comportement d'une fonction PHP-Zend ... grrr
15
+		array_unshift($params , $page);
16
+		var_dump($params);
17
+		$page = '/' . implode('/' , $params);
18
+		*/
19
+		return $page;
20
+		
21
+	}
22
+	static function url_rewrite()
23
+	{
24
+		
25
+		$url = parse_url($_SERVER['REQUEST_URI']);
26
+		$urlParts = explode('/' , trim( $url['path'] , '/' ));
27
+		//Récupération du nom de la page
28
+		//$page['name'] = $urlParts[0];
29
+		($urlParts[0] == 'index' ||$urlParts[0] == '' )?$page['name']='home':$page['name']=$urlParts[0];
30
+		
31
+		unset($urlParts[0]);
32
+		
33
+		//vérification du nombre de parametres: s'il n'existe pas autant de clé que
34
+		// de valeurs on sort de la fonction et on renvoie une page d'erreur.
35
+		$numParts = count($urlParts);
36
+		if (0!=$numParts%2) {
37
+			$page['name'] = 'error';
38
+			$page['params'] = array();
39
+			return $page;
40
+		}else{
41
+		
42
+		$values = array();
43
+		$keys = array();
44
+		foreach( $urlParts as $key => $value ){
45
+			if($key%2 == 0) {
46
+				$values[] = $value;
47
+			} else {
48
+				$keys[] = $value;
49
+			}
50
+		}
51
+		$page['params'] = array_combine($keys, $values);
52
+		}
53
+		
54
+		$pageFile = PAGES_PATH . DIRECTORY_SEPARATOR . $page['name'] . '.php';
55
+		
56
+		if(!file_exists($pageFile)){
57
+			$page['name'] = 'error';
58
+		}
59
+		return $page;
60
+		
61
+	}
62
+	
63
+}
0 64
new file mode 100644
... ...
@@ -0,0 +1,125 @@
1
+<?php
2
+function link_rewrite($page, $params = array())
3
+{
4
+	//Solution élégante
5
+	//return (('home' == $page) ? 'index.html' : $page . '.html');
6
+	
7
+	//Solution Professionnelle
8
+	  // -- Mauvaise version
9
+	$stringParams = '';
10
+	foreach($params as $key => $values){
11
+		$stringParams .= "/" . $key ."/" . $values;
12
+	}
13
+	return (('home' == $page) ? '/' : '/' . $page . $stringParams);
14
+	  // -- Bonne version
15
+	
16
+	/*
17
+	//Changement de comportement d'une fonction PHP-Zend ... grrr
18
+	array_unshift($params , $page);
19
+	var_dump($params);
20
+	$page = '/' . implode('/' , $params);
21
+	*/
22
+	return $page;
23
+	
24
+	//Solution Personnelle
25
+	
26
+	
27
+}
28
+function url_rewrite()
29
+{
30
+	//Solution élégante !
31
+	// Avec un case pour chacune des URL listées
32
+	/*
33
+	$url = parse_url($_SERVER['REQUEST_URI']);
34
+	//var_dump($url);
35
+	parse_str(@$url['query'], $params);
36
+	$page['params'] = $params;
37
+	
38
+	switch ($url['path']) {
39
+		case '/index.html' :
40
+		case '/' :
41
+			$page['name'] = 'home';
42
+			break;
43
+		case '/guestbook.html' :
44
+			$page['name'] = 'guestbook';
45
+			break;
46
+		case '/contact.html' :
47
+			$page['name'] = 'contact';
48
+			break;
49
+		default:
50
+			$page['name'] = 'error';
51
+	}
52
+	
53
+	$pageFile = PAGES_PATH . DIRECTORY_SEPARATOR . $page['name'] . '.php';
54
+	
55
+	if(!file_exists($pageFile)){
56
+		$page['name'] = 'error';
57
+	}
58
+	*/
59
+	/*
60
+	//Solution Professionnelle
61
+	//Pour les solutions d'URL du genre:
62
+	 * http:// FQDN /page/var1/value1/var2/value2/....
63
+	 */
64
+	
65
+	$url = parse_url($_SERVER['REQUEST_URI']);
66
+	$urlParts = explode('/' , trim( $url['path'] , '/' ));
67
+	//Récupération du nom de la page
68
+	//$page['name'] = $urlParts[0];
69
+	($urlParts[0] == 'index' ||$urlParts[0] == '' )?$page['name']='home':$page['name']=$urlParts[0];
70
+	
71
+	unset($urlParts[0]);
72
+	
73
+	//vérification du nombre de parametres: s'il n'existe pas autant de clé que
74
+	// de valeurs on sort de la fonction et on renvoie une page d'erreur.
75
+	$numParts = count($urlParts);
76
+	if (0!=$numParts%2) {
77
+		$page['name'] = 'error';
78
+		$page['params'] = array();
79
+		return $page;
80
+	}else{
81
+	
82
+	$values = array();
83
+	$keys = array();
84
+	foreach( $urlParts as $key => $value ){
85
+		if($key%2 == 0) {
86
+			$values[] = $value;
87
+		} else {
88
+			$keys[] = $value;
89
+		}
90
+	}
91
+	$page['params'] = array_combine($keys, $values);
92
+	}
93
+	
94
+	/*
95
+	//Solution Personnelle
96
+	 * http:// FQDN / var1 / var2 / ... / varN / page
97
+	 * 
98
+	 *
99
+	$url = $_SERVER['REQUEST_URI'];
100
+	$uri = parse_url($url);
101
+	parse_str(@$url['query'], $params);
102
+	$page['params'] = $params;
103
+	$urlParts = explode('/' , trim( $uri['path'] , '/' ));
104
+	
105
+	$nbParams = count($urlParts)-1;
106
+	$varPage = explode(".", $urlParts[$nbParams]); 
107
+	$page['name'] = $varPage[0];
108
+	for($i=0,$i<$nbParams,$i++){
109
+		
110
+	}
111
+	
112
+	(page['name'] == 'index' || page['name'] == '')?$page['name']='home':;
113
+	$pageFile = PAGES_PATH . DIRECTORY_SEPARATOR . $varPage . '.php';
114
+	if(!file_exists($pageFile)){
115
+		$page['name'] = 'error';
116
+	}
117
+	*/
118
+	$pageFile = PAGES_PATH . DIRECTORY_SEPARATOR . $page['name'] . '.php';
119
+	
120
+	if(!file_exists($pageFile)){
121
+		$page['name'] = 'error';
122
+	}
123
+	return $page;
124
+	
125
+}
0 126
\ No newline at end of file
1 127
new file mode 100644
... ...
@@ -0,0 +1,34 @@
1
+    <footer>
2
+        <p>&copy; Company 2011</p>
3
+    </footer>
4
+    
5
+  </div>
6
+
7
+  <!-- JavaScript at the bottom for fast page loading -->
8
+
9
+  <!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
10
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
11
+  <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script>
12
+
13
+  <!-- scripts concatenated and minified via build script -->
14
+  <script src="/js/plugins.js"></script>
15
+  <script src="/js/script.js"></script>
16
+  <script src="http://autobahn.tablesorter.com/jquery.tablesorter.min.js"></script>
17
+  
18
+  <script src="/js/bootstrap-dropdown.js"></script>
19
+  <script src="/js/bootstrap-twipsy.js"></script>
20
+  <script src="/js/bootstrap-scrollspy.js"></script>
21
+  <script src="/js/bootstrap-scrollspy.js"></script>
22
+  <script src="/js/assets/application.js"></script>
23
+  <!-- end scripts -->
24
+
25
+  <!-- Asynchronous Google Analytics snippet. Change UA-XXXXX-X to be your site's ID.
26
+       mathiasbynens.be/notes/async-analytics-snippet -->
27
+  <script>
28
+    var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
29
+    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
30
+    g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
31
+    s.parentNode.insertBefore(g,s)}(document,'script'));
32
+  </script>
33
+</body>
34
+</html>
0 35
new file mode 100644
... ...
@@ -0,0 +1,61 @@
1
+<!doctype html>
2
+<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
3
+<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
4
+<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
5
+<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
6
+<!-- Consider adding a manifest.appcache: h5bp.com/d/Offline -->
7
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
8
+<head>
9
+  <meta charset="utf-8">
10
+
11
+  <!-- Use the .htaccess and remove these lines to avoid edge case issues.
12
+       More info: h5bp.com/i/378 -->
13
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
14
+
15
+  <title><?php echo $title ?></title>
16
+  <meta name="description" content="<?php echo $metaDesc ?>">
17
+
18
+  <!-- Mobile viewport optimized: h5bp.com/viewport -->
19
+  <meta name="viewport" content="width=device-width">
20
+
21
+  <!-- Place favicon.ico and apple-touch-icon.png in the root directory: mathiasbynens.be/notes/touch-icons -->
22
+
23
+  <link rel="stylesheet" href="/css/style.css">
24
+  <link rel="stylesheet" href="/css/bootstrap.css">
25
+  <link rel="stylesheet" href="/css/docs.css">
26
+
27
+  <!-- More ideas for your <head> here: h5bp.com/d/head-Tips -->
28
+
29
+  <!-- All JavaScript at the bottom, except this Modernizr build.
30
+       Modernizr enables HTML5 elements & feature detects for optimal performance.
31
+       Create your own custom Modernizr build: www.modernizr.com/download/ -->
32
+  <script src="js/libs/modernizr-2.5.3.min.js"></script>
33
+</head>
34
+<body>
35
+ <!-- Prompt IE 6 users to install Chrome Frame. Remove this if you support IE 6.
36
+       chromium.org/developers/how-tos/chrome-frame-getting-started -->
37
+  <!--[if lt IE 7]><p class=chromeframe>Your browser is <em>ancient!</em> <a href="http://browsehappy.com/">Upgrade to a different browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to experience this site.</p><![endif]-->
38
+  <header>
39
+		<h1>Projet site2</h1>
40
+  </header>
41
+  <div role="main">
42
+	<div class="container canvas">
43
+    
44
+    <div class="topbar" data-scrollspy="scrollspy">
45
+      <div class="topbar-inner">
46
+        <div class="container canvas">
47
+          <a class="brand" href="<?php echo rewrite('home') ?>">Site2</a>
48
+          <ul class="nav">
49
+            <li <?php echo $page == 'contact' ? 'class="active"' : ''?> >
50
+            <a href="<?php echo rewrite('contact') ?>">Contact</a>
51
+            </li>
52
+            <li <?php echo $page == 'guestbook' ? 'class="active"' : ''?> >
53
+            <a href="<?php echo rewrite('guestbook') ?>">Livre d'or</a>
54
+            </li>
55
+            <li>
56
+            <a href="/demo.php">Démo</a>
57
+            </li>
58
+          </ul>
59
+        </div>
60
+      </div>
61
+    </div>
0 62
\ No newline at end of file
1 63
new file mode 100644
... ...
@@ -0,0 +1,101 @@
1
+<!doctype html>
2
+<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
3
+<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
4
+<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
5
+<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
6
+<!-- Consider adding a manifest.appcache: h5bp.com/d/Offline -->
7
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
8
+<head>
9
+  <meta charset="utf-8">
10
+
11
+  <!-- Use the .htaccess and remove these lines to avoid edge case issues.
12
+       More info: h5bp.com/i/378 -->
13
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
14
+
15
+  <title><?php echo $title ?></title>
16
+  <meta name="description" content="<?php echo $metaDesc ?>">
17
+
18
+  <!-- Mobile viewport optimized: h5bp.com/viewport -->
19
+  <meta name="viewport" content="width=device-width">
20
+
21
+  <!-- Place favicon.ico and apple-touch-icon.png in the root directory: mathiasbynens.be/notes/touch-icons -->
22
+
23
+  <link rel="stylesheet" href="/css/style.css">
24
+  <link rel="stylesheet" href="/css/bootstrap.css">
25
+  <link rel="stylesheet" href="/css/docs.css">
26
+
27
+  <!-- More ideas for your <head> here: h5bp.com/d/head-Tips -->
28
+
29
+  <!-- All JavaScript at the bottom, except this Modernizr build.
30
+       Modernizr enables HTML5 elements & feature detects for optimal performance.
31
+       Create your own custom Modernizr build: www.modernizr.com/download/ -->
32
+  <script src="js/libs/modernizr-2.5.3.min.js"></script>
33
+</head>
34
+<body>
35
+ <!-- Prompt IE 6 users to install Chrome Frame. Remove this if you support IE 6.
36
+       chromium.org/developers/how-tos/chrome-frame-getting-started -->
37
+  <!--[if lt IE 7]><p class=chromeframe>Your browser is <em>ancient!</em> <a href="http://browsehappy.com/">Upgrade to a different browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to experience this site.</p><![endif]-->
38
+  <header>
39
+		<h2>Ceci est la page <?php echo $title ?></h2>
40
+  </header>
41
+  <div role="main">
42
+	<div class="container canvas">
43
+     
44
+    <div class="topbar" data-scrollspy="scrollspy">
45
+      <div class="topbar-inner">
46
+        <div class="container canvas">
47
+          <a class="brand" href="<?php echo url::link_rewrite('home') ?>">Site2</a>
48
+          <ul class="nav">
49
+            <li <?php echo $page == 'contact' ? 'class="active"' : ''?> >
50
+            <a href="<?php echo url::link_rewrite('contact') ?>">Contact</a>
51
+            </li>
52
+            <li <?php echo $page == 'guestbook' ? 'class="active"' : ''?> >
53
+            <a href="<?php echo url::link_rewrite('guestbook', array('page' => 2)) ?>">Livre d'or</a>
54
+            </li>
55
+            <li>
56
+            <a href="<?php echo url::link_rewrite('demo') ?>">Démo</a>
57
+            </li>
58
+          </ul>
59
+        </div>
60
+      </div>
61
+    </div>
62
+    
63
+    
64
+    <br/>
65
+    <?php echo $content ?>
66
+    
67
+        <footer>
68
+        <p>&copy; Company 2011</p>
69
+    </footer>
70
+    
71
+  </div>
72
+
73
+  <!-- JavaScript at the bottom for fast page loading -->
74
+
75
+  <!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
76
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
77
+  <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script>
78
+
79
+  <!-- scripts concatenated and minified via build script -->
80
+  <script src="/js/plugins.js"></script>
81
+  <script src="/js/script.js"></script>
82
+  <script src="http://autobahn.tablesorter.com/jquery.tablesorter.min.js"></script>
83
+  
84
+  <script src="/js/bootstrap-dropdown.js"></script>
85
+  <script src="/js/bootstrap-twipsy.js"></script>
86
+  <script src="/js/bootstrap-scrollspy.js"></script>
87
+  <script src="/js/bootstrap-scrollspy.js"></script>
88
+  <script src="/js/assets/application.js"></script>
89
+  <!-- end scripts -->
90
+
91
+  <!-- Asynchronous Google Analytics snippet. Change UA-XXXXX-X to be your site's ID.
92
+       mathiasbynens.be/notes/async-analytics-snippet -->
93
+  <script>
94
+    var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
95
+    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
96
+    g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
97
+    s.parentNode.insertBefore(g,s)}(document,'script'));
98
+  </script>
99
+</body>
100
+</html>
101
+    
0 102
\ No newline at end of file
1 103
new file mode 100644
... ...
@@ -0,0 +1,101 @@
1
+<!doctype html>
2
+<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
3
+<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
4
+<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
5
+<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
6
+<!-- Consider adding a manifest.appcache: h5bp.com/d/Offline -->
7
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
8
+<head>
9
+  <meta charset="utf-8">
10
+
11
+  <!-- Use the .htaccess and remove these lines to avoid edge case issues.
12
+       More info: h5bp.com/i/378 -->
13
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
14
+
15
+  <title><?php echo $title ?></title>
16
+  <meta name="description" content="<?php echo $metaDesc ?>">
17
+
18
+  <!-- Mobile viewport optimized: h5bp.com/viewport -->
19
+  <meta name="viewport" content="width=device-width">
20
+
21
+  <!-- Place favicon.ico and apple-touch-icon.png in the root directory: mathiasbynens.be/notes/touch-icons -->
22
+
23
+  <link rel="stylesheet" href="/css/style.css">
24
+  <link rel="stylesheet" href="/css/bootstrap.css">
25
+  <link rel="stylesheet" href="/css/docs.css">
26
+
27
+  <!-- More ideas for your <head> here: h5bp.com/d/head-Tips -->
28
+
29
+  <!-- All JavaScript at the bottom, except this Modernizr build.
30
+       Modernizr enables HTML5 elements & feature detects for optimal performance.
31
+       Create your own custom Modernizr build: www.modernizr.com/download/ -->
32
+  <script src="js/libs/modernizr-2.5.3.min.js"></script>
33
+</head>
34
+<body>
35
+ <!-- Prompt IE 6 users to install Chrome Frame. Remove this if you support IE 6.
36
+       chromium.org/developers/how-tos/chrome-frame-getting-started -->
37
+  <!--[if lt IE 7]><p class=chromeframe>Your browser is <em>ancient!</em> <a href="http://browsehappy.com/">Upgrade to a different browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to experience this site.</p><![endif]-->
38
+  <header>
39
+		<h2>Ceci est la page <?php echo $title ?></h2>
40
+  </header>
41
+  <div role="main">
42
+	<div class="container canvas">
43
+    
44
+    <div class="topbar" data-scrollspy="scrollspy">
45
+      <div class="topbar-inner">
46
+        <div class="container canvas">
47
+          <a class="brand" href="<?php echo url::link_rewrite('home') ?>">Retour au Site2</a>
48
+          <ul class="nav">
49
+            <li class="active"><a href="#overview">Overview</a></li>
50
+            <li><a href="#grid-system">Grid</a></li>
51
+            <li><a href="#typography">Type</a></li>
52
+            <li><a href="#media">Media</a></li>
53
+            <li><a href="#tables">Tables</a></li>
54
+            <li><a href="#forms">Forms</a></li>
55
+            <li><a href="#navigation">Navigation</a></li>
56
+            <li><a href="#alerts">Alerts</a></li>
57
+            <li><a href="#popovers">Popovers</a></li>
58
+            <li><a href="#javascript">Javascript</a></li>
59
+          </ul>
60
+        </div>
61
+      </div>
62
+    </div>
63
+    
64
+    <br/>
65
+    <?php echo $content ?>
66
+    
67
+        <footer>
68
+        <p>&copy; Company 2011</p>
69
+    </footer>
70
+    
71
+  </div>
72
+
73
+  <!-- JavaScript at the bottom for fast page loading -->
74
+
75
+  <!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
76
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
77
+  <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script>
78
+
79
+  <!-- scripts concatenated and minified via build script -->
80
+  <script src="/js/plugins.js"></script>
81
+  <script src="/js/script.js"></script>
82
+  <script src="http://autobahn.tablesorter.com/jquery.tablesorter.min.js"></script>
83
+  
84
+  <script src="/js/bootstrap-dropdown.js"></script>
85
+  <script src="/js/bootstrap-twipsy.js"></script>
86
+  <script src="/js/bootstrap-scrollspy.js"></script>
87
+  <script src="/js/bootstrap-scrollspy.js"></script>
88
+  <script src="/js/assets/application.js"></script>
89
+  <!-- end scripts -->
90
+
91
+  <!-- Asynchronous Google Analytics snippet. Change UA-XXXXX-X to be your site's ID.
92
+       mathiasbynens.be/notes/async-analytics-snippet -->
93
+  <script>
94
+    var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
95
+    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
96
+    g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
97
+    s.parentNode.insertBefore(g,s)}(document,'script'));
98
+  </script>
99
+</body>
100
+</html>
101
+    
0 102
\ No newline at end of file
1 103
new file mode 100644
... ...
@@ -0,0 +1,100 @@
1
+<!doctype html>
2
+<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
3
+<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
4
+<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
5
+<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
6
+<!-- Consider adding a manifest.appcache: h5bp.com/d/Offline -->
7
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
8
+<head>
9
+  <meta charset="utf-8">
10
+
11
+  <!-- Use the .htaccess and remove these lines to avoid edge case issues.
12
+       More info: h5bp.com/i/378 -->
13
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
14
+
15
+  <title><?php echo $title ?></title>
16
+  <meta name="description" content="<?php echo $metaDesc ?>">
17
+
18
+  <!-- Mobile viewport optimized: h5bp.com/viewport -->
19
+  <meta name="viewport" content="width=device-width">
20
+
21
+  <!-- Place favicon.ico and apple-touch-icon.png in the root directory: mathiasbynens.be/notes/touch-icons -->
22
+
23
+  <link rel="stylesheet" href="/css/style.css">
24
+  <link rel="stylesheet" href="/css/bootstrap.css">
25
+  <link rel="stylesheet" href="/css/docs.css">
26
+
27
+  <!-- More ideas for your <head> here: h5bp.com/d/head-Tips -->
28
+
29
+  <!-- All JavaScript at the bottom, except this Modernizr build.
30
+       Modernizr enables HTML5 elements & feature detects for optimal performance.
31
+       Create your own custom Modernizr build: www.modernizr.com/download/ -->
32
+  <script src="js/libs/modernizr-2.5.3.min.js"></script>
33
+</head>
34
+<body>
35
+ <!-- Prompt IE 6 users to install Chrome Frame. Remove this if you support IE 6.
36
+       chromium.org/developers/how-tos/chrome-frame-getting-started -->
37
+  <!--[if lt IE 7]><p class=chromeframe>Your browser is <em>ancient!</em> <a href="http://browsehappy.com/">Upgrade to a different browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to experience this site.</p><![endif]-->
38
+  <header>
39
+		<h2>Ceci est la page <?php echo $title ?></h2>
40
+  </header>
41
+  <div role="main">
42
+	<div class="container canvas">
43
+    
44
+    <div class="topbar" data-scrollspy="scrollspy">
45
+      <div class="topbar-inner">
46
+        <div class="container canvas">
47
+          <a class="brand" href="<?php echo url::link_rewrite('home') ?>">Site2</a>
48
+          <ul class="nav">
49
+            <li <?php echo $page == 'contact' ? 'class="active"' : ''?> >
50
+            <a href="<?php echo url::link_rewrite('contact') ?>">Contact</a>
51
+            </li>
52
+            <li <?php echo $page == 'guestbook' ? 'class="active"' : ''?> >
53
+            <a href="<?php echo url::link_rewrite('guestbook', array('page' => 2)) ?>">Livre d'or</a>
54
+            </li>
55
+            <li>
56
+            <a href="<?php echo url::link_rewrite('demo') ?>">Démo</a>
57
+            </li>
58
+          </ul>
59
+        </div>
60
+      </div>
61
+    </div>
62
+    
63
+    <br/>
64
+    <?php echo $content ?>
65
+    
66
+        <footer>
67
+        <p>&copy; Company 2011</p>
68
+    </footer>
69
+    
70
+  </div>
71
+
72
+  <!-- JavaScript at the bottom for fast page loading -->
73
+
74
+  <!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
75
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
76
+  <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script>
77
+
78
+  <!-- scripts concatenated and minified via build script -->
79
+  <script src="/js/plugins.js"></script>
80
+  <script src="/js/script.js"></script>
81
+  <script src="http://autobahn.tablesorter.com/jquery.tablesorter.min.js"></script>
82
+  
83
+  <script src="/js/bootstrap-dropdown.js"></script>
84
+  <script src="/js/bootstrap-twipsy.js"></script>
85
+  <script src="/js/bootstrap-scrollspy.js"></script>
86
+  <script src="/js/bootstrap-scrollspy.js"></script>
87
+  <script src="/js/assets/application.js"></script>
88
+  <!-- end scripts -->
89
+
90
+  <!-- Asynchronous Google Analytics snippet. Change UA-XXXXX-X to be your site's ID.
91
+       mathiasbynens.be/notes/async-analytics-snippet -->
92
+  <script>
93
+    var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
94
+    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
95
+    g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
96
+    s.parentNode.insertBefore(g,s)}(document,'script'));
97
+  </script>
98
+</body>
99
+</html>
100
+    
0 101
\ No newline at end of file
1 102
new file mode 100644
... ...
@@ -0,0 +1,2 @@
1
+<?php
2
+session_start();
0 3
\ No newline at end of file
1 4
new file mode 100644
... ...
@@ -0,0 +1,12 @@
1
+<?php 
2
+	$title = 'Contact';
3
+	$metaDesc = 'Description de la page contact';
4
+	$numPage = $page['params']['page'];
5
+	$layout = 'layout_general';
6
+	
7
+	$messages = array(
8
+				"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
9
+				"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
10
+				"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
11
+				"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
12
+				);
0 13
\ No newline at end of file
1 14
new file mode 100644
... ...
@@ -0,0 +1,5 @@
1
+<?php
2
+$title = 'démonstration de Fbootstrapp';
3
+$metaDesc = 'Description de la page démo';
4
+$layout = 'layout_demo';
5
+$numPage = $page['params']['page'];
0 6
\ No newline at end of file
1 7
new file mode 100644
... ...
@@ -0,0 +1,4 @@
1
+<?php
2
+	$title = 'Erreur';
3
+	$metaDesc = 'Description de la page erreur';
4
+	$numPage = $page['params']['page'];
0 5
\ No newline at end of file
1 6
new file mode 100644
... ...
@@ -0,0 +1,11 @@
1
+<?php 
2
+	$title = 'Livre d\'or';
3
+	$metaDesc = 'Description de la page guestbook';
4
+	$numPage = $page['params']['page'];
5
+	
6
+	$messages = array(
7
+				"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
8
+				"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
9
+				"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
10
+				"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
11
+				);
0 12
\ No newline at end of file
1 13
new file mode 100644
... ...
@@ -0,0 +1,4 @@
1
+<?php 
2
+	$title = 'Acceuil';
3
+	$metaDesc = 'Description de la page acceuil';
4
+	$numPage = $page['params']['page'];
0 5
\ No newline at end of file
1 6
new file mode 100644
... ...
@@ -0,0 +1,8 @@
1
+    <h2><?php echo $title?></h2>
2
+    <p>Vous êtes sur la page numéro <?php echo $numPage?></p>
3
+    
4
+    <ul>
5
+    <?php foreach ($messages as $message) :?>
6
+    	<li> <?= $message?></li>
7
+    <?php endforeach;?>
8
+    </ul>
0 9
\ No newline at end of file
1 10
new file mode 100644
... ...
@@ -0,0 +1,1520 @@
1
+ <section id="overview">
2
+
3
+      <!-- Main hero unit for a primary marketing message or call to action -->
4
+      <div class="hero-unit">
5
+        <h1>site2</h1>
6
+        <p>
7
+            Fbootstrapp is a toolkit designed to kickstart development of facebook iframe apps in both relevant sizes.
8
+            It includes base CSS and HTML for typography, forms, buttons, tables, grids, navigation, and more, styled in the typical facebook look and feel.
9
+        <p>
10
+        <p><a href="http://github.com/ckrack/fbootstrapp" class="btn primary large">Visit the github project &raquo;</a></p>
11
+      </div>
12
+
13
+      <!-- Example row of columns -->
14
+      <div class="row">
15
+        <div class="span-one-third">
16
+          <h2>Based on Bootstrap</h2>
17
+          <p>Fbootstrap is based on Twitter's excellent Bootstrap, as the name might indicate.</p>
18
+          <p><a class="btn" href="http://twitter.github.com/bootstrap">View details &raquo;</a></p>
19
+        </div>
20
+        <div class="span-one-third">
21
+          <h2>Built with less</h2>
22
+           <p>Fbootstrapp comes with the same less goodness as Bootstrap.</p>
23
+       </div>
24
+        <div class="span-one-third">
25
+          <h2>Styled for Facebook</h2>
26
+          <p>As some researchers found out, it is more intuitive for users to style elements within apps and fanpages in the same look as the parenting facebook site.</p>
27
+          <p><a class="btn primary" href="#typography">View details &raquo;</a></p>
28
+        </div>
29
+      </div>
30
+      
31
+      <div class="row">
32
+        <div class="span-one-third">
33
+          <h5 class="tab">Build fanpage tabs</h5>
34
+          <p>Fbootstrapp includes a 520px grid perfectly suited to create fanpage tabs.</p>
35
+          <p><a class="btn" href="#grid-system">View details &raquo;</a></p>
36
+        </div>
37
+        <div class="span-one-third">
38
+          <h5 class="tab">Build canvas apps</h5>
39
+           <p>Additionally to the 520px grid, a 760px grid suitable to the bigger standalone app canvas is included.</p>
40
+          <p><a class="btn" href="#grid-system">View details &raquo;</a></p>
41
+       </div>
42
+        <div class="span-one-third">
43
+          <h5 class="tab">
44
+            Twitter
45
+            <a href="http://twitter.com/clmnsk" class="pull-right">@clmnsk</a>
46
+          </h5>
47
+          <p>Go and build awesome apps for facebook! Then tell me about it on twitter:</p>
48
+          <p>
49
+              <a href="https://twitter.com/clmnsk" class="twitter-follow-button pull-right" data-show-count="false">Follow @clmnsk</a>
50
+              <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
51
+          </p>
52
+        </div>
53
+      </div>
54
+      
55
+</section>      
56
+
57
+
58
+<!-- Grid system
59
+================================================== -->
60
+<section id="grid-system">
61
+  <div class="page-header">
62
+    <h1>Grid system <small>Rock the standard grid or create your own</small></h1>
63
+  </div>
64
+  <h2>Default grids</h2>
65
+  <p>
66
+    The default grid systems provided as part of FBootstrappp are a 760px and a 520px wide 12-column grids.
67
+    They are a flavor of the popular 960 grid system, but without the additional margin/padding on the left and right sides.
68
+  </p>
69
+  <h3>760 px grid</h3>
70
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"span6"</span><span class="tag">&gt;</span></li><li class="L2"><span class="pln">    ...</span></li><li class="L3"><span class="pln">  </span><span class="tag">&lt;/div&gt;</span></li><li class="L4"><span class="pln">  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"span10"</span><span class="tag">&gt;</span></li><li class="L5"><span class="pln">    ...</span></li><li class="L6"><span class="pln">  </span><span class="tag">&lt;/div&gt;</span></li><li class="L7"><span class="tag">&lt;/div&gt;</span></li></ol></pre>
71
+  <div class="row show-grid" title="12 column layout">
72
+    <div class="span1">1</div>
73
+    <div class="span1">1</div>
74
+    <div class="span1">1</div>
75
+    <div class="span1">1</div>
76
+    <div class="span1">1</div>
77
+    <div class="span1">1</div>
78
+    <div class="span1">1</div>
79
+    <div class="span1">1</div>
80
+    <div class="span1">1</div>
81
+    <div class="span1">1</div>
82
+    <div class="span1">1</div>
83
+    <div class="span1">1</div>
84
+  </div><!-- /row -->
85
+  <div class="row show-grid" title="6 column layout">
86
+    <div class="span2">2</div>
87
+    <div class="span2">2</div>
88
+    <div class="span2">2</div>
89
+    <div class="span2">2</div>
90
+    <div class="span2">2</div>
91
+    <div class="span2">2</div>
92
+  </div><!-- /row -->
93
+  <div class="row show-grid" title="4 column layout">
94
+    <div class="span3">3</div>
95
+    <div class="span3">3</div>
96
+    <div class="span3">3</div>
97
+    <div class="span3">3</div>
98
+  </div><!-- /row -->
99
+  <div class="row show-grid" title="Three column layout">
100
+    <div class="span4">4</div>
101
+    <div class="span4">4</div>
102
+    <div class="span4">4</div>
103
+  </div><!-- /row -->
104
+  <div class="row show-grid" title="Default three column layout">
105
+    <div class="span-one-third">1/3</div>
106
+    <div class="span-one-third">1/3</div>
107
+    <div class="span-one-third">1/3</div>
108
+  </div><!-- /row -->
109
+  <div class="row show-grid" title="One-third and two-thirds layout">
110
+    <div class="span-one-third">1/3</div>
111
+    <div class="span-two-thirds">2/3</div>
112
+  </div><!-- /row -->
113
+  <div class="row show-grid" title="Irregular three column layout">
114
+    <div class="span2">2</div>
115
+    <div class="span5">5</div>
116
+    <div class="span5">5</div>
117
+  </div><!-- /row -->
118
+  <div class="row show-grid" title="Half and half">
119
+    <div class="span6">6</div>
120
+    <div class="span6">6</div>
121
+  </div><!-- /row -->
122
+  <div class="row show-grid" title="Example uncommon two-column layout">
123
+    <div class="span3">3</div>
124
+    <div class="span9">9</div>
125
+  </div><!-- /row -->
126
+  <div class="row show-grid" title="Unnecessary single column layout">
127
+    <div class="span12">12</div>
128
+  </div><!-- /row -->
129
+
130
+  <br>
131
+
132
+  <h2>Offsetting columns</h2>
133
+  <div class="row show-grid">
134
+    <div class="span4">4</div>
135
+    <div class="span4 offset4">4 offset 4</div>
136
+  </div><!-- /row -->
137
+  <div class="row show-grid">
138
+    <div class="span-one-third offset-two-thirds">1/3 offset 2/3s</div>
139
+  </div><!-- /row -->
140
+  <div class="row show-grid">
141
+    <div class="span4 offset2">4 offset 2</div>
142
+    <div class="span4 offset2">4 offset 2</div>
143
+  </div><!-- /row -->
144
+  <div class="row show-grid">
145
+    <div class="span10 offset2">10 offset 2</div>
146
+  </div><!-- /row -->
147
+
148
+  <br>
149
+
150
+  <div class="row">
151
+    <div class="span4">
152
+      <h2>Nesting columns</h2>
153
+      <p>Nest your content if you must by creating a <code>.row</code> within an existing column.</p>
154
+    </div>
155
+    <div class="span12">
156
+      <h4>Example of nested columns</h4>
157
+      <div class="row show-grid">
158
+        <div class="span12">
159
+          Level 1 of column
160
+          <div class="row show-grid">
161
+            <div class="span6">
162
+              Level 2
163
+            </div>
164
+            <div class="span6">
165
+              Level 2
166
+            </div>
167
+          </div>
168
+        </div>
169
+      </div>
170
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"span12"</span><span class="tag">&gt;</span></li><li class="L2"><span class="pln">    Level 1 of column</span></li><li class="L3"><span class="pln">    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span></li><li class="L4"><span class="pln">      </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"span6"</span><span class="tag">&gt;</span></li><li class="L5"><span class="pln">        Level 2</span></li><li class="L6"><span class="pln">      </span><span class="tag">&lt;/div&gt;</span></li><li class="L7"><span class="pln">      </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"span6"</span><span class="tag">&gt;</span></li><li class="L8"><span class="pln">        Level 2</span></li><li class="L9"><span class="pln">      </span><span class="tag">&lt;/div&gt;</span></li><li class="L0"><span class="pln">    </span><span class="tag">&lt;/div&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;/div&gt;</span></li><li class="L2"><span class="tag">&lt;/div&gt;</span></li></ol></pre>
171
+    </div>
172
+  </div>
173
+  <br>
174
+
175
+  <div class="row">
176
+    <div class="span10">
177
+      <h2>Roll your own grid</h2>
178
+      <p>Built into Bootstrap are a handful of variables for customizing the default grid system. With a bit of customization, you can modify the size of columns, their gutters, and the container they reside in.</p>
179
+    </div>
180
+    <div class="span12">
181
+      <h3>Inside the grid</h3>
182
+      <p>The variables needed to modify the grid system currently all reside in <code>variables.less</code>.</p>
183
+      <table class="bordered-table zebra-striped">
184
+        <thead>
185
+          <tr>
186
+            <th>Variable</th>
187
+            <th>Default value</th>
188
+            <th>Description</th>
189
+          </tr>
190
+        </thead>
191
+        <tbody>
192
+          <tr>
193
+            <td><code>@gridColumns</code></td>
194
+            <td>16</td>
195
+            <td>The number of columns within the grid</td>
196
+          </tr>
197
+          <tr>
198
+            <td><code>@gridColumnWidth</code></td>
199
+            <td>40px</td>
200
+            <td>The width of each column within the grid</td>
201
+          </tr>
202
+          <tr>
203
+            <td><code>@gridGutterWidth</code></td>
204
+            <td>20px</td>
205
+            <td>The negative space between each column</td>
206
+          </tr>
207
+          <tr>
208
+            <td><code>@siteWidth</code></td>
209
+            <td><em>Computed sum of all columns and gutters</em></td>
210
+            <td>We use some basic match to count the number of columns and gutters and set the width of the <code>.fixed-container()</code> mixin.</td>
211
+          </tr>
212
+        </tbody>
213
+      </table>
214
+      <h3>Now to customize</h3>
215
+      <p>Modifying the grid means changing the three <code>@grid-*</code> variables and recompiling the Less files.</p>
216
+      <p>Bootstrap comes equipped to handle a grid system with up to 24 columns; the default is just 16. Here's how your grid variables would look customized to a 24-column grid.</p>
217
+      <pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="lit">@gridColumns</span><span class="pun">:</span><span class="pln">       </span><span class="lit">24</span><span class="pun">;</span></li><li class="L1"><span class="lit">@gridColumnWidth</span><span class="pun">:</span><span class="pln">   </span><span class="lit">20px</span><span class="pun">;</span></li><li class="L2"><span class="lit">@gridGutterWidth</span><span class="pun">:</span><span class="pln">   </span><span class="lit">20px</span><span class="pun">;</span></li></ol></pre>
218
+      <p>Once recompiled, you'll be set!</p>
219
+    </div>
220
+  </div>
221
+</section>
222
+
223
+
224
+
225
+<!-- Typography
226
+================================================== -->
227
+<section id="typography">
228
+  <div class="page-header">
229
+    <h1>Typography <small>Headings, paragraphs, lists, and other inline type elements</small></h1>
230
+  </div>
231
+
232
+  <!-- Headings & Paragraph Copy -->
233
+  <h2>Headings &amp; copy</h2>
234
+  <p>A standard typographic hierarchy for structuring your webpages.</p>
235
+  <p>The entire typographic grid is based on two Less variables in our variables.less file: <code>@basefont</code> and <code>@baseline</code>. The first is the base font-size used throughout and the second is the base line-height.</p>
236
+  <p>We use those variables, and some math, to create the margins, paddings, and line-heights of all our type and more.</p>
237
+  <div class="row">
238
+    <div class="span4">
239
+      <h1>h1. Heading 1</h1>
240
+      <h2>h2. Heading 2</h2>
241
+      <h3>h3. Heading 3</h3>
242
+      <h4>h4. Heading 4</h4>
243
+      <h5>h5. Heading 5</h5>
244
+      <h6>h6. Heading 6</h6>
245
+    </div>
246
+    <div class="span8">
247
+      <h3>Example paragraph</h3>
248
+      <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
249
+      <h1>Example heading <small>Has sub-heading…</small></h1>
250
+      <h5 class="tab">Tab heading<a href="#" class="pull-right">Test link</a></h1>
251
+      <code>&lt;h5 class="tab"&gt;</code>
252
+    </div>
253
+  </div>
254
+
255
+  <!-- Misc Elements -->
256
+  <div class="row">
257
+    <div class="span4">
258
+      <h2>Misc. elements</h2>
259
+      <p>Using emphasis, addresses, &amp; abbreviations</p>
260
+      <p>
261
+        <code>&lt;strong&gt;</code>
262
+        <code>&lt;em&gt;</code>
263
+        <code>&lt;address&gt;</code>
264
+        <code>&lt;abbr&gt;</code>
265
+      </p>
266
+    </div>
267
+    <div class="span12">
268
+      <h3>When to use</h3>
269
+      <p>Emphasis tags (<code>&lt;strong&gt;</code> and <code>&lt;em&gt;</code>) should be used to indicate additional importance or emphasis of a word or phrase relative to its surrounding copy. Use <code>&lt;strong&gt;</code> for importance and <code>&lt;em&gt;</code> for <em>stress</em> emphasis.</p>
270
+      <h3>Emphasis in a paragraph</h3>
271
+      <p><a href="#">Fusce dapibus</a>, <strong>tellus ac cursus commodo</strong>, <em>tortor mauris condimentum nibh</em>, ut fermentum massa justo sit amet risus. Maecenas faucibus mollis interdum. Nulla vitae elit libero, a pharetra augue.</p>
272
+      <p><strong>Note:</strong> It's still okay to use <code>&lt;b&gt;</code> and <code>&lt;i&gt;</code> tags in HTML5 and they don't have to be styled bold and italic, respectively (although if there is a more semantic element, use it). <code>&lt;b&gt;</code> is meant to highlight words or phrases without conveying additional importance, while <code>&lt;i&gt;</code> is mostly for voice, technical terms, etc.</p>
273
+      <h3>Addresses</h3>
274
+      <p>The <code>&lt;address&gt;</code> element is used for contact information for its nearest ancestor, or the entire body of work. Here are two examples of how it could be used:</p>
275
+
276
+      <div class="row">
277
+        <div class="span4">
278
+          <address>
279
+            <strong>Twitter, Inc.</strong><br>
280
+            795 Folsom Ave, Suite 600<br>
281
+            San Francisco, CA 94107<br>
282
+            <abbr title="Phone">P:</abbr> (123) 456-7890
283
+          </address>
284
+        </div>
285
+        <div class="span4">
286
+          <address>
287
+            <strong>Full Name</strong><br>
288
+            <a mailto="">first.last@gmail.com</a>
289
+          </address>
290
+        </div>
291
+      </div>
292
+
293
+      <p><strong>Note:</strong> Each line in an <code>&lt;address&gt;</code> must end with a line-break (<code>&lt;br /&gt;</code>) or be wrapped in a block-level tag (e.g., <code>&lt;p&gt;</code>) to properly structure the content.</p>
294
+      <h3>Abbreviations</h3>
295
+      <p>For abbreviations and acronyms, use the <code>&lt;abbr&gt;</code> tag (<code>&lt;acronym&gt;</code> is deprecated in <abbr title="HyperText Markup Langugage 5">HTML5</abbr>). Put the shorthand form within the tag and set a title for the complete name.</p>
296
+    </div>
297
+  </div><!-- /row -->
298
+
299
+  <!-- Blockquotes -->
300
+  <div class="row">
301
+    <div class="span4">
302
+      <h2>Blockquotes</h2>
303
+      <p>
304
+        <code>&lt;blockquote&gt;</code>
305
+        <code>&lt;p&gt;</code>
306
+        <code>&lt;small&gt;</code>
307
+      </p>
308
+    </div>
309
+    <div class="span12">
310
+      <h3>How to quote</h3>
311
+      <p>To include a blockquote, wrap <code>&lt;blockquote&gt;</code> around <code>&lt;p&gt;</code> and <code>&lt;small&gt;</code> tags. Use the <code>&lt;small&gt;</code> element to cite your source and you'll get an em dash <code>&amp;mdash;</code> before it.</p>
312
+      <blockquote>
313
+        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.</p>
314
+        <small>Dr. Julius Hibbert</small>
315
+      </blockquote>
316
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;blockquote&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;p&gt;</span><span class="pln">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.</span><span class="tag">&lt;/p&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;small&gt;</span><span class="pln">Dr. Julius Hibbert</span><span class="tag">&lt;/small&gt;</span></li><li class="L3"><span class="tag">&lt;/blockquote&gt;</span></li></ol></pre>
317
+    </div>
318
+  </div><!-- /row -->
319
+
320
+  <h2>Lists</h2>
321
+  <div class="row">
322
+    <div class="span4">
323
+      <h4>Unordered <code>&lt;ul&gt;</code></h4>
324
+      <ul>
325
+        <li>Lorem ipsum dolor sit amet</li>
326
+        <li>Consectetur adipiscing elit</li>
327
+        <li>Integer molestie lorem at massa</li>
328
+        <li>Facilisis in pretium nisl aliquet</li>
329
+        <li>Nulla volutpat aliquam velit
330
+          <ul>
331
+            <li>Phasellus iaculis neque</li>
332
+            <li>Purus sodales ultricies</li>
333
+            <li>Vestibulum laoreet porttitor sem</li>
334
+            <li>Ac tristique libero volutpat at</li>
335
+          </ul>
336
+        </li>
337
+        <li>Faucibus porta lacus fringilla vel</li>
338
+        <li>Aenean sit amet erat nunc</li>
339
+        <li>Eget porttitor lorem</li>
340
+      </ul>
341
+    </div>
342
+    <div class="span4">
343
+      <h4>Unstyled <code>&lt;ul.unstyled&gt;</code></h4>
344
+      <ul class="unstyled">
345
+        <li>Lorem ipsum dolor sit amet</li>
346
+        <li>Consectetur adipiscing elit</li>
347
+        <li>Integer molestie lorem at massa</li>
348
+        <li>Facilisis in pretium nisl aliquet</li>
349
+        <li>Nulla volutpat aliquam velit
350
+          <ul>
351
+            <li>Phasellus iaculis neque</li>
352
+            <li>Purus sodales ultricies</li>
353
+            <li>Vestibulum laoreet porttitor sem</li>
354
+            <li>Ac tristique libero volutpat at</li>
355
+          </ul>
356
+        </li>
357
+        <li>Faucibus porta lacus fringilla vel</li>
358
+        <li>Aenean sit amet erat nunc</li>
359
+        <li>Eget porttitor lorem</li>
360
+      </ul>
361
+    </div>
362
+    <div class="span4">
363
+      <h4>Ordered <code>&lt;ol&gt;</code></h4>
364
+      <ol>
365
+        <li>Lorem ipsum dolor sit amet</li>
366
+        <li>Consectetur adipiscing elit</li>
367
+        <li>Integer molestie lorem at massa</li>
368
+        <li>Facilisis in pretium nisl aliquet</li>
369
+        <li>Nulla volutpat aliquam velit</li>
370
+        <li>Faucibus porta lacus fringilla vel</li>
371
+        <li>Aenean sit amet erat nunc</li>
372
+        <li>Eget porttitor lorem</li>
373
+      </ol>
374
+    </div>
375
+    <div class="span4">
376
+      <h4>Description <code>dl</code></h4>
377
+      <dl>
378
+        <dt>Description lists</dt>
379
+        <dd>A description list is perfect for defining terms.</dd>
380
+        <dt>Euismod</dt>
381
+        <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd>
382
+        <dd>Donec id elit non mi porta gravida at eget metus.</dd>
383
+        <dt>Malesuada porta</dt>
384
+        <dd>Etiam porta sem malesuada magna mollis euismod.</dd>
385
+      </dl>
386
+    </div>
387
+  </div><!-- /row -->
388
+
389
+
390
+
391
+
392
+
393
+  <!-- Code -->
394
+  <div class="row">
395
+    <div class="span4">
396
+      <h2>Code</h2>
397
+      <p>
398
+        <code>&lt;code&gt;</code>
399
+        <code>&lt;pre&gt;</code>
400
+      </p>
401
+      <p>Pimp your code in style with two simple tags. For even more awesomeness through javascript, drop in Google's code prettify library and you're set.</p>
402
+    </div>
403
+    <div class="span12">
404
+      <h3>Presenting code</h3>
405
+      <p>Code, blocks of or just snippets inline, can be displayed with style just by wrapping in the right tag. For blocks of code spanning multiple lines, use the <code>&lt;pre&gt;</code> element. For inline code, use the <code>&lt;code&gt;</code> element.</p>
406
+      <table class="bordered-table zebra-striped">
407
+        <thead>
408
+          <tr>
409
+            <th style="width: 190px;">Element</th>
410
+            <th>Result</th>
411
+          </tr>
412
+        </thead>
413
+        <tbody>
414
+          <tr>
415
+            <td><code>&lt;code&gt;</code></td>
416
+            <td>In a line of text like this, your wrapped code will look like this <code>&lt;html&gt;</code> element.</td>
417
+          </tr>
418
+          <tr>
419
+            <td><code>&lt;pre&gt;</code></td>
420
+            <td>
421
+<pre>&lt;div&gt;
422
+  &lt;h1&gt;Heading&lt;/h1&gt;
423
+  &lt;p&gt;Something right here...&lt;/p&gt;
424
+&lt;/div&gt;</pre>
425
+              <p><strong>Note:</strong> Be sure to keep code within <code>&lt;pre&gt;</code> tags as close to the left as possible; it will render all tabs.</p>
426
+            </td>
427
+          </tr>
428
+          <tr>
429
+            <td><code>&lt;pre class="prettyprint"&gt;</code></td>
430
+            <td>
431
+              <p>Using the google-code-prettify library, your blocks of code get a slightly different visual style and automatic syntax highlighting.</p>
432
+<pre class="prettyprint"><span class="tag">&lt;div&gt;</span><span class="pln">
433
+  </span><span class="tag">&lt;h1&gt;</span><span class="pln">Heading</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
434
+  </span><span class="tag">&lt;p&gt;</span><span class="pln">Something right here...</span><span class="tag">&lt;/p&gt;</span><span class="pln">
435
+</span><span class="tag">&lt;/div&gt;</span></pre>
436
+              <p><a href="http://code.google.com/p/google-code-prettify/">Download google-code-prettify</a> and view the readme for <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html">how to use</a>.</p>
437
+            </td>
438
+          </tr>
439
+        </tbody>
440
+      </table>
441
+    </div>
442
+  </div><!-- /row -->
443
+
444
+  <!-- Labels -->
445
+  <div class="row">
446
+    <div class="span4">
447
+      <h2>Inline labels</h2>
448
+      <p>
449
+        <code>&lt;span class="label"&gt;</code>
450
+      </p>
451
+      <p>Call attention to or flag any phrase in your body text.</p>
452
+    </div>
453
+    <div class="span12">
454
+      <h3>Label anything</h3>
455
+      <p>Ever needed one of those fancy <span class="label success">New!</span> or <span class="label important">Important</span> flags when writing code? Well, now you have them. Here's what's included by default:</p>
456
+      <table class="bordered-table zebra-striped">
457
+        <thead>
458
+          <tr>
459
+            <th style="width: 50%;">Label</th>
460
+            <th>Result</th>
461
+          </tr>
462
+        </thead>
463
+        <tbody>
464
+          <tr>
465
+            <td>
466
+              <code>&lt;span class="label"&gt;Default&lt;/span&gt;</code>
467
+            </td>
468
+            <td>
469
+              <span class="label">Default</span>
470
+            </td>
471
+          </tr>
472
+          <tr>
473
+            <td>
474
+              <code>&lt;span class="label success"&gt;New&lt;/span&gt;</code>
475
+            </td>
476
+            <td>
477
+              <span class="label success">New</span>
478
+            </td>
479
+          </tr>
480
+          <tr>
481
+            <td>
482
+              <code>&lt;span class="label warning"&gt;Warning&lt;/span&gt;</code>
483
+            </td>
484
+            <td>
485
+              <span class="label warning">Warning</span>
486
+            </td>
487
+          </tr>
488
+          <tr>
489
+            <td>
490
+              <code>&lt;span class="label important"&gt;Important&lt;/span&gt;</code>
491
+            </td>
492
+            <td>
493
+              <span class="label important">Important</span>
494
+            </td>
495
+          </tr>
496
+          <tr>
497
+            <td>
498
+              <code>&lt;span class="label notice"&gt;Notice&lt;/span&gt;</code>
499
+            </td>
500
+            <td>
501
+              <span class="label notice">Notice</span>
502
+            </td>
503
+          </tr>
504
+          <tr>
505
+            <td>
506
+              <code>Some Text&lt;span class="label num"&gt;Numeric Indication&lt;/span&gt;</code>
507
+            </td>
508
+            <td>
509
+              Some Text<span class="label num">13</span>
510
+            </td>
511
+          </tr>
512
+        </tbody>
513
+      </table>
514
+    </div>
515
+  </div><!-- /row -->
516
+
517
+</section>
518
+
519
+
520
+
521
+<!-- Media
522
+================================================== -->
523
+<section id="media">
524
+  <div class="page-header">
525
+    <h1>Media <small>Displaying images and videos</small></h1>
526
+  </div>
527
+  <!-- Table structure -->
528
+  <h2>Media grid</h2>
529
+  <p>Display thumbnails of varying sizes on pages with a low HTML footprint and minimal styles.</p>
530
+  <div class="row">
531
+    <div class="span12">
532
+      <h3>Example thumbnails</h3>
533
+      <p>Thumbnails in the <code>.media-grid</code> can be any size, but they work best when mapped directly to the built-in Bootstrap grid system. Image widths like 90, 210, and 330 combine with a few pixels of padding to equal the <code>.span2</code>, <code>.span4</code>, and <code>.span6</code> column sizes.</p>
534
+      <h4>Large</h4>
535
+      <ul class="media-grid">
536
+        <li>
537
+          <a href="#">
538
+            <img class="thumbnail" src="http://placehold.it/360x200" alt="">
539
+          </a>
540
+        </li>
541
+        <li>
542
+          <a href="#">
543
+            <img class="thumbnail" src="http://placehold.it/360x200" alt="">
544
+          </a>
545
+        </li>
546
+      </ul>
547
+      <h4>Medium</h4>
548
+      <ul class="media-grid">
549
+        <li>
550
+          <a href="#">
551
+            <img class="thumbnail" src="http://placehold.it/165x140" alt="">
552
+          </a>
553
+        </li>
554
+        <li>
555
+          <a href="#">
556
+            <img class="thumbnail" src="http://placehold.it/165x140" alt="">
557
+          </a>
558
+        </li>
559
+        <li>
560
+          <a href="#">
561
+            <img class="thumbnail" src="http://placehold.it/165x140" alt="">
562
+          </a>
563
+        </li>
564
+        <li>
565
+          <a href="#">
566
+            <img class="thumbnail" src="http://placehold.it/165x140" alt="">
567
+          </a>
568
+        </li>
569
+        <li>
570
+          <a href="#">
571
+            <img class="thumbnail" src="http://placehold.it/165x140" alt="">
572
+          </a>
573
+        </li>
574
+      </ul>
575
+      <h4>Small</h4>
576
+      <ul class="media-grid">
577
+        <li>
578
+          <a href="#">
579
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
580
+          </a>
581
+        </li>
582
+        <li>
583
+          <a href="#">
584
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
585
+          </a>
586
+        </li>
587
+        <li>
588
+          <a href="#">
589
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
590
+          </a>
591
+        </li>
592
+        <li>
593
+          <a href="#">
594
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
595
+          </a>
596
+        </li>
597
+        <li>
598
+          <a href="#">
599
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
600
+          </a>
601
+        </li>
602
+        <li>
603
+          <a href="#">
604
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
605
+          </a>
606
+        </li>
607
+      </ul>
608
+      <h4>Coding them</h4>
609
+      <p>Media grids are easy to use and rather simple on the markup side. Their dimensions are purely based on the size of the images included.</p>
610
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"media-grid"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;li&gt;</span></li><li class="L2"><span class="pln">    </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span></li><li class="L3"><span class="pln">      </span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"thumbnail"</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"http://placehold.it/330x230"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span></li><li class="L4"><span class="pln">    </span><span class="tag">&lt;/a&gt;</span></li><li class="L5"><span class="pln">  </span><span class="tag">&lt;/li&gt;</span></li><li class="L6"><span class="pln">  </span><span class="tag">&lt;li&gt;</span></li><li class="L7"><span class="pln">    </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span></li><li class="L8"><span class="pln">      </span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"thumbnail"</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"http://placehold.it/330x230"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span></li><li class="L9"><span class="pln">    </span><span class="tag">&lt;/a&gt;</span></li><li class="L0"><span class="pln">  </span><span class="tag">&lt;/li&gt;</span></li><li class="L1"><span class="tag">&lt;/ul&gt;</span></li></ol></pre>
611
+    </div>
612
+  </div><!-- /row -->
613
+</section>
614
+
615
+
616
+
617
+<!-- Tables
618
+================================================== -->
619
+<section id="tables">
620
+  <div class="page-header">
621
+    <h1>Tables <small>For, you guessed it, tabular data</small></h1>
622
+  </div>
623
+  <!-- Table structure -->
624
+  <h2>Building tables</h2>
625
+  <p>
626
+    <code>&lt;table&gt;</code>
627
+    <code>&lt;thead&gt;</code>
628
+    <code>&lt;tbody&gt;</code>
629
+    <code>&lt;tr&gt;</code>
630
+    <code>&lt;th&gt;</code>
631
+    <code>&lt;td&gt;</code>
632
+    <code>&lt;colspan&gt;</code>
633
+    <code>&lt;caption&gt;</code>
634
+  </p>
635
+  <p>Tables are great—for a lot of things. Great tables, however, need a bit of markup love to be useful, scalable, and readable (at the code level). Here are a few tips to help.</p>
636
+  <p>Always wrap your column headers in a <code>&lt;thead&gt;</code> such that hierarchy is <code>&lt;thead&gt;</code> &gt; <code>&lt;tr&gt;</code> &gt; <code>&lt;th&gt;</code>.</p>
637
+  <p>Similar to the column headers, all your table’s body content should be wrapped in a <code>&lt;tbody&gt;</code> so your hierarchy is <code>&lt;tbody&gt;</code> &gt; <code>&lt;tr&gt;</code> &gt; <code>&lt;td&gt;</code>.</p>
638
+  <div class="row">
639
+    <div class="span12">
640
+      <h3>Example: Default table styles</h3>
641
+      <p>All tables will be automatically styled with only the essential borders to ensure readability and maintain structure. No need to add extra classes or attributes.</p>
642
+      <table>
643
+        <thead>
644
+          <tr>
645
+            <th>#</th>
646
+            <th>First Name</th>
647
+            <th>Last Name</th>
648
+            <th>Language</th>
649
+          </tr>
650
+        </thead>
651
+        <tbody>
652
+          <tr>
653
+            <td>1</td>
654
+            <td>Some</td>
655
+            <td>One</td>
656
+            <td>English</td>
657
+          </tr>
658
+          <tr>
659
+            <td>2</td>
660
+            <td>Joe</td>
661
+            <td>Sixpack</td>
662
+            <td>English</td>
663
+          </tr>
664
+          <tr>
665
+            <td>3</td>
666
+            <td>Stu</td>
667
+            <td>Dent</td>
668
+            <td>Code</td>
669
+          </tr>
670
+        </tbody>
671
+      </table>
672
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;table&gt;</span></li><li class="L1"><span class="pln">  ...</span></li><li class="L2"><span class="tag">&lt;/table&gt;</span></li></ol></pre>
673
+      <h3>Example: Condensed table</h3>
674
+      <p>For tables that require more data in tighter spaces, use the condensed flavor that cuts padding in half. It can also be used in conjunction with borders and zebra-stripes, just like the default table styles.</p>
675
+      <table class="condensed-table">
676
+        <thead>
677
+          <tr>
678
+            <th>#</th>
679
+            <th>First Name</th>
680
+            <th>Last Name</th>
681
+            <th>Language</th>
682
+          </tr>
683
+        </thead>
684
+        <tbody>
685
+          <tr>
686
+            <th>1</th>
687
+            <td>Some</td>
688
+            <td>One</td>
689
+            <td>English</td>
690
+          </tr>
691
+          <tr>
692
+            <th>2</th>
693
+            <td>Joe</td>
694
+            <td>Sixpack</td>
695
+            <td>English</td>
696
+          </tr>
697
+          <tr>
698
+            <th>3</th>
699
+            <td>Stu</td>
700
+            <td>Dent</td>
701
+            <td>Code</td>
702
+          </tr>
703
+        </tbody>
704
+      </table>
705
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"condensed-table"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  ...</span></li><li class="L2"><span class="tag">&lt;/table&gt;</span></li></ol></pre>
706
+      <h3>Example: Bordered table</h3>
707
+      <p>Make your tables look just a wee bit sleeker by rounding their corners and adding borders on all sides.</p>
708
+      <table class="bordered-table">
709
+        <thead>
710
+          <tr>
711
+            <th>#</th>
712
+            <th>First Name</th>
713
+            <th>Last Name</th>
714
+            <th>Language</th>
715
+          </tr>
716
+        </thead>
717
+        <tbody>
718
+          <tr>
719
+            <th>1</th>
720
+            <td>Some</td>
721
+            <td>One</td>
722
+            <td>English</td>
723
+          </tr>
724
+          <tr>
725
+            <th>2</th>
726
+            <td>Joe</td>
727
+            <td>Sixpack</td>
728
+            <td>English</td>
729
+          </tr>
730
+          <tr>
731
+            <th>3</th>
732
+            <td>Stu</td>
733
+            <td>Dent</td>
734
+            <td>Code</td>
735
+          </tr>
736
+        </tbody>
737
+      </table>
738
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"bordered-table"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  ...</span></li><li class="L2"><span class="tag">&lt;/table&gt;</span></li></ol></pre>
739
+      <h3>Example: Zebra-striped</h3>
740
+      <p>Get a little fancy with your tables by adding zebra-striping—just add the <code>.zebra-striped</code> class.</p>
741
+      <table class="bordered-table zebra-striped">
742
+        <thead>
743
+          <tr>
744
+            <th>#</th>
745
+            <th>First Name</th>
746
+            <th>Last Name</th>
747
+            <th>Language</th>
748
+          </tr>
749
+        </thead>
750
+        <tbody>
751
+          <tr>
752
+            <td>1</td>
753
+            <td>Some</td>
754
+            <td>One</td>
755
+            <td>English</td>
756
+          </tr>
757
+          <tr>
758
+            <td>2</td>
759
+            <td>Joe</td>
760
+            <td>Sixpack</td>
761
+            <td>English</td>
762
+          </tr>
763
+          <tr>
764
+            <td>3</td>
765
+            <td>Stu</td>
766
+            <td>Dent</td>
767
+            <td>Code</td>
768
+          </tr>
769
+          <tr>
770
+            <td colspan="4">
771
+              span 4 columns
772
+            </td>
773
+          </tr>
774
+          <tr>
775
+            <td colspan="2">
776
+              span 2 columns
777
+            </td>
778
+            <td colspan="2">
779
+              span 2 columns
780
+            </td>
781
+          </tr>
782
+        </tbody>
783
+      </table>
784
+      <p><strong>Note:</strong> Zebra-striping is a progressive enhancement not available for older browsers like IE8 and below.</p>
785
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"zebra-striped"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  ...</span></li><li class="L2"><span class="tag">&lt;/table&gt;</span></li></ol></pre>
786
+      <h3>Example: Zebra-striped w/ TableSorter.js</h3>
787
+      <p>Taking the previous example, we improve the usefulness of our tables by providing sorting functionality via <a href="http://jquery.com">jQuery</a> and the <a href="http://tablesorter.com/docs/">Tablesorter</a> plugin. <strong>Click any column’s header to change the sort.</strong></p>
788
+      <table class="zebra-striped" id="sortTableExample">
789
+        <thead>
790
+          <tr>
791
+            <th class="header">#</th>
792
+            <th class="yellow header headerSortDown">First Name</th>
793
+            <th class="blue header">Last Name</th>
794
+            <th class="green header">Language</th>
795
+          </tr>
796
+        </thead>
797
+        <tbody>
798
+          
799
+          
800
+          
801
+        <tr>
802
+            <td>2</td>
803
+            <td>Joe</td>
804
+            <td>Sixpack</td>
805
+            <td>English</td>
806
+          </tr><tr>
807
+            <td>3</td>
808
+            <td>Stu</td>
809
+            <td>Dent</td>
810
+            <td>Code</td>
811
+          </tr><tr>
812
+            <td>1</td>
813
+            <td>Your</td>
814
+            <td>One</td>
815
+            <td>English</td>
816
+          </tr></tbody>
817
+      </table>
818
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"js/jquery/jquery.tablesorter.min.js"</span><span class="tag">&gt;&lt;/script&gt;</span></li><li class="L1"><span class="tag">&lt;script</span><span class="pln"> </span><span class="tag">&gt;</span></li><li class="L2"><span class="pln">  $</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span></li><li class="L3"><span class="pln">    $</span><span class="pun">(</span><span class="str">"table#sortTableExample"</span><span class="pun">).</span><span class="pln">tablesorter</span><span class="pun">({</span><span class="pln"> sortList</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[[</span><span class="lit">1</span><span class="pun">,</span><span class="lit">0</span><span class="pun">]]</span><span class="pln"> </span><span class="pun">});</span></li><li class="L4"><span class="pln">  </span><span class="pun">});</span></li><li class="L5"><span class="tag">&lt;/script&gt;</span></li><li class="L6"><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"zebra-striped"</span><span class="tag">&gt;</span></li><li class="L7"><span class="pln">  ...</span></li><li class="L8"><span class="tag">&lt;/table&gt;</span></li></ol></pre>
819
+    </div>
820
+  </div><!-- /row -->
821
+</section>
822
+
823
+
824
+
825
+<!-- Forms
826
+================================================== -->
827
+<section id="forms">
828
+  <div class="page-header">
829
+    <h1>Forms</h1>
830
+  </div>
831
+
832
+  <h2>Default styles</h2>
833
+  <p>All forms are given default styles to present them in a readable and scalable way. Styles are provided for text inputs, select lists, textareas, radio buttons and checkboxes, and buttons.</p>
834
+  <div class="row">
835
+    <div class="span12">
836
+      <form>
837
+        <fieldset>
838
+          <legend>Example form legend</legend>
839
+          <div class="clearfix">
840
+            <label for="xlInput">X-Large input</label>
841
+            <div class="input">
842
+              <input class="xlarge" id="xlInput" name="xlInput" size="30" type="text">
843
+            </div>
844
+          </div><!-- /clearfix -->
845
+          <div class="clearfix">
846
+            <label for="normalSelect">Select</label>
847
+            <div class="input">
848
+              <select name="normalSelect" id="normalSelect">
849
+                <option>1</option>
850
+                <option>2</option>
851
+                <option>3</option>
852
+                <option>4</option>
853
+                <option>5</option>
854
+              </select>
855
+            </div>
856
+          </div><!-- /clearfix -->
857
+          <div class="clearfix">
858
+            <label for="mediumSelect">Select</label>
859
+            <div class="input">
860
+              <select class="medium" name="mediumSelect" id="mediumSelect">
861
+                <option>1</option>
862
+                <option>2</option>
863
+                <option>3</option>
864
+                <option>4</option>
865
+                <option>5</option>
866
+              </select>
867
+            </div>
868
+          </div><!-- /clearfix -->
869
+          <div class="clearfix">
870
+            <label for="multiSelect">Multiple select</label>
871
+            <div class="input">
872
+              <select class="medium" size="5" multiple="multiple" name="multiSelect" id="multiSelect">
873
+                <option>1</option>
874
+                <option>2</option>
875
+                <option>3</option>
876
+                <option>4</option>
877
+                <option>5</option>
878
+              </select>
879
+            </div>
880
+          </div><!-- /clearfix -->
881
+          <div class="clearfix">
882
+            <label>Uneditable input</label>
883
+            <div class="input">
884
+              <span class="uneditable-input">Some value here</span>
885
+            </div>
886
+          </div><!-- /clearfix -->
887
+          <div class="clearfix">
888
+            <label for="disabledInput">Disabled input</label>
889
+            <div class="input">
890
+              <input class="xlarge disabled" id="disabledInput" name="disabledInput" size="30" type="text" placeholder="Disabled input here… carry on." disabled="">
891
+            </div>
892
+          </div><!-- /clearfix -->
893
+          <div class="clearfix">
894
+            <label for="disabledInput">Disabled textarea</label>
895
+            <div class="input">
896
+              <textarea class="xxlarge" name="textarea" id="textarea" rows="3" disabled=""></textarea>
897
+            </div>
898
+          </div><!-- /clearfix -->
899
+          <div class="clearfix error">
900
+            <label for="errorInput">Input with error</label>
901
+            <div class="input">
902
+              <input class="xlarge error" id="errorInput" name="errorInput" size="30" type="text">
903
+              <span class="help-inline">Small snippet of help text</span>
904
+            </div>
905
+          </div><!-- /clearfix -->
906
+          <div class="clearfix success">
907
+            <label for="successInput">Input with success</label>
908
+            <div class="input">
909
+              <input class="xlarge error" id="successInput" name="successInput" size="30" type="text">
910
+              <span class="help-inline">Success!</span>
911
+            </div>
912
+          </div><!-- /clearfix -->
913
+          <div class="clearfix warning">
914
+            <label for="warningInput">Input with warning</label>
915
+            <div class="input">
916
+              <input class="xlarge error" id="warningInput" name="warningInput" size="30" type="text">
917
+              <span class="help-inline">Ruh roh!</span>
918
+            </div>
919
+          </div><!-- /clearfix -->
920
+        </fieldset>
921
+        <fieldset>
922
+          <legend>Example form legend</legend>
923
+          <div class="clearfix">
924
+            <label for="prependedInput">Prepended text</label>
925
+            <div class="input">
926
+              <div class="input-prepend">
927
+                <span class="add-on">@</span>
928
+                <input class="medium" id="prependedInput" name="prependedInput" size="16" type="text">
929
+              </div>
930
+              <span class="help-block">Here's some help text</span>
931
+            </div>
932
+          </div><!-- /clearfix -->
933
+          <div class="clearfix">
934
+            <label for="prependedInput2">Prepended checkbox</label>
935
+            <div class="input">
936
+              <div class="input-prepend">
937
+                <label class="add-on"><input type="checkbox" name="" id="" value=""></label>
938
+                <input class="mini" id="prependedInput2" name="prependedInput2" size="16" type="text">
939
+              </div>
940
+            </div>
941
+          </div><!-- /clearfix -->
942
+          <div class="clearfix">
943
+            <label for="appendedInput">Appended checkbox</label>
944
+            <div class="input">
945
+              <div class="input-append">
946
+                <input class="mini" id="appendedInput" name="appendedInput" size="16" type="text">
947
+                <label class="add-on active"><input type="checkbox" name="" id="" value="" checked="checked"></label>
948
+              </div>
949
+            </div>
950
+          </div><!-- /clearfix -->
951
+          <div class="clearfix">
952
+            <label for="fileInput">File input</label>
953
+            <div class="input">
954
+              <input class="input-file" id="fileInput" name="fileInput" type="file">
955
+            </div>
956
+          </div><!-- /clearfix -->
957
+        </fieldset>
958
+        <fieldset>
959
+          <legend>Example form legend</legend>
960
+          <div class="clearfix">
961
+            <label id="optionsCheckboxes">List of options</label>
962
+            <div class="input">
963
+              <ul class="inputs-list">
964
+                <li>
965
+                  <label>
966
+                    <input type="checkbox" name="optionsCheckboxes" value="option1">
967
+                    <span>Option one is this and that—be sure to include why it’s great</span>
968
+                  </label>
969
+                </li>
970
+                <li>
971
+                  <label>
972
+                    <input type="checkbox" name="optionsCheckboxes" value="option2">
973
+                    <span>Option two can also be checked and included in form results</span>
974
+                  </label>
975
+                </li>
976
+                <li>
977
+                  <label>
978
+                    <input type="checkbox" name="optionsCheckboxes" value="option2">
979
+                    <span>Option three can—yes, you guessed it—also be checked and included in form results. Let's make it super long so that everyone can see how it wraps, too.</span>
980
+                  </label>
981
+                </li>
982
+                <li>
983
+                  <label class="disabled">
984
+                    <input type="checkbox" name="optionsCheckboxes" value="option2" disabled="">
985
+                    <span>Option four cannot be checked as it is disabled.</span>
986
+                  </label>
987
+                </li>
988
+              </ul>
989
+              <span class="help-block">
990
+                <strong>Note:</strong> Labels surround all the options for much larger click areas and a more usable form.
991
+              </span>
992
+            </div>
993
+          </div><!-- /clearfix -->
994
+          <div class="clearfix">
995
+            <label>Date range</label>
996
+            <div class="input">
997
+              <div class="inline-inputs">
998
+                <input class="small" type="text" value="May 1, 2011">
999
+                <input class="mini" type="text" value="12:00am">
1000
+                to
1001
+                <input class="small" type="text" value="May 8, 2011">
1002
+                <input class="mini" type="text" value="11:59pm">
1003
+                <span class="help-block">All times are shown as Pacific Standard Time (GMT -08:00).</span>
1004
+              </div>
1005
+            </div>
1006
+          </div><!-- /clearfix -->
1007
+          <div class="clearfix">
1008
+            <label for="textarea">Textarea</label>
1009
+            <div class="input">
1010
+              <textarea class="xxlarge" id="textarea2" name="textarea2" rows="3"></textarea>
1011
+              <span class="help-block">
1012
+                Block of help text to describe the field above if need be.
1013
+              </span>
1014
+            </div>
1015
+          </div><!-- /clearfix -->
1016
+          <div class="clearfix">
1017
+            <label id="optionsRadio">List of options</label>
1018
+            <div class="input">
1019
+              <ul class="inputs-list">
1020
+                <li>
1021
+                  <label>
1022
+                    <input type="radio" checked="" name="optionsRadios" value="option1">
1023
+                    <span>Option one is this and that—be sure to include why it’s great</span>
1024
+                  </label>
1025
+                </li>
1026
+                <li>
1027
+                  <label>
1028
+                    <input type="radio" name="optionsRadios" value="option2">
1029
+                    <span>Option two is something else and selecting it will deselect option 1</span>
1030
+                  </label>
1031
+                </li>
1032
+              </ul>
1033
+            </div>
1034
+          </div><!-- /clearfix -->
1035
+          <div class="actions">
1036
+            <input type="submit" class="btn primary" value="Save changes">&nbsp;<button type="reset" class="btn">Cancel</button>
1037
+          </div>
1038
+        </fieldset>
1039
+      </form>
1040
+    </div>
1041
+  </div><!-- /row -->
1042
+
1043
+  <br>
1044
+
1045
+  <div class="row">
1046
+    <div class="span4">
1047
+      <h2>Stacked forms</h2>
1048
+      <p>Add <code>.form-stacked</code> to your form’s HTML and you’ll have labels on top of their fields instead of to their left. This works great if your forms are short or you have two columns of inputs for heavier forms.</p>
1049
+    </div>
1050
+    <div class="span12">
1051
+      <form action="" class="form-stacked">
1052
+        <fieldset>
1053
+          <legend>Example form legend</legend>
1054
+          <div class="clearfix">
1055
+            <label for="xlInput3">X-Large input</label>
1056
+            <div class="input">
1057
+              <input class="xlarge" id="xlInput3" name="xlInput3" size="30" type="text">
1058
+            </div>
1059
+          </div><!-- /clearfix -->
1060
+          <div class="clearfix">
1061
+            <label for="stackedSelect">Select</label>
1062
+            <div class="input">
1063
+              <select name="stackedSelect" id="stackedSelect">
1064
+                <option>1</option>
1065
+                <option>2</option>
1066
+                <option>3</option>
1067
+                <option>4</option>
1068
+                <option>5</option>
1069
+              </select>
1070
+            </div>
1071
+          </div><!-- /clearfix -->
1072
+        </fieldset>
1073
+        <fieldset>
1074
+          <legend>Example form legend</legend>
1075
+          <div class="clearfix error">
1076
+            <label for="xlInput4">X-Large input</label>
1077
+            <div class="input">
1078
+              <input class="xlarge error" id="xlInput4" name="xlInput4" size="30" type="text">
1079
+              <span class="help-inline">Small snippet of help text</span>
1080
+            </div>
1081
+          </div><!-- /clearfix -->
1082
+          <div class="clearfix">
1083
+            <label id="optionsCheckboxes">List of options</label>
1084
+            <div class="input">
1085
+              <ul class="inputs-list">
1086
+                <li>
1087
+                  <label>
1088
+                    <input type="checkbox" name="optionsCheckboxes" value="option1">
1089
+                    <span>Option one is this and that—be sure to include why it’s great</span>
1090
+                  </label>
1091
+                </li>
1092
+                <li>
1093
+                  <label>
1094
+                    <input type="checkbox" name="optionsCheckboxes" value="option2">
1095
+                    <span>Option two can also be checked and included in form results</span>
1096
+                  </label>
1097
+                </li>
1098
+              </ul>
1099
+              <span class="help-block">
1100
+                <strong>Note:</strong> Labels surround all the options for much larger click areas and a more usable form.
1101
+              </span>
1102
+            </div>
1103
+          </div><!-- /clearfix -->
1104
+        </fieldset>
1105
+        <div class="actions">
1106
+          <button type="submit" class="btn primary">Save changes</button>&nbsp;<button type="reset" class="btn">Cancel</button>
1107
+        </div>
1108
+      </form>
1109
+    </div>
1110
+  </div><!-- /row -->
1111
+
1112
+  <div class="row">
1113
+    <div class="span4">
1114
+      <h2>Form field sizes</h2>
1115
+      <p>Customize any form <code>input</code>, <code>select</code>, or <code>textarea</code> width by adding just a few classes to your markup.</p>
1116
+      <p>As of v1.3.0, we have added the grid-based sizing classes for form elements. <strong>Please use the these over the existing <code>.mini</code>, <code>.small</code>, etc classes.</strong></p>
1117
+    </div>
1118
+    <div class="span12">
1119
+      <form action="">
1120
+        <div class="clearfix"><input class="span2" id="" name="" type="text" placeholder=".span2"></div>
1121
+        <div class="clearfix"><input class="span3" id="" name="" type="text" placeholder=".span3"></div>
1122
+        <div class="clearfix"><input class="span4" id="" name="" type="text" placeholder=".span4"></div>
1123
+        <div class="clearfix"><input class="span5" id="" name="" type="text" placeholder=".span5"></div>
1124
+        <div class="clearfix"><input class="span6" id="" name="" type="text" placeholder=".span6"></div>
1125
+        <div class="clearfix"><input class="span7" id="" name="" type="text" placeholder=".span7"></div>
1126
+        <div class="clearfix"><input class="span8" id="" name="" type="text" placeholder=".span8"></div>
1127
+        <div class="clearfix"><input class="span9" id="" name="" type="text" placeholder=".span9"></div>
1128
+        <div class="clearfix"><input class="span10" id="" name="" type="text" placeholder=".span10"></div>
1129
+        <div class="clearfix"><input class="span11" id="" name="" type="text" placeholder=".span11"></div>
1130
+        <div class="clearfix"><input class="span12" id="" name="" type="text" placeholder=".span12"></div>
1131
+      </form>
1132
+    </div>
1133
+  </div>
1134
+
1135
+  <div class="row">
1136
+    <div class="span4">
1137
+      <h2>Buttons</h2>
1138
+      <p>As a convention, buttons are used for actions while links are used for objects. For instance, "Download" could be a button and "recent activity" could be a link.</p>
1139
+      <p>All buttons default to a light gray style, but a number of functional classes can be applied for different color styles. These classes include a blue <code>.primary</code> class, a light-blue <code>.info</code> class, a green <code>.success</code> class, and a red <code>.danger</code> class.</p>
1140
+    </div>
1141
+    <div class="span12">
1142
+      <h3>Example buttons</h3>
1143
+      <p>Button styles can be applied to anything with the <code>.btn</code> applied. Typically you’ll want to apply these to only <code>&lt;a&gt;</code>, <code>&lt;button&gt;</code>, and select <code>&lt;input&gt;</code> elements. Here’s how it looks:</p>
1144
+      <div class="well" style="padding: 14px 19px;">
1145
+        <button class="btn primary">Primary</button>&nbsp;<button class="btn">Default</button>&nbsp;<button class="btn info">Info</button>&nbsp;<button class="btn success">Success</button>&nbsp;<button class="btn danger">Danger</button>
1146
+      </div>
1147
+      <h3>Alternate sizes</h3>
1148
+      <p>Fancy larger or smaller buttons? Have at it!</p>
1149
+      <div class="well">
1150
+        <a href="#" class="btn large primary">Primary action</a>
1151
+        <a href="#" class="btn large">Action</a>
1152
+      </div>
1153
+      <div class="well" style="padding: 16px 19px;">
1154
+        <a href="#" class="btn small primary">Primary action</a>
1155
+        <a href="#" class="btn small">Action</a>
1156
+      </div>
1157
+      <h3>Disabled state</h3>
1158
+      <p>For buttons that are not active or are disabled by the app for one reason or another, use the disabled state. That’s <code>.disabled</code> for links and <code>:disabled</code> for <code>&lt;button&gt;</code> elements.</p>
1159
+      <h4>Links</h4>
1160
+      <div class="well">
1161
+        <a href="#" class="btn large primary disabled">Primary action</a>
1162
+        <a href="#" class="btn large disabled">Action</a>
1163
+      </div>
1164
+      <h4>Buttons</h4>
1165
+      <div class="well">
1166
+        <button class="btn large primary disabled" disabled="disabled">Primary action</button>&nbsp;<button class="btn large" disabled="">Action</button>
1167
+      </div>
1168
+    </div>
1169
+  </div><!-- /row -->
1170
+</section>
1171
+
1172
+
1173
+
1174
+<!-- Navigation
1175
+================================================== -->
1176
+<section id="navigation">
1177
+  <div class="page-header">
1178
+    <h1>Navigation</h1>
1179
+  </div>
1180
+
1181
+  <h2>Tabs and pills</h2>
1182
+  <p>Create simple secondary navigation with a <code>&lt;ul&gt;</code>. Swap between tabs or pills by adding the appropriate class.</p>
1183
+  <p>Great for sub-sections of content like our account settings pages and user timelines for toggling between pages of like content. Available in tabbed or pill styles.</p>
1184
+  <div class="row">
1185
+    <div class="span12">
1186
+      <h3>Basic tabs example</h3>
1187
+      <p>Tabs can be used as regular navigation (loading external pages in the same tab) or as tabbable content areas for swapping out panes of content. We have a <a href="./javascript.html#tabs">tabs plugin</a> that can be used to integrate the latter.</p>
1188
+      <ul class="tabs">
1189
+        <li class="active"><a href="#">Home</a></li>
1190
+        <li><a href="#">Profile</a></li>
1191
+        <li><a href="#">Messages</a></li>
1192
+        <li><a href="#">Settings</a></li>
1193
+        <li><a href="#">Contact</a></li>
1194
+        <li class="dropdown" data-dropdown="dropdown">
1195
+          <a href="#" class="dropdown-toggle">Dropdown</a>
1196
+          <ul class="dropdown-menu">
1197
+            <li><a href="#">Secondary link</a></li>
1198
+            <li><a href="#">Something else here</a></li>
1199
+            <li class="divider"></li>
1200
+            <li><a href="#">Another link</a></li>
1201
+          </ul>
1202
+        </li>
1203
+      </ul>
1204
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"tabs"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"active"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Home</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Profile</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L3"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Messages</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L4"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Settings</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L5"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Contact</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L6"><span class="tag">&lt;/ul&gt;</span></li></ol></pre>
1205
+      <h3>Basic pills example</h3>
1206
+      <ul class="pills">
1207
+        <li class="active"><a href="#">Home</a></li>
1208
+        <li><a href="#">Profile</a></li>
1209
+        <li><a href="#">Messages</a></li>
1210
+        <li><a href="#">Settings</a></li>
1211
+        <li><a href="#">Contact</a></li>
1212
+      </ul>
1213
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pills"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"active"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Home</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Profile</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L3"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Messages</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L4"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Settings</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L5"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Contact</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L6"><span class="tag">&lt;/ul&gt;</span></li></ol></pre>
1214
+    </div>
1215
+  </div><!-- /row -->
1216
+
1217
+  <!-- Breadcrumbs -->
1218
+  <div class="row">
1219
+    <div class="span4">
1220
+      <h2>Breadcrumbs</h2>
1221
+      <p>Breadcrumb navigation is used as a way to show users where they are within an app or a site, but not for primary navigation.</p>
1222
+    </div>
1223
+    <div class="span12">
1224
+      <ul class="breadcrumb">
1225
+        <li class="active">Home</li>
1226
+      </ul>
1227
+      <ul class="breadcrumb">
1228
+        <li><a href="#">Home</a> <span class="divider">&gt;</span></li>
1229
+        <li class="active">Middle page</li>
1230
+      </ul>
1231
+      <ul class="breadcrumb">
1232
+        <li><a href="#">Home</a> <span class="divider">&gt;</span></li>
1233
+        <li><a href="#">Middle page</a> <span class="divider">&gt;</span></li>
1234
+        <li class="active">Another one</li>
1235
+      </ul>
1236
+      <ul class="breadcrumb">
1237
+        <li><a href="#">Home</a> <span class="divider">&gt;</span></li>
1238
+        <li><a href="#">Middle page</a> <span class="divider">&gt;</span></li>
1239
+        <li><a href="#">Another one</a> <span class="divider">&gt;</span></li>
1240
+        <li class="active">You are here</li>
1241
+      </ul>
1242
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"breadcrumb"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Home</span><span class="tag">&lt;/a&gt;</span><span class="pln"> </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"divider"</span><span class="tag">&gt;</span><span class="pln">/</span><span class="tag">&lt;/span&gt;&lt;/li&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Middle page</span><span class="tag">&lt;/a&gt;</span><span class="pln"> </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"divider"</span><span class="tag">&gt;</span><span class="pln">/</span><span class="tag">&lt;/span&gt;&lt;/li&gt;</span></li><li class="L3"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Another one</span><span class="tag">&lt;/a&gt;</span><span class="pln"> </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"divider"</span><span class="tag">&gt;</span><span class="pln">/</span><span class="tag">&lt;/span&gt;&lt;/li&gt;</span></li><li class="L4"><span class="pln">  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"active"</span><span class="tag">&gt;</span><span class="pln">You are here</span><span class="tag">&lt;/li&gt;</span></li><li class="L5"><span class="tag">&lt;/ul&gt;</span></li></ol></pre>
1243
+    </div>
1244
+  </div>
1245
+
1246
+  <!-- Pagination -->
1247
+  <div class="row">
1248
+    <div class="span4">
1249
+      <h2>Pagination</h2>
1250
+      <p>Ultra simplistic and minimally styled pagination inspired by Rdio. The large block is hard to miss, easily scalable, and provides large click areas.</p>
1251
+    </div>
1252
+    <div class="span12">
1253
+      <div class="pagination">
1254
+        <ul>
1255
+          <li class="prev disabled"><a href="#">? Previous</a></li>
1256
+          <li class="active"><a href="#">1</a></li>
1257
+          <li><a href="#">2</a></li>
1258
+          <li><a href="#">3</a></li>
1259
+          <li><a href="#">4</a></li>
1260
+          <li><a href="#">5</a></li>
1261
+          <li class="next"><a href="#">Next ?</a></li>
1262
+        </ul>
1263
+      </div>
1264
+      <div class="pagination">
1265
+        <ul>
1266
+          <li class="prev"><a href="#">? Previous</a></li>
1267
+          <li class="active"><a href="#">10</a></li>
1268
+          <li><a href="#">11</a></li>
1269
+          <li><a href="#">12</a></li>
1270
+          <li class="disabled"><a href="#">…</a></li>
1271
+          <li><a href="#">19</a></li>
1272
+          <li><a href="#">20</a></li>
1273
+          <li><a href="#">21</a></li>
1274
+          <li class="next"><a href="#">Next ?</a></li>
1275
+        </ul>
1276
+      </div>
1277
+      <div class="pagination">
1278
+        <ul>
1279
+          <li class="prev"><a href="#">? Previous</a></li>
1280
+          <li><a href="#">12</a></li>
1281
+          <li><a href="#">13</a></li>
1282
+          <li><a href="#">14</a></li>
1283
+          <li class="active"><a href="#">15</a></li>
1284
+          <li><a href="#">16</a></li>
1285
+          <li><a href="#">17</a></li>
1286
+          <li class="next"><a href="#">Next ?</a></li>
1287
+        </ul>
1288
+      </div>
1289
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pagination"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;ul&gt;</span></li><li class="L2"><span class="pln">    </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"prev disabled"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">&amp;larr; Previous</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L3"><span class="pln">    </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"active"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">1</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L4"><span class="pln">    </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">2</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L5"><span class="pln">    </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">3</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L6"><span class="pln">    </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">4</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L7"><span class="pln">    </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">5</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L8"><span class="pln">    </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"next"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Next &amp;rarr;</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L9"><span class="pln">  </span><span class="tag">&lt;/ul&gt;</span></li><li class="L0"><span class="tag">&lt;/div&gt;</span></li></ol></pre>
1290
+    </div>
1291
+  </div><!-- /row -->
1292
+
1293
+</section>
1294
+
1295
+
1296
+
1297
+<!-- Alerts & Messages
1298
+================================================== -->
1299
+<section id="alerts">
1300
+  <div class="page-header">
1301
+    <h1>Alerts &amp; Errors <small>Styles for success, warning, error, and info messages</small></h1>
1302
+  </div>
1303
+  <!-- Basic alert messages -->
1304
+  <h2>Basic alerts</h2>
1305
+  <p><code>.alert-message</code></p>
1306
+  <p>One-line messages for highlighting the failure, possible failure, or success of an action. Particularly useful for forms.</p>
1307
+  <p><a class="btn js-btn" href="./javascript.html#alerts">Get the javascript »</a></p>
1308
+  <div class="row">
1309
+    <div class="span12">
1310
+      <div class="alert-message warning">
1311
+        <a class="close" href="#">×</a>
1312
+        <p><strong>Holy guacamole!</strong> Best check yo self, you’re not <a href="#">looking too good</a>.</p>
1313
+      </div>
1314
+      <div class="alert-message error">
1315
+        <a class="close" href="#">×</a>
1316
+        <p><strong>Oh snap!</strong> Change this and that and <a href="#">try again</a>.</p>
1317
+      </div>
1318
+      <div class="alert-message success">
1319
+        <a class="close" href="#">×</a>
1320
+        <p><strong>Well done!</strong> You successfully <a href="#">read this</a> alert message.</p>
1321
+      </div>
1322
+      <div class="alert-message info">
1323
+        <a class="close" href="#">×</a>
1324
+        <p><strong>Heads up!</strong> This is an alert that needs your attention, but it’s not <a href="#">a huge priority</a> just yet.</p>
1325
+      </div>
1326
+
1327
+      <h4>Example code</h4>
1328
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"alert-message warning"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"close"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">×</span><span class="tag">&lt;/a&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;p&gt;&lt;strong&gt;</span><span class="pln">Holy guacamole!</span><span class="tag">&lt;/strong&gt;</span><span class="pln"> Best check yo self, you’re not looking too good.</span><span class="tag">&lt;/p&gt;</span></li><li class="L3"><span class="tag">&lt;/div&gt;</span></li></ol></pre>
1329
+    </div>
1330
+  </div><!-- /row -->
1331
+  <!-- Block messages -->
1332
+  <div class="row">
1333
+    <div class="span4">
1334
+      <h2>Block messages</h2>
1335
+      <p><code>.alert-message.block-message</code></p>
1336
+      <p>For messages that require a bit of explanation, we have paragraph style alerts. These are perfect for bubbling up longer error messages, warning a user of a pending action, or just presenting information for more emphasis on the page.</p>
1337
+      <p><a class="btn js-btn" href="./javascript.html#alerts">Get the javascript »</a></p>
1338
+    </div>
1339
+    <div class="span12">
1340
+      <div class="alert-message block-message warning">
1341
+        <a class="close" href="#">×</a>
1342
+        <p><strong>Holy guacamole! This is a warning!</strong> Best check yo self, you’re not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p>
1343
+        <div class="alert-actions">
1344
+          <a class="btn small" href="#">Take this action</a> <a class="btn small" href="#">Or do this</a>
1345
+        </div>
1346
+      </div>
1347
+      <div class="alert-message block-message error">
1348
+        <a class="close" href="#">×</a>
1349
+        <p><strong>Oh snap! You got an error!</strong> Change this and that and <a href="#">try again</a>.</p>
1350
+        <ul>
1351
+          <li>Duis mollis est non commodo luctus</li>
1352
+          <li>Nisi erat porttitor ligula</li>
1353
+          <li>Eget lacinia odio sem nec elit</li>
1354
+        </ul>
1355
+        <div class="alert-actions">
1356
+          <a class="btn small" href="#">Take this action</a> <a class="btn small" href="#">Or do this</a>
1357
+        </div>
1358
+      </div>
1359
+      <div class="alert-message block-message success">
1360
+        <a class="close" href="#">×</a>
1361
+        <p><strong>Well done!</strong> You successfully read this alert message. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas faucibus mollis interdum.</p>
1362
+        <div class="alert-actions">
1363
+          <a class="btn small" href="#">Take this action</a> <a class="btn small" href="#">Or do this</a>
1364
+        </div>
1365
+      </div>
1366
+      <div class="alert-message block-message info">
1367
+        <a class="close" href="#">×</a>
1368
+        <p><strong>Heads up!</strong> This is an alert that needs your attention, but it’s not a huge priority just yet.</p>
1369
+        <div class="alert-actions">
1370
+          <a class="btn small" href="#">Take this action</a> <a class="btn small" href="#">Or do this</a>
1371
+        </div>
1372
+      </div>
1373
+
1374
+      <h4>Example code</h4>
1375
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"alert-message block-message warning"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"close"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">×</span><span class="tag">&lt;/a&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;p&gt;&lt;strong&gt;</span><span class="pln">Holy guacamole! This is a warning!</span><span class="tag">&lt;/strong&gt;</span><span class="pln"> Best check yo self, you’re not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</span><span class="tag">&lt;/p&gt;</span></li><li class="L3"><span class="pln">  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"alert-actions"</span><span class="tag">&gt;</span></li><li class="L4"><span class="pln">    </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"btn small"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Take this action</span><span class="tag">&lt;/a&gt;</span><span class="pln"> </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"btn small"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Or do this</span><span class="tag">&lt;/a&gt;</span></li><li class="L5"><span class="pln">  </span><span class="tag">&lt;/div&gt;</span></li><li class="L6"><span class="tag">&lt;/div&gt;</span></li></ol></pre>
1376
+    </div>
1377
+  </div><!-- /row -->
1378
+</section>
1379
+
1380
+
1381
+
1382
+<!-- Popovers
1383
+================================================== -->
1384
+<section id="popovers">
1385
+  <div class="page-header">
1386
+    <h1>Popovers <small>Components for displaying content in modals, tooltips, and popovers</small></h1>
1387
+  </div>
1388
+  <h2>Modals</h2>
1389
+  <p>Modals—dialogs or lightboxes—are great for contextual actions in situations where it’s important that the background context be maintained.</p>
1390
+  <p><a class="btn js-btn" href="./javascript.html#modal">Get the javascript »</a></p>
1391
+  <div class="row">
1392
+    <div class="span12">
1393
+      <div class="well" style="background-color: #888; border: none; padding: 40px;">
1394
+        <!-- Modal -->
1395
+        <div class="modal" style="position: relative; top: auto; left: auto; margin: 0 auto; z-index: 1">
1396
+          <div class="modal-header">
1397
+            <a href="#" class="close">×</a>
1398
+            <h3>Modal Heading</h3>
1399
+          </div>
1400
+          <div class="modal-body">
1401
+            <p>One fine body…</p>
1402
+          </div>
1403
+          <div class="modal-footer">
1404
+            <a href="#" class="btn primary">Primary</a>
1405
+            <a href="#" class="btn secondary">Secondary</a>
1406
+          </div>
1407
+        </div>
1408
+      </div>
1409
+    </div>
1410
+  </div><!-- /row -->
1411
+
1412
+  <!-- Tooltips --
1413
+  <div class="row">
1414
+    <div class="span4">
1415
+      <h2>Tooltips</h2>
1416
+      <p>Twipsies are super useful for aiding a confused user and pointing them in the right direction.</p>
1417
+      <p><a class="btn js-btn" href="./javascript.html#twipsy">Get the javascript »</a></p>
1418
+    </div>
1419
+    <div class="span12">
1420
+      <div class="twipsies well">
1421
+        <div style="position: relative">
1422
+          <p class="muted" style="margin-bottom: 0">
1423
+Lorem ipsum dolar sit amet illo error <a href="#" data-original-title="below">ipsum</a> veritatis aut iste perspiciatis iste voluptas natus illo quasi odit aut natus consequuntur consequuntur, aut natus illo voluptatem odit perspiciatis laudantium rem doloremque totam voluptas. <a href="#" data-original-title="right">Voluptasdicta</a> eaque beatae aperiam ut enim voluptatem explicabo explicabo, voluptas quia odit fugit accusantium totam totam architecto explicabo sit quasi fugit fugit, totam doloremque unde sunt <a href="#" data-original-title="left">sed</a> dicta quae accusantium fugit voluptas nemo voluptas voluptatem <a href="#" data-original-title="above">rem</a> quae aut veritatis quasi quae.
1424
+          </p>
1425
+        </div>
1426
+      </div>
1427
+    </div>
1428
+  </div><!-- /row -->
1429
+
1430
+  <!-- Popovers -->
1431
+  <div class="row">
1432
+    <div class="span4">
1433
+      <h2>Popovers</h2>
1434
+      <p>Use popovers to provide subtextual information to a page without affecting layout.</p>
1435
+      <p><a class="btn js-btn" href="./javascript.html#popover">Get the javascript »</a></p>
1436
+    </div>
1437
+    <div class="span12">
1438
+      <div class="popover-well">
1439
+         <div class="popover-wrapper">
1440
+          <div class="popover left">
1441
+            <div class="arrow"></div>
1442
+            <div class="inner">
1443
+              <h3 class="title">Popover Title</h3>
1444
+              <div class="content">
1445
+                <p>Etiam porta sem malesuada magna mollis euismod. Maecenas faucibus mollis interdum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
1446
+              </div>
1447
+            </div>
1448
+          </div>
1449
+        </div>
1450
+      </div>
1451
+    </div>
1452
+  </div><!-- /row -->
1453
+</section>
1454
+
1455
+
1456
+
1457
+
1458
+
1459
+<!-- Using Javascript w/ Bootstrap
1460
+ ================================================== -->
1461
+ <section id="javascript">
1462
+   <div class="page-header">
1463
+     <h1>Using javascript with Bootstrap <small>An index of plugins to get you started</small></h1>
1464
+   </div>
1465
+   <h2>Getting started</h2>
1466
+   <p>Integrating javascript with the Bootstrap library is super easy. Below we go over the basics and provide you with some awesome plugins to get you started!</p>
1467
+   <p><a class="btn primary" href="./javascript.html">View javascript docs »</a></p>
1468
+   <div class="row">
1469
+     <div class="span12">
1470
+      <h3>What's included</h3>
1471
+       <p>Bring some of Bootstrap's primary components to life with new custom plugins that work with <a href="http://jquery.com/" target="_blank">jQuery</a> and <a href="http://ender.no.de" target="_blank">Ender</a>. We encourage you to extend and modify them to fit your specific development needs.</p>
1472
+        <table class="bordered-table zebra-striped">
1473
+          <thead>
1474
+            <tr>
1475
+              <th style="width: 150px;">File</th>
1476
+              <th>Description</th>
1477
+            </tr>
1478
+          </thead>
1479
+          <tbody>
1480
+            <tr>
1481
+              <td><a href="./javascript.html#modal">bootstrap-modal.js</a></td>
1482
+              <td>Our Modal plugin is a <strong>super</strong> slim take on the traditional modal js plugin! We took special care to include only the bare functionality that we require at twitter.</td>
1483
+            </tr>
1484
+            <tr>
1485
+              <td><a href="./javascript.html#alerts">bootstrap-alerts.js</a></td>
1486
+              <td>The alert plugin is a super tiny class for adding close functionality to alerts.</td>
1487
+            </tr>
1488
+            <tr>
1489
+              <td><a href="./javascript.html#dropdown">bootstrap-dropdown.js</a></td>
1490
+              <td>This plugin is for adding dropdown interaction to the bootstrap topbar or tabbed navigations.</td>
1491
+            </tr>
1492
+            <tr>
1493
+              <td><a href="./javascript.html#scrollspy">bootstrap-scrollspy.js</a></td>
1494
+              <td>The ScrollSpy plugin is for adding an auto updating nav based on scroll position to the bootstrap topbar.</td>
1495
+            </tr>
1496
+            <tr>
1497
+              <td><a href="./javascript.html#buttons">bootstrap-buttons.js</a></td>
1498
+              <td>This plugin offers additional functionality for managing button state.</td>
1499
+            </tr>
1500
+            <tr>
1501
+             <td><a href="./javascript.html#tabs">bootstrap-tabs.js</a></td>
1502
+              <td>This plugin adds quick, dynamic tab and pill functionality for cycling through local content.</td>
1503
+            </tr>
1504
+            <tr>
1505
+              <td><a href="./javascript.html#twipsy">bootstrap-twipsy.js</a></td>
1506
+              <td>Based on the excellent jQuery.tipsy plugin written by Jason Frame; twipsy is an updated version, which doesn't rely on images, uses css3 for animations, and data-attributes for local title storage!</td>
1507
+            </tr>
1508
+            <tr>
1509
+              <td><a href="./javascript.html#popover">bootstrap-popover.js</a></td>
1510
+              <td>The popover plugin provides a simple interface for adding popovers to your application. It extends the <a href="#twipsy">boostrap-twipsy.js</a> plugin, so be sure to grab that file as well when including popovers in your project!</td>
1511
+            </tr>
1512
+          </tbody>
1513
+       </table>
1514
+       <h3>Is javascript necessary?</h3>
1515
+       <p><strong>Nope!</strong> Bootstrap is designed first and foremost to be a CSS library. This javascript provides a basic interactive layer on top of the included styles.</p>
1516
+       <p>However, for those who do need javascript, we've provided the plugins above to help you understand how to integrate Bootstrap with javascript and to give you a quick, lightweight option for the basic functionality right away.</p>
1517
+       <p>For more information and to see some live demos, please refer to our <a href="./javascript.html">plugin documentation page</a>.</p>
1518
+     </div>
1519
+   </div>
1520
+ </section>
0 1521
new file mode 100644
... ...
@@ -0,0 +1,4 @@
1
+    <h2><?php echo $title?></h2>
2
+    <p>Vous êtes sur la page d'erreur numéro <?php echo $numPage?></p>
3
+    
4
+    <?php phpinfo();?>
0 5
\ No newline at end of file
1 6
new file mode 100644
... ...
@@ -0,0 +1,8 @@
1
+    <h2><?php echo $title?></h2>
2
+    <p>Vous êtes sur la page numéro <?php echo $numPage?></p>
3
+    
4
+    <ul>
5
+    <?php foreach ($messages as $message) :?>
6
+    	<li> <?= $message?></li>
7
+    <?php endforeach;?>
8
+    </ul>
0 9
\ No newline at end of file
1 10
new file mode 100644
... ...
@@ -0,0 +1,4 @@
1
+    <h2><?php echo $title?></h2>
2
+    <p>Vous êtes sur l'Accueil n°<?php $numPage?></p>
3
+    
4
+    <h1>HELLO_WORLD!</h1>
0 5
\ No newline at end of file
1 6
new file mode 100644
... ...
@@ -0,0 +1,8 @@
1
+    <h2><?php echo $title?></h2>
2
+    <p>Vous êtes sur la page numéro <?php echo $numPage?></p>
3
+    
4
+    <ul>
5
+    <?php foreach ($messages as $message) :?>
6
+    	<li> <?= $message?></li>
7
+    <?php endforeach;?>
8
+    </ul>
0 9
\ No newline at end of file
1 10
new file mode 100755
... ...
@@ -0,0 +1,43 @@
1
+<!doctype html>
2
+<html lang="en">
3
+<head>
4
+  <meta charset="utf-8">
5
+  <title>Page Not Found :(</title>
6
+  <style>
7
+    ::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; }
8
+    ::selection { background: #fe57a1; color: #fff; text-shadow: none; }
9
+    html { padding: 30px 10px; font-size: 20px; line-height: 1.4; color: #737373; background: #f0f0f0; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
10
+    html, input { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
11
+    body { max-width: 500px; _width: 500px; padding: 30px 20px 50px; border: 1px solid #b3b3b3; border-radius: 4px; margin: 0 auto; box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff; background: #fcfcfc; }
12
+    h1 { margin: 0 10px; font-size: 50px; text-align: center; }
13
+    h1 span { color: #bbb; }
14
+    h3 { margin: 1.5em 0 0.5em; }
15
+    p { margin: 1em 0; }
16
+    ul { padding: 0 0 0 40px; margin: 1em 0; }
17
+    .container { max-width: 380px; _width: 380px; margin: 0 auto; }
18
+    /* google search */
19
+    #goog-fixurl ul { list-style: none; padding: 0; margin: 0; }
20
+    #goog-fixurl form { margin: 0; }
21
+    #goog-wm-qt, #goog-wm-sb { border: 1px solid #bbb; font-size: 16px; line-height: normal; vertical-align: top; color: #444; border-radius: 2px; }
22
+    #goog-wm-qt { width: 220px; height: 20px; padding: 5px; margin: 5px 10px 0 0; box-shadow: inset 0 1px 1px #ccc; }
23
+    #goog-wm-sb { display: inline-block; height: 32px; padding: 0 10px; margin: 5px 0 0; white-space: nowrap; cursor: pointer; background-color: #f5f5f5; background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1); background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1); background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1); background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1); -webkit-appearance: none; -moz-appearance: none; appearance: none; *overflow: visible; *display: inline; *zoom: 1; }
24
+    #goog-wm-sb:hover, #goog-wm-sb:focus { border-color: #aaa; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); background-color: #f8f8f8; }
25
+    #goog-wm-qt:focus, #goog-wm-sb:focus { border-color: #105cb6; outline: 0; color: #222; }
26
+    input::-moz-focus-inner { padding: 0; border: 0; }
27
+  </style>
28
+</head>
29
+<body>
30
+  <div class="container">
31
+    <h1>Not found <span>:(</span></h1>
32
+    <p>Sorry, but the page you were trying to view does not exist.</p>
33
+    <p>It looks like this was the result of either:</p>
34
+    <ul>
35
+      <li>a mistyped address</li>
36
+      <li>an out-of-date link</li>
37
+    </ul>
38
+    <script>
39
+      var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
40
+    </script>
41
+    <script src="http://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
42
+  </div>
43
+
0 44
new file mode 100755
1 45
Binary files /dev/null and b/public/apple-touch-icon-114x114-precomposed.png differ
2 46
new file mode 100755
3 47
Binary files /dev/null and b/public/apple-touch-icon-57x57-precomposed.png differ
4 48
new file mode 100755
5 49
Binary files /dev/null and b/public/apple-touch-icon-72x72-precomposed.png differ
6 50
new file mode 100755
7 51
Binary files /dev/null and b/public/apple-touch-icon-precomposed.png differ
8 52
new file mode 100755
9 53
Binary files /dev/null and b/public/apple-touch-icon.png differ
10 54
new file mode 100755
... ...
@@ -0,0 +1,25 @@
1
+<?xml version="1.0"?>
2
+<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
3
+<cross-domain-policy>
4
+
5
+
6
+<!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html -->
7
+
8
+<!-- Most restrictive policy: -->
9
+	<site-control permitted-cross-domain-policies="none"/>
10
+
11
+
12
+
13
+<!-- Least restrictive policy: -->
14
+<!--
15
+	<site-control permitted-cross-domain-policies="all"/>
16
+	<allow-access-from domain="*" to-ports="*" secure="false"/>
17
+	<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
18
+-->
19
+<!--
20
+  If you host a crossdomain.xml file with allow-access-from domain="*"
21
+  and don’t understand all of the points described here, you probably
22
+  have a nasty security vulnerability. ~ simon willison
23
+-->
24
+
25
+</cross-domain-policy>
0 26
new file mode 100755
... ...
@@ -0,0 +1,2846 @@
1
+/*!
2
+ * Bootstrap @VERSION
3
+ *
4
+ * Copyright 2011 Twitter, Inc
5
+ * Licensed under the Apache License v2.0
6
+ * http://www.apache.org/licenses/LICENSE-2.0
7
+ *
8
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
9
+ * Date: @DATE
10
+ */
11
+/* Reset.less
12
+ * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here	that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc).
13
+ * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
14
+html, body {
15
+  margin: 0;
16
+  padding: 0;
17
+}
18
+h1,
19
+h2,
20
+h3,
21
+h4,
22
+h5,
23
+h6,
24
+p,
25
+blockquote,
26
+pre,
27
+a,
28
+abbr,
29
+acronym,
30
+address,
31
+cite,
32
+code,
33
+del,
34
+dfn,
35
+em,
36
+img,
37
+q,
38
+s,
39
+samp,
40
+small,
41
+strike,
42
+strong,
43
+sub,
44
+sup,
45
+tt,
46
+var,
47
+dd,
48
+dl,
49
+dt,
50
+li,
51
+ol,
52
+ul,
53
+fieldset,
54
+form,
55
+label,
56
+legend,
57
+button,
58
+table,
59
+caption,
60
+tbody,
61
+tfoot,
62
+thead,
63
+tr,
64
+th,
65
+td {
66
+  margin: 0;
67
+  padding: 0;
68
+  border: 0;
69
+  font-weight: normal;
70
+  font-style: normal;
71
+  font-size: 100%;
72
+  line-height: 1;
73
+  font-family: inherit;
74
+}
75
+table {
76
+  border-collapse: collapse;
77
+  border-spacing: 0;
78
+}
79
+ol, ul {
80
+  list-style: none;
81
+}
82
+q:before,
83
+q:after,
84
+blockquote:before,
85
+blockquote:after {
86
+  content: "";
87
+}
88
+html {
89
+  font-size: 100%;
90
+  -webkit-text-size-adjust: 100%;
91
+  -ms-text-size-adjust: 100%;
92
+}
93
+a:focus {
94
+  outline: thin dotted;
95
+}
96
+a:hover, a:active {
97
+  outline: 0;
98
+}
99
+article,
100
+aside,
101
+details,
102
+figcaption,
103
+figure,
104
+footer,
105
+header,
106
+hgroup,
107
+nav,
108
+section {
109
+  display: block;
110
+}
111
+audio, canvas, video {
112
+  display: inline-block;
113
+  *display: inline;
114
+  *zoom: 1;
115
+}
116
+audio:not([controls]) {
117
+  display: none;
118
+}
119
+sub, sup {
120
+  font-size: 75%;
121
+  line-height: 0;
122
+  position: relative;
123
+  vertical-align: baseline;
124
+}
125
+sup {
126
+  top: -0.5em;
127
+}
128
+sub {
129
+  bottom: -0.25em;
130
+}
131
+img {
132
+  border: 0;
133
+  -ms-interpolation-mode: bicubic;
134
+}
135
+button,
136
+input,
137
+select,
138
+textarea {
139
+  font-size: 100%;
140
+  margin: 0;
141
+  vertical-align: baseline;
142
+  *vertical-align: middle;
143
+}
144
+button, input {
145
+  line-height: normal;
146
+  *overflow: visible;
147
+}
148
+button::-moz-focus-inner, input::-moz-focus-inner {
149
+  border: 0;
150
+  padding: 0;
151
+}
152
+button,
153
+input[type="button"],
154
+input[type="reset"],
155
+input[type="submit"] {
156
+  cursor: pointer;
157
+  -webkit-appearance: button;
158
+}
159
+input[type="search"] {
160
+  -webkit-appearance: textfield;
161
+  -webkit-box-sizing: content-box;
162
+  -moz-box-sizing: content-box;
163
+  box-sizing: content-box;
164
+}
165
+input[type="search"]::-webkit-search-decoration {
166
+  -webkit-appearance: none;
167
+}
168
+textarea {
169
+  overflow: auto;
170
+  vertical-align: top;
171
+}
172
+/* Variables.less
173
+ * Variables to customize the look and feel of Bootstrap
174
+ * ----------------------------------------------------- */
175
+/*unmodified*/
176
+/*unmodified*/
177
+/*unmodified*/
178
+/* Mixins.less
179
+ * Snippets of reusable CSS to develop faster and keep code readable
180
+ * ----------------------------------------------------------------- */
181
+.container.canvas {
182
+  width: 760px;
183
+  margin-left: auto;
184
+  margin-right: auto;
185
+  zoom: 1;
186
+}
187
+.container.canvas:before, .container.canvas:after {
188
+  display: table;
189
+  content: "";
190
+  zoom: 1;
191
+}
192
+.container.canvas:after {
193
+  clear: both;
194
+}
195
+.container.canvas .row {
196
+  zoom: 1;
197
+  margin-left: -20px;
198
+}
199
+.container.canvas .row:before, .container.canvas .row:after {
200
+  display: table;
201
+  content: "";
202
+  zoom: 1;
203
+}
204
+.container.canvas .row:after {
205
+  clear: both;
206
+}
207
+.container.canvas .row > [class*="span"] {
208
+  display: inline;
209
+  float: left;
210
+  margin-left: 20px;
211
+}
212
+.container.canvas .span1 {
213
+  width: 45px;
214
+}
215
+.container.canvas .span2 {
216
+  width: 110px;
217
+}
218
+.container.canvas .span3 {
219
+  width: 175px;
220
+}
221
+.container.canvas .span4 {
222
+  width: 240px;
223
+}
224
+.container.canvas .span5 {
225
+  width: 305px;
226
+}
227
+.container.canvas .span6 {
228
+  width: 370px;
229
+}
230
+.container.canvas .span7 {
231
+  width: 435px;
232
+}
233
+.container.canvas .span8 {
234
+  width: 500px;
235
+}
236
+.container.canvas .span9 {
237
+  width: 565px;
238
+}
239
+.container.canvas .span10 {
240
+  width: 630px;
241
+}
242
+.container.canvas .span11 {
243
+  width: 695px;
244
+}
245
+.container.canvas .span12 {
246
+  width: 760px;
247
+}
248
+.container.canvas .span13 {
249
+  width: 825px;
250
+}
251
+.container.canvas .span14 {
252
+  width: 890px;
253
+}
254
+.container.canvas .span15 {
255
+  width: 955px;
256
+}
257
+.container.canvas .span16 {
258
+  width: 1020px;
259
+}
260
+.container.canvas .span17 {
261
+  width: 1085px;
262
+}
263
+.container.canvas .span18 {
264
+  width: 1150px;
265
+}
266
+.container.canvas .span19 {
267
+  width: 1215px;
268
+}
269
+.container.canvas .span20 {
270
+  width: 1280px;
271
+}
272
+.container.canvas .span21 {
273
+  width: 1345px;
274
+}
275
+.container.canvas .span22 {
276
+  width: 1410px;
277
+}
278
+.container.canvas .span23 {
279
+  width: 1475px;
280
+}
281
+.container.canvas .span24 {
282
+  width: 1540px;
283
+}
284
+.container.canvas .row > .offset1 {
285
+  margin-left: 85px;
286
+}
287
+.container.canvas .row > .offset2 {
288
+  margin-left: 150px;
289
+}
290
+.container.canvas .row > .offset3 {
291
+  margin-left: 215px;
292
+}
293
+.container.canvas .row > .offset4 {
294
+  margin-left: 280px;
295
+}
296
+.container.canvas .row > .offset5 {
297
+  margin-left: 345px;
298
+}
299
+.container.canvas .row > .offset6 {
300
+  margin-left: 410px;
301
+}
302
+.container.canvas .row > .offset7 {
303
+  margin-left: 475px;
304
+}
305
+.container.canvas .row > .offset8 {
306
+  margin-left: 540px;
307
+}
308
+.container.canvas .row > .offset9 {
309
+  margin-left: 605px;
310
+}
311
+.container.canvas .row > .offset10 {
312
+  margin-left: 670px;
313
+}
314
+.container.canvas .row > .offset11 {
315
+  margin-left: 735px;
316
+}
317
+.container.canvas .row > .offset12 {
318
+  margin-left: 800px;
319
+}
320
+.container.canvas .span-one-third {
321
+  width: 240px;
322
+}
323
+.container.canvas .span-two-thirds {
324
+  width: 500px;
325
+}
326
+.container.canvas .row > .offset-one-third {
327
+  margin-left: 260px;
328
+}
329
+.container.canvas .row > .offset-two-thirds {
330
+  margin-left: 540px;
331
+}
332
+.container.canvas input.span1, .container.canvas textarea.span1 {
333
+  display: inline-block;
334
+  float: none;
335
+  width: 35px;
336
+  margin-left: 0;
337
+}
338
+.container.canvas input.span2, .container.canvas textarea.span2 {
339
+  display: inline-block;
340
+  float: none;
341
+  width: 100px;
342
+  margin-left: 0;
343
+}
344
+.container.canvas input.span3, .container.canvas textarea.span3 {
345
+  display: inline-block;
346
+  float: none;
347
+  width: 165px;
348
+  margin-left: 0;
349
+}
350
+.container.canvas input.span4, .container.canvas textarea.span4 {
351
+  display: inline-block;
352
+  float: none;
353
+  width: 230px;
354
+  margin-left: 0;
355
+}
356
+.container.canvas input.span5, .container.canvas textarea.span5 {
357
+  display: inline-block;
358
+  float: none;
359
+  width: 295px;
360
+  margin-left: 0;
361
+}
362
+.container.canvas input.span6, .container.canvas textarea.span6 {
363
+  display: inline-block;
364
+  float: none;
365
+  width: 360px;
366
+  margin-left: 0;
367
+}
368
+.container.canvas input.span7, .container.canvas textarea.span7 {
369
+  display: inline-block;
370
+  float: none;
371
+  width: 425px;
372
+  margin-left: 0;
373
+}
374
+.container.canvas input.span8, .container.canvas textarea.span8 {
375
+  display: inline-block;
376
+  float: none;
377
+  width: 490px;
378
+  margin-left: 0;
379
+}
380
+.container.canvas input.span9, .container.canvas textarea.span9 {
381
+  display: inline-block;
382
+  float: none;
383
+  width: 555px;
384
+  margin-left: 0;
385
+}
386
+.container.canvas input.span10, .container.canvas textarea.span10 {
387
+  display: inline-block;
388
+  float: none;
389
+  width: 620px;
390
+  margin-left: 0;
391
+}
392
+.container.canvas input.span11, .container.canvas textarea.span11 {
393
+  display: inline-block;
394
+  float: none;
395
+  width: 685px;
396
+  margin-left: 0;
397
+}
398
+.container.canvas input.span12, .container.canvas textarea.span12 {
399
+  display: inline-block;
400
+  float: none;
401
+  width: 750px;
402
+  margin-left: 0;
403
+}
404
+.container.canvas input.span13, .container.canvas textarea.span13 {
405
+  display: inline-block;
406
+  float: none;
407
+  width: 815px;
408
+  margin-left: 0;
409
+}
410
+.container.canvas input.span14, .container.canvas textarea.span14 {
411
+  display: inline-block;
412
+  float: none;
413
+  width: 880px;
414
+  margin-left: 0;
415
+}
416
+.container.canvas input.span15, .container.canvas textarea.span15 {
417
+  display: inline-block;
418
+  float: none;
419
+  width: 945px;
420
+  margin-left: 0;
421
+}
422
+.container.canvas input.span16, .container.canvas textarea.span16 {
423
+  display: inline-block;
424
+  float: none;
425
+  width: 1010px;
426
+  margin-left: 0;
427
+}
428
+.container.canvas table .span1 {
429
+  width: 25px;
430
+}
431
+.container.canvas table .span2 {
432
+  width: 75px;
433
+}
434
+.container.canvas table .span3 {
435
+  width: 125px;
436
+}
437
+.container.canvas table .span4 {
438
+  width: 175px;
439
+}
440
+.container.canvas table .span5 {
441
+  width: 225px;
442
+}
443
+.container.canvas table .span6 {
444
+  width: 275px;
445
+}
446
+.container.canvas table .span7 {
447
+  width: 325px;
448
+}
449
+.container.canvas table .span8 {
450
+  width: 375px;
451
+}
452
+.container.canvas table .span9 {
453
+  width: 425px;
454
+}
455
+.container.canvas table .span10 {
456
+  width: 475px;
457
+}
458
+.container.canvas table .span11 {
459
+  width: 525px;
460
+}
461
+.container.canvas table .span12 {
462
+  width: 575px;
463
+}
464
+.container.canvas table .span13 {
465
+  width: 625px;
466
+}
467
+.container.canvas table .span14 {
468
+  width: 675px;
469
+}
470
+.container.canvas table .span15 {
471
+  width: 725px;
472
+}
473
+.container.canvas table .span16 {
474
+  width: 775px;
475
+}
476
+/*
477
+ * Scaffolding
478
+ * Basic and global styles for generating a grid system, structural layout, and page templates
479
+ * ------------------------------------------------------------------------------------------- */
480
+body {
481
+  background-color: #ffffff;
482
+  margin: 0;
483
+  font-family: "lucida grande", tahoma, verdana, arial, sans-serif;
484
+  font-size: 11px;
485
+  font-weight: normal;
486
+  line-height: 14px;
487
+  color: #333333;
488
+}
489
+.container {
490
+  width: 520px;
491
+  margin-left: auto;
492
+  margin-right: auto;
493
+  zoom: 1;
494
+}
495
+.container:before, .container:after {
496
+  display: table;
497
+  content: "";
498
+  zoom: 1;
499
+}
500
+.container:after {
501
+  clear: both;
502
+}
503
+.container-fluid {
504
+  position: relative;
505
+  min-width: 940px;
506
+  padding-left: 20px;
507
+  padding-right: 20px;
508
+  zoom: 1;
509
+}
510
+.container-fluid:before, .container-fluid:after {
511
+  display: table;
512
+  content: "";
513
+  zoom: 1;
514
+}
515
+.container-fluid:after {
516
+  clear: both;
517
+}
518
+.container-fluid > .sidebar {
519
+  position: absolute;
520
+  top: 0;
521
+  left: 20px;
522
+  width: 220px;
523
+}
524
+.container-fluid > .content {
525
+  margin-left: 240px;
526
+}
527
+a {
528
+  color: #3b5998;
529
+  text-decoration: none;
530
+  line-height: inherit;
531
+  font-weight: inherit;
532
+}
533
+a:hover {
534
+  color: #3b5998;
535
+  text-decoration: underline;
536
+}
537
+.pull-right {
538
+  float: right;
539
+}
540
+.pull-left {
541
+  float: left;
542
+}
543
+.hide {
544
+  display: none;
545
+}
546
+.show {
547
+  display: block;
548
+}
549
+.row {
550
+  zoom: 1;
551
+  margin-left: -20px;
552
+}
553
+.row:before, .row:after {
554
+  display: table;
555
+  content: "";
556
+  zoom: 1;
557
+}
558
+.row:after {
559
+  clear: both;
560
+}
561
+.row > [class*="span"] {
562
+  display: inline;
563
+  float: left;
564
+  margin-left: 20px;
565
+}
566
+.span1 {
567
+  width: 25px;
568
+}
569
+.span2 {
570
+  width: 70px;
571
+}
572
+.span3 {
573
+  width: 115px;
574
+}
575
+.span4 {
576
+  width: 160px;
577
+}
578
+.span5 {
579
+  width: 205px;
580
+}
581
+.span6 {
582
+  width: 250px;
583
+}
584
+.span7 {
585
+  width: 295px;
586
+}
587
+.span8 {
588
+  width: 340px;
589
+}
590
+.span9 {
591
+  width: 385px;
592
+}
593
+.span10 {
594
+  width: 430px;
595
+}
596
+.span11 {
597
+  width: 475px;
598
+}
599
+.span12 {
600
+  width: 520px;
601
+}
602
+.span13 {
603
+  width: 565px;
604
+}
605
+.span14 {
606
+  width: 610px;
607
+}
608
+.span15 {
609
+  width: 655px;
610
+}
611
+.span16 {
612
+  width: 700px;
613
+}
614
+.span17 {
615
+  width: 745px;
616
+}
617
+.span18 {
618
+  width: 790px;
619
+}
620
+.span19 {
621
+  width: 835px;
622
+}
623
+.span20 {
624
+  width: 880px;
625
+}
626
+.span21 {
627
+  width: 925px;
628
+}
629
+.span22 {
630
+  width: 970px;
631
+}
632
+.span23 {
633
+  width: 1015px;
634
+}
635
+.span24 {
636
+  width: 1060px;
637
+}
638
+.row > .offset1 {
639
+  margin-left: 65px;
640
+}
641
+.row > .offset2 {
642
+  margin-left: 110px;
643
+}
644
+.row > .offset3 {
645
+  margin-left: 155px;
646
+}
647
+.row > .offset4 {
648
+  margin-left: 200px;
649
+}
650
+.row > .offset5 {
651
+  margin-left: 245px;
652
+}
653
+.row > .offset6 {
654
+  margin-left: 290px;
655
+}
656
+.row > .offset7 {
657
+  margin-left: 335px;
658
+}
659
+.row > .offset8 {
660
+  margin-left: 380px;
661
+}
662
+.row > .offset9 {
663
+  margin-left: 425px;
664
+}
665
+.row > .offset10 {
666
+  margin-left: 470px;
667
+}
668
+.row > .offset11 {
669
+  margin-left: 515px;
670
+}
671
+.row > .offset12 {
672
+  margin-left: 560px;
673
+}
674
+.span-one-third {
675
+  width: 160px;
676
+}
677
+.span-two-thirds {
678
+  width: 340px;
679
+}
680
+.row > .offset-one-third {
681
+  margin-left: 180px;
682
+}
683
+.row > .offset-two-thirds {
684
+  margin-left: 360px;
685
+}
686
+/* Typography.less
687
+ * Headings, body text, lists, code, and more for a versatile and durable typography system
688
+ * ---------------------------------------------------------------------------------------- */
689
+p {
690
+  font-size: 11px;
691
+  font-weight: normal;
692
+  line-height: 14px;
693
+  margin-bottom: 7px;
694
+}
695
+p small {
696
+  font-size: 9px;
697
+  color: #999999;
698
+}
699
+h1,
700
+h2,
701
+h3,
702
+h4,
703
+h5,
704
+h6 {
705
+  color: #333333;
706
+}
707
+h1 small,
708
+h2 small,
709
+h3 small,
710
+h4 small,
711
+h5 small,
712
+h6 small {
713
+  color: #999999;
714
+}
715
+h1 small.block,
716
+h2 small.block,
717
+h3 small.block,
718
+h4 small.block,
719
+h5 small.block,
720
+h6 small.block {
721
+  display: block;
722
+}
723
+h1.tab,
724
+h2.tab,
725
+h3.tab,
726
+h4.tab,
727
+h5.tab,
728
+h6.tab {
729
+  border-bottom: 1px solid #e2e2e2;
730
+  border-top: 1px solid #e2e2e2;
731
+  margin-bottom: 8px;
732
+  padding: 3px 6px;
733
+  background: #f2f2f2;
734
+  font-weight: bold;
735
+}
736
+h1.tab a,
737
+h2.tab a,
738
+h3.tab a,
739
+h4.tab a,
740
+h5.tab a,
741
+h6.tab a {
742
+  font-weight: normal;
743
+  color: #627aad;
744
+}
745
+h1 {
746
+  margin-bottom: 14px;
747
+  font-size: 24px;
748
+  line-height: 28px;
749
+}
750
+h1 small {
751
+  font-size: 16px;
752
+}
753
+h2 {
754
+  font-size: 20px;
755
+  letter-spacing: -0.03em;
756
+  line-height: 28px;
757
+}
758
+h2 small {
759
+  font-size: 14px;
760
+}
761
+h3,
762
+h4,
763
+h5,
764
+h6 {
765
+  line-height: 28px;
766
+}
767
+h3 {
768
+  font-size: 15px;
769
+  font-weight: bold;
770
+}
771
+h3 small {
772
+  font-size: 13px;
773
+}
774
+h4 {
775
+  font-size: 15px;
776
+}
777
+h4 small {
778
+  font-size: 12px;
779
+}
780
+h5 {
781
+  font-size: 14px;
782
+}
783
+h6 {
784
+  font-size: 13px;
785
+  color: #999999;
786
+  text-transform: uppercase;
787
+}
788
+ul, ol {
789
+  margin: 0 0 14px 25px;
790
+}
791
+ul ul,
792
+ul ol,
793
+ol ol,
794
+ol ul {
795
+  margin-bottom: 0;
796
+}
797
+ul {
798
+  list-style: disc;
799
+}
800
+ol {
801
+  list-style: decimal;
802
+}
803
+li {
804
+  line-height: 14px;
805
+  color: #666666;
806
+}
807
+ul.unstyled {
808
+  list-style: none;
809
+  margin-left: 0;
810
+}
811
+dl {
812
+  margin-bottom: 14px;
813
+}
814
+dl dt, dl dd {
815
+  line-height: 14px;
816
+}
817
+dl dt {
818
+  font-weight: bold;
819
+}
820
+dl dd {
821
+  margin-left: 7px;
822
+}
823
+hr {
824
+  margin: 20px 0 19px;
825
+  border: 0;
826
+  border-bottom: 1px solid #eee;
827
+}
828
+strong {
829
+  font-style: inherit;
830
+  font-weight: bold;
831
+}
832
+em {
833
+  font-style: italic;
834
+  font-weight: inherit;
835
+  line-height: inherit;
836
+}
837
+.muted {
838
+  color: #999999;
839
+}
840
+blockquote {
841
+  margin-bottom: 14px;
842
+  border-left: 5px solid #eee;
843
+  padding-left: 15px;
844
+}
845
+blockquote p {
846
+  font-size: 14px;
847
+  font-weight: 300;
848
+  line-height: 14px;
849
+  margin-bottom: 0;
850
+}
851
+blockquote small {
852
+  display: block;
853
+  font-size: 12px;
854
+  font-weight: 300;
855
+  line-height: 14px;
856
+  color: #999999;
857
+}
858
+blockquote small:before {
859
+  content: '\2014 \00A0';
860
+}
861
+address {
862
+  display: block;
863
+  line-height: 14px;
864
+  margin-bottom: 14px;
865
+}
866
+code, pre {
867
+  padding: 0 3px 2px;
868
+  font-family: Monaco, Andale Mono, Courier New, monospace;
869
+  font-size: 12px;
870
+  -webkit-border-radius: 3px;
871
+  -moz-border-radius: 3px;
872
+  border-radius: 3px;
873
+}
874
+code {
875
+  color: #3b6e22;
876
+  padding: 1px 3px;
877
+}
878
+pre {
879
+  background-color: #f2f2f2;
880
+  display: block;
881
+  padding: 6.5px;
882
+  margin: 0 0 14px;
883
+  line-height: 14px;
884
+  font-size: 12px;
885
+  border: 1px solid #ccc;
886
+  border: 1px solid rgba(0, 0, 0, 0.15);
887
+  -webkit-border-radius: 3px;
888
+  -moz-border-radius: 3px;
889
+  border-radius: 3px;
890
+  white-space: pre;
891
+  white-space: pre-wrap;
892
+  word-wrap: break-word;
893
+}
894
+/* Forms.less
895
+ * Base styles for various input types, form layouts, and states
896
+ * ------------------------------------------------------------- */
897
+form {
898
+  margin-bottom: 14px;
899
+}
900
+fieldset {
901
+  margin-bottom: 14px;
902
+  padding-top: 14px;
903
+}
904
+fieldset legend {
905
+  display: block;
906
+  padding-left: 150px;
907
+  font-size: 16.5px;
908
+  line-height: 1;
909
+  color: #333333;
910
+  *padding: 0 0 5px 145px;
911
+  /* IE6-7 */
912
+
913
+  *line-height: 1.5;
914
+  /* IE6-7 */
915
+
916
+}
917
+form .clearfix {
918
+  margin-bottom: 14px;
919
+  zoom: 1;
920
+}
921
+form .clearfix:before, form .clearfix:after {
922
+  display: table;
923
+  content: "";
924
+  zoom: 1;
925
+}
926
+form .clearfix:after {
927
+  clear: both;
928
+}
929
+label,
930
+input,
931
+select,
932
+textarea {
933
+  font-family: "lucida grande", tahoma, verdana, arial, sans-serif;
934
+  font-size: 11px;
935
+  font-weight: normal;
936
+  line-height: 14px;
937
+}
938
+label {
939
+  padding-top: 6px;
940
+  font-size: 11px;
941
+  font-weight: bold;
942
+  line-height: 14px;
943
+  float: left;
944
+  width: 130px;
945
+  text-align: right;
946
+  color: #666666;
947
+}
948
+form .input {
949
+  margin-left: 150px;
950
+}
951
+input[type=checkbox], input[type=radio] {
952
+  cursor: pointer;
953
+}
954
+input,
955
+textarea,
956
+select,
957
+.uneditable-input {
958
+  display: inline-block;
959
+  width: 210px;
960
+  height: 14px;
961
+  padding: 4px;
962
+  font-size: 11px;
963
+  line-height: 14px;
964
+  color: #666666;
965
+  border: 1px solid #d4dae8;
966
+  -webkit-border-radius: 0px;
967
+  -moz-border-radius: 0px;
968
+  border-radius: 0px;
969
+}
970
+select {
971
+  padding: 2px;
972
+  padding: initial;
973
+}
974
+input[type=checkbox], input[type=radio] {
975
+  width: auto;
976
+  height: auto;
977
+  padding: 0;
978
+  margin: 3px 0;
979
+  *margin-top: 0;
980
+  /* IE6-7 */
981
+
982
+  line-height: normal;
983
+  border: none;
984
+}
985
+input[type=file] {
986
+  background-color: #ffffff;
987
+  padding: initial;
988
+  border: initial;
989
+  line-height: initial;
990
+  -webkit-box-shadow: none;
991
+  -moz-box-shadow: none;
992
+  box-shadow: none;
993
+}
994
+input[type=button], input[type=reset], input[type=submit] {
995
+  width: auto;
996
+  height: auto;
997
+}
998
+select, input[type=file] {
999
+  height: 21px;
1000
+  *height: auto;
1001
+  line-height: 21px;
1002
+  *margin-top: 4px;
1003
+  /* For IE7, add top margin to align select with labels */
1004
+
1005
+}
1006
+select[multiple] {
1007
+  height: inherit;
1008
+  background-color: #ffffff;
1009
+}
1010
+textarea {
1011
+  height: auto;
1012
+}
1013
+.uneditable-input {
1014
+  background-color: #ffffff;
1015
+  display: block;
1016
+  border-color: #eee;
1017
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
1018
+  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
1019
+  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
1020
+  cursor: not-allowed;
1021
+}
1022
+:-moz-placeholder {
1023
+  color: #999999;
1024
+}
1025
+::-webkit-input-placeholder {
1026
+  color: #999999;
1027
+}
1028
+input, textarea {
1029
+  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
1030
+  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
1031
+  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
1032
+  -o-transition: border linear 0.2s, box-shadow linear 0.2s;
1033
+  transition: border linear 0.2s, box-shadow linear 0.2s;
1034
+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
1035
+  -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
1036
+  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
1037
+}
1038
+input:focus, textarea:focus {
1039
+  outline: 0;
1040
+  border-color: rgba(82, 168, 236, 0.8);
1041
+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
1042
+  -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
1043
+  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
1044
+}
1045
+input[type=file]:focus, input[type=checkbox]:focus, select:focus {
1046
+  -webkit-box-shadow: none;
1047
+  -moz-box-shadow: none;
1048
+  box-shadow: none;
1049
+  outline: 1px dotted #666;
1050
+}
1051
+form .clearfix.error > label, form .clearfix.error .help-block, form .clearfix.error .help-inline {
1052
+  color: #dd3c10;
1053
+}
1054
+form .clearfix.error input, form .clearfix.error textarea {
1055
+  color: #dd3c10;
1056
+  border-color: #dd3c10;
1057
+}
1058
+form .clearfix.error input:focus, form .clearfix.error textarea:focus {
1059
+  border-color: #ad2f0d;
1060
+  -webkit-box-shadow: 0 0 6px #f37f60;
1061
+  -moz-box-shadow: 0 0 6px #f37f60;
1062
+  box-shadow: 0 0 6px #f37f60;
1063
+}
1064
+form .clearfix.error .input-prepend .add-on, form .clearfix.error .input-append .add-on {
1065
+  color: #dd3c10;
1066
+  background-color: #ffebe8;
1067
+  border-color: #ad2f0d;
1068
+}
1069
+form .clearfix.warning > label, form .clearfix.warning .help-block, form .clearfix.warning .help-inline {
1070
+  color: #e2c822;
1071
+}
1072
+form .clearfix.warning input, form .clearfix.warning textarea {
1073
+  color: #e2c822;
1074
+  border-color: #e2c822;
1075
+}
1076
+form .clearfix.warning input:focus, form .clearfix.warning textarea:focus {
1077
+  border-color: #b9a318;
1078
+  -webkit-box-shadow: 0 0 6px #eede7c;
1079
+  -moz-box-shadow: 0 0 6px #eede7c;
1080
+  box-shadow: 0 0 6px #eede7c;
1081
+}
1082
+form .clearfix.warning .input-prepend .add-on, form .clearfix.warning .input-append .add-on {
1083
+  color: #e2c822;
1084
+  background-color: #fff9d7;
1085
+  border-color: #b9a318;
1086
+}
1087
+form .clearfix.success > label, form .clearfix.success .help-block, form .clearfix.success .help-inline {
1088
+  color: #3b6e22;
1089
+}
1090
+form .clearfix.success input, form .clearfix.success textarea {
1091
+  color: #3b6e22;
1092
+  border-color: #3b6e22;
1093
+}
1094
+form .clearfix.success input:focus, form .clearfix.success textarea:focus {
1095
+  border-color: #264716;
1096
+  -webkit-box-shadow: 0 0 6px #65bc3a;
1097
+  -moz-box-shadow: 0 0 6px #65bc3a;
1098
+  box-shadow: 0 0 6px #65bc3a;
1099
+}
1100
+form .clearfix.success .input-prepend .add-on, form .clearfix.success .input-append .add-on {
1101
+  color: #3b6e22;
1102
+  background-color: #3b6e22;
1103
+  border-color: #264716;
1104
+}
1105
+input.span1, textarea.span1 {
1106
+  display: inline-block;
1107
+  float: none;
1108
+  width: 15px;
1109
+  margin-left: 0;
1110
+}
1111
+input.span2, textarea.span2 {
1112
+  display: inline-block;
1113
+  float: none;
1114
+  width: 60px;
1115
+  margin-left: 0;
1116
+}
1117
+input.span3, textarea.span3 {
1118
+  display: inline-block;
1119
+  float: none;
1120
+  width: 105px;
1121
+  margin-left: 0;
1122
+}
1123
+input.span4, textarea.span4 {
1124
+  display: inline-block;
1125
+  float: none;
1126
+  width: 150px;
1127
+  margin-left: 0;
1128
+}
1129
+input.span5, textarea.span5 {
1130
+  display: inline-block;
1131
+  float: none;
1132
+  width: 195px;
1133
+  margin-left: 0;
1134
+}
1135
+input.span6, textarea.span6 {
1136
+  display: inline-block;
1137
+  float: none;
1138
+  width: 240px;
1139
+  margin-left: 0;
1140
+}
1141
+input.span7, textarea.span7 {
1142
+  display: inline-block;
1143
+  float: none;
1144
+  width: 285px;
1145
+  margin-left: 0;
1146
+}
1147
+input.span8, textarea.span8 {
1148
+  display: inline-block;
1149
+  float: none;
1150
+  width: 330px;
1151
+  margin-left: 0;
1152
+}
1153
+input.span9, textarea.span9 {
1154
+  display: inline-block;
1155
+  float: none;
1156
+  width: 375px;
1157
+  margin-left: 0;
1158
+}
1159
+input.span10, textarea.span10 {
1160
+  display: inline-block;
1161
+  float: none;
1162
+  width: 420px;
1163
+  margin-left: 0;
1164
+}
1165
+input.span11, textarea.span11 {
1166
+  display: inline-block;
1167
+  float: none;
1168
+  width: 465px;
1169
+  margin-left: 0;
1170
+}
1171
+input.span12, textarea.span12 {
1172
+  display: inline-block;
1173
+  float: none;
1174
+  width: 510px;
1175
+  margin-left: 0;
1176
+}
1177
+input.span13, textarea.span13 {
1178
+  display: inline-block;
1179
+  float: none;
1180
+  width: 555px;
1181
+  margin-left: 0;
1182
+}
1183
+input.span14, textarea.span14 {
1184
+  display: inline-block;
1185
+  float: none;
1186
+  width: 600px;
1187
+  margin-left: 0;
1188
+}
1189
+input.span15, textarea.span15 {
1190
+  display: inline-block;
1191
+  float: none;
1192
+  width: 645px;
1193
+  margin-left: 0;
1194
+}
1195
+input.span16, textarea.span16 {
1196
+  display: inline-block;
1197
+  float: none;
1198
+  width: 690px;
1199
+  margin-left: 0;
1200
+}
1201
+.input-mini,
1202
+input.mini,
1203
+textarea.mini,
1204
+select.mini {
1205
+  display: inline-block;
1206
+  float: none;
1207
+  width: 15px;
1208
+  margin-left: 0;
1209
+}
1210
+.input-small,
1211
+input.small,
1212
+textarea.small,
1213
+select.small {
1214
+  display: inline-block;
1215
+  float: none;
1216
+  width: 60px;
1217
+  margin-left: 0;
1218
+}
1219
+.input-medium,
1220
+input.medium,
1221
+textarea.medium,
1222
+select.medium {
1223
+  display: inline-block;
1224
+  float: none;
1225
+  width: 105px;
1226
+  margin-left: 0;
1227
+}
1228
+.input-large,
1229
+input.large,
1230
+textarea.large,
1231
+select.large {
1232
+  display: inline-block;
1233
+  float: none;
1234
+  width: 150px;
1235
+  margin-left: 0;
1236
+}
1237
+.input-xlarge,
1238
+input.xlarge,
1239
+textarea.xlarge,
1240
+select.xlarge {
1241
+  display: inline-block;
1242
+  float: none;
1243
+  width: 240px;
1244
+  margin-left: 0;
1245
+}
1246
+.input-xxlarge,
1247
+input.xxlarge,
1248
+textarea.xxlarge,
1249
+select.xxlarge {
1250
+  display: inline-block;
1251
+  float: none;
1252
+  width: 330px;
1253
+  margin-left: 0;
1254
+}
1255
+textarea.xxlarge {
1256
+  overflow-y: auto;
1257
+}
1258
+input[disabled],
1259
+select[disabled],
1260
+textarea[disabled],
1261
+input[readonly],
1262
+select[readonly],
1263
+textarea[readonly] {
1264
+  background-color: #f2f2f2;
1265
+  border-color: #ddd;
1266
+  cursor: not-allowed;
1267
+}
1268
+.actions {
1269
+  background: #f2f2f2;
1270
+  margin-top: 14px;
1271
+  margin-bottom: 14px;
1272
+  padding: 13px 20px 14px 150px;
1273
+  border-top: 1px solid #ddd;
1274
+  -webkit-border-radius: 0 0 0px 0px;
1275
+  -moz-border-radius: 0 0 0px 0px;
1276
+  border-radius: 0 0 0px 0px;
1277
+}
1278
+.actions .secondary-action {
1279
+  float: right;
1280
+}
1281
+.actions .secondary-action a {
1282
+  line-height: 30px;
1283
+}
1284
+.actions .secondary-action a:hover {
1285
+  text-decoration: underline;
1286
+}
1287
+.help-inline, .help-block {
1288
+  font-size: 11px;
1289
+  line-height: 14px;
1290
+  color: #999999;
1291
+}
1292
+.help-inline {
1293
+  padding-left: 5px;
1294
+  *position: relative;
1295
+  /* IE6-7 */
1296
+
1297
+  *top: -5px;
1298
+  /* IE6-7 */
1299
+
1300
+}
1301
+.help-block {
1302
+  display: block;
1303
+  max-width: 600px;
1304
+}
1305
+.inline-inputs {
1306
+  color: #666666;
1307
+}
1308
+.inline-inputs span {
1309
+  padding: 0 2px 0 1px;
1310
+}
1311
+.input-prepend input, .input-append input {
1312
+  -webkit-border-radius: 0 0px 0px 0;
1313
+  -moz-border-radius: 0 0px 0px 0;
1314
+  border-radius: 0 0px 0px 0;
1315
+}
1316
+.input-prepend .add-on, .input-append .add-on {
1317
+  position: relative;
1318
+  background: #f2f2f2;
1319
+  border: 1px solid #d4dae8;
1320
+  z-index: 2;
1321
+  float: left;
1322
+  display: block;
1323
+  width: auto;
1324
+  min-width: 16px;
1325
+  height: 14px;
1326
+  padding: 4px 4px 4px 5px;
1327
+  margin-right: -1px;
1328
+  font-weight: normal;
1329
+  line-height: 18px;
1330
+  color: #999999;
1331
+  text-align: center;
1332
+  text-shadow: 0 1px 0 #ffffff;
1333
+  -webkit-border-radius: 0px 0 0 0px;
1334
+  -moz-border-radius: 0px 0 0 0px;
1335
+  border-radius: 0px 0 0 0px;
1336
+}
1337
+.input-prepend .active, .input-append .active {
1338
+  background: #81cd5c;
1339
+  border-color: #3b6e22;
1340
+}
1341
+.input-prepend .add-on {
1342
+  *margin-top: 1px;
1343
+  /* IE6-7 */
1344
+
1345
+}
1346
+.input-append input {
1347
+  float: left;
1348
+  -webkit-border-radius: 0px 0 0 0px;
1349
+  -moz-border-radius: 0px 0 0 0px;
1350
+  border-radius: 0px 0 0 0px;
1351
+}
1352
+.input-append .add-on {
1353
+  -webkit-border-radius: 0 0px 0px 0;
1354
+  -moz-border-radius: 0 0px 0px 0;
1355
+  border-radius: 0 0px 0px 0;
1356
+  margin-right: 0;
1357
+  margin-left: -1px;
1358
+}
1359
+.inputs-list {
1360
+  margin: 0 0 5px;
1361
+  width: 100%;
1362
+}
1363
+.inputs-list li {
1364
+  display: block;
1365
+  padding: 0;
1366
+  width: 100%;
1367
+}
1368
+.inputs-list label {
1369
+  display: block;
1370
+  float: none;
1371
+  width: auto;
1372
+  padding: 0;
1373
+  margin-left: 20px;
1374
+  line-height: 18px;
1375
+  text-align: left;
1376
+  white-space: normal;
1377
+  font-weight: normal;
1378
+}
1379
+.inputs-list label strong {
1380
+  color: #333333;
1381
+}
1382
+.inputs-list label small {
1383
+  font-size: 9px;
1384
+  font-weight: normal;
1385
+}
1386
+.inputs-list .inputs-list {
1387
+  margin-left: 25px;
1388
+  margin-bottom: 10px;
1389
+  padding-top: 0;
1390
+}
1391
+.inputs-list:first-child {
1392
+  padding-top: 6px;
1393
+}
1394
+.inputs-list li + li {
1395
+  padding-top: 2px;
1396
+}
1397
+.inputs-list input[type=radio], .inputs-list input[type=checkbox] {
1398
+  margin-bottom: 0;
1399
+  margin-left: -20px;
1400
+  float: left;
1401
+}
1402
+.form-stacked {
1403
+  padding-left: 20px;
1404
+}
1405
+.form-stacked fieldset {
1406
+  padding-top: 7px;
1407
+}
1408
+.form-stacked legend {
1409
+  padding-left: 0;
1410
+}
1411
+.form-stacked label {
1412
+  display: block;
1413
+  float: none;
1414
+  width: auto;
1415
+  font-weight: bold;
1416
+  text-align: left;
1417
+  line-height: 20px;
1418
+  padding-top: 0;
1419
+}
1420
+.form-stacked .clearfix {
1421
+  margin-bottom: 7px;
1422
+}
1423
+.form-stacked .clearfix div.input {
1424
+  margin-left: 0;
1425
+}
1426
+.form-stacked .inputs-list {
1427
+  margin-bottom: 0;
1428
+}
1429
+.form-stacked .inputs-list li {
1430
+  padding-top: 0;
1431
+}
1432
+.form-stacked .inputs-list li label {
1433
+  font-weight: normal;
1434
+  padding-top: 0;
1435
+}
1436
+.form-stacked div.clearfix.error {
1437
+  padding-top: 10px;
1438
+  padding-bottom: 10px;
1439
+  padding-left: 10px;
1440
+  margin-top: 0;
1441
+  margin-left: -10px;
1442
+}
1443
+.form-stacked .actions {
1444
+  margin-left: -20px;
1445
+  padding-left: 20px;
1446
+}
1447
+/*
1448
+ * Tables.less
1449
+ * Tables for, you guessed it, tabular data
1450
+ * ---------------------------------------- */
1451
+table {
1452
+  width: 100%;
1453
+  margin-bottom: 14px;
1454
+  padding: 0;
1455
+  font-size: 11px;
1456
+  border-collapse: collapse;
1457
+}
1458
+table th, table td {
1459
+  padding: 10px 10px 9px;
1460
+  line-height: 14px;
1461
+  text-align: left;
1462
+}
1463
+table th {
1464
+  padding-top: 9px;
1465
+  font-weight: bold;
1466
+  vertical-align: middle;
1467
+}
1468
+table td {
1469
+  vertical-align: top;
1470
+  border-top: 1px solid #ddd;
1471
+}
1472
+table tbody th {
1473
+  border-top: 1px solid #ddd;
1474
+  vertical-align: top;
1475
+}
1476
+.condensed-table th, .condensed-table td {
1477
+  padding: 5px 5px 4px;
1478
+}
1479
+.bordered-table {
1480
+  border: 1px solid #ddd;
1481
+  border-collapse: separate;
1482
+  *border-collapse: collapse;
1483
+  /* IE7, collapse table to remove spacing */
1484
+
1485
+  -webkit-border-radius: 4px;
1486
+  -moz-border-radius: 4px;
1487
+  border-radius: 4px;
1488
+}
1489
+.bordered-table th + th, .bordered-table td + td, .bordered-table th + td {
1490
+  border-left: 1px solid #ddd;
1491
+}
1492
+.bordered-table thead tr:first-child th:first-child, .bordered-table tbody tr:first-child td:first-child {
1493
+  -webkit-border-radius: 4px 0 0 0;
1494
+  -moz-border-radius: 4px 0 0 0;
1495
+  border-radius: 4px 0 0 0;
1496
+}
1497
+.bordered-table thead tr:first-child th:last-child, .bordered-table tbody tr:first-child td:last-child {
1498
+  -webkit-border-radius: 0 4px 0 0;
1499
+  -moz-border-radius: 0 4px 0 0;
1500
+  border-radius: 0 4px 0 0;
1501
+}
1502
+.bordered-table tbody tr:last-child td:first-child {
1503
+  -webkit-border-radius: 0 0 0 4px;
1504
+  -moz-border-radius: 0 0 0 4px;
1505
+  border-radius: 0 0 0 4px;
1506
+}
1507
+.bordered-table tbody tr:last-child td:last-child {
1508
+  -webkit-border-radius: 0 0 4px 0;
1509
+  -moz-border-radius: 0 0 4px 0;
1510
+  border-radius: 0 0 4px 0;
1511
+}
1512
+table .span1 {
1513
+  width: 5px;
1514
+}
1515
+table .span2 {
1516
+  width: 15px;
1517
+}
1518
+table .span3 {
1519
+  width: 25px;
1520
+}
1521
+table .span4 {
1522
+  width: 35px;
1523
+}
1524
+table .span5 {
1525
+  width: 45px;
1526
+}
1527
+table .span6 {
1528
+  width: 55px;
1529
+}
1530
+table .span7 {
1531
+  width: 65px;
1532
+}
1533
+table .span8 {
1534
+  width: 75px;
1535
+}
1536
+table .span9 {
1537
+  width: 85px;
1538
+}
1539
+table .span10 {
1540
+  width: 95px;
1541
+}
1542
+table .span11 {
1543
+  width: 105px;
1544
+}
1545
+table .span12 {
1546
+  width: 115px;
1547
+}
1548
+table .span13 {
1549
+  width: 125px;
1550
+}
1551
+table .span14 {
1552
+  width: 135px;
1553
+}
1554
+table .span15 {
1555
+  width: 145px;
1556
+}
1557
+table .span16 {
1558
+  width: 155px;
1559
+}
1560
+.zebra-striped tbody tr:nth-child(odd) td, .zebra-striped tbody tr:nth-child(odd) th {
1561
+  background-color: #f9f9f9;
1562
+}
1563
+.zebra-striped tbody tr:hover td, .zebra-striped tbody tr:hover th {
1564
+  background-color: #f2f2f2;
1565
+}
1566
+table .header {
1567
+  cursor: pointer;
1568
+}
1569
+table .header:after {
1570
+  content: "";
1571
+  float: right;
1572
+  margin-top: 7px;
1573
+  border-width: 0 4px 4px;
1574
+  border-style: solid;
1575
+  border-color: #000 transparent;
1576
+  visibility: hidden;
1577
+}
1578
+table .headerSortUp, table .headerSortDown {
1579
+  background-color: rgba(141, 192, 219, 0.25);
1580
+  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
1581
+}
1582
+table .header:hover:after {
1583
+  visibility: visible;
1584
+}
1585
+table .headerSortDown:after, table .headerSortDown:hover:after {
1586
+  visibility: visible;
1587
+  filter: alpha(opacity=60);
1588
+  -khtml-opacity: 0.6;
1589
+  -moz-opacity: 0.6;
1590
+  opacity: 0.6;
1591
+}
1592
+table .headerSortUp:after {
1593
+  border-bottom: none;
1594
+  border-left: 4px solid transparent;
1595
+  border-right: 4px solid transparent;
1596
+  border-top: 4px solid #000;
1597
+  visibility: visible;
1598
+  -webkit-box-shadow: none;
1599
+  -moz-box-shadow: none;
1600
+  box-shadow: none;
1601
+  filter: alpha(opacity=60);
1602
+  -khtml-opacity: 0.6;
1603
+  -moz-opacity: 0.6;
1604
+  opacity: 0.6;
1605
+}
1606
+table .blue {
1607
+  color: #627aad;
1608
+  border-bottom-color: #627aad;
1609
+}
1610
+table .headerSortUp.blue, table .headerSortDown.blue {
1611
+  background-color: #e8ecf3;
1612
+}
1613
+table .green {
1614
+  color: #3b6e22;
1615
+  border-bottom-color: #3b6e22;
1616
+}
1617
+table .headerSortUp.green, table .headerSortDown.green {
1618
+  background-color: #9fd983;
1619
+}
1620
+table .red {
1621
+  color: #dd3c10;
1622
+  border-bottom-color: #dd3c10;
1623
+}
1624
+table .headerSortUp.red, table .headerSortDown.red {
1625
+  background-color: #fef2ee;
1626
+}
1627
+table .yellow {
1628
+  color: #e2c822;
1629
+  border-bottom-color: #e2c822;
1630
+}
1631
+table .headerSortUp.yellow, table .headerSortDown.yellow {
1632
+  background-color: #faf5d6;
1633
+}
1634
+table .orange {
1635
+  color: #f89406;
1636
+  border-bottom-color: #f89406;
1637
+}
1638
+table .headerSortUp.orange, table .headerSortDown.orange {
1639
+  background-color: #fee9cc;
1640
+}
1641
+table .purple {
1642
+  color: #7a43b6;
1643
+  border-bottom-color: #7a43b6;
1644
+}
1645
+table .headerSortUp.purple, table .headerSortDown.purple {
1646
+  background-color: #e2d5f0;
1647
+}
1648
+/* Patterns.less
1649
+ * Repeatable UI elements outside the base styles provided from the scaffolding
1650
+ * ---------------------------------------------------------------------------- */
1651
+.topbar {
1652
+  height: 38px;
1653
+  position: fixed;
1654
+  top: 0;
1655
+  left: 0;
1656
+  right: 0;
1657
+  z-index: 10000;
1658
+  overflow: visible;
1659
+}
1660
+.topbar a {
1661
+  color: #ffffff;
1662
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
1663
+}
1664
+.topbar h3 a:hover, .topbar .brand:hover, .topbar ul .active > a {
1665
+  background-color: #627aad;
1666
+  color: #ffffff;
1667
+  text-decoration: none;
1668
+}
1669
+.topbar h3 {
1670
+  position: relative;
1671
+}
1672
+.topbar h3 a, .topbar .brand {
1673
+  float: left;
1674
+  display: block;
1675
+  padding: 4px 20px 12px;
1676
+  margin: 4px 0 0 -20px;
1677
+  color: #ffffff;
1678
+  font-size: 20px;
1679
+  font-weight: 200;
1680
+  line-height: 1;
1681
+}
1682
+.topbar p {
1683
+  margin: 0;
1684
+  line-height: 38px;
1685
+}
1686
+.topbar p a:hover {
1687
+  background-color: transparent;
1688
+  color: #ffffff;
1689
+}
1690
+.topbar form {
1691
+  float: left;
1692
+  margin: 5px 0 0 0;
1693
+  position: relative;
1694
+  filter: alpha(opacity=100);
1695
+  -khtml-opacity: 1;
1696
+  -moz-opacity: 1;
1697
+  opacity: 1;
1698
+}
1699
+.topbar form.pull-right {
1700
+  float: right;
1701
+}
1702
+.topbar input {
1703
+  background-color: #444;
1704
+  background-color: rgba(255, 255, 255, 0.3);
1705
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
1706
+  font-size: normal;
1707
+  font-weight: 13px;
1708
+  line-height: 1;
1709
+  padding: 4px 9px;
1710
+  color: #ffffff;
1711
+  color: rgba(255, 255, 255, 0.75);
1712
+  border: 1px solid #111;
1713
+  -webkit-border-radius: 4px;
1714
+  -moz-border-radius: 4px;
1715
+  border-radius: 4px;
1716
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25);
1717
+  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25);
1718
+  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25);
1719
+  -webkit-transition: none;
1720
+  -moz-transition: none;
1721
+  -ms-transition: none;
1722
+  -o-transition: none;
1723
+  transition: none;
1724
+}
1725
+.topbar input:-moz-placeholder {
1726
+  color: #e2e2e2;
1727
+}
1728
+.topbar input::-webkit-input-placeholder {
1729
+  color: #e2e2e2;
1730
+}
1731
+.topbar input:hover {
1732
+  background-color: #999999;
1733
+  background-color: rgba(255, 255, 255, 0.5);
1734
+  color: #ffffff;
1735
+}
1736
+.topbar input:focus, .topbar input.focused {
1737
+  outline: 0;
1738
+  background-color: #ffffff;
1739
+  color: #333333;
1740
+  text-shadow: 0 1px 0 #ffffff;
1741
+  border: 0;
1742
+  padding: 5px 10px;
1743
+  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
1744
+  -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
1745
+  box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
1746
+}
1747
+.topbar-inner, .topbar .fill {
1748
+  background-color: #3b5998;
1749
+  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
1750
+  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
1751
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
1752
+}
1753
+.topbar div > ul, .nav {
1754
+  display: block;
1755
+  float: left;
1756
+  margin: 4px 10px 0 0;
1757
+  position: relative;
1758
+  left: 0;
1759
+}
1760
+.topbar div > ul > li, .nav > li {
1761
+  display: block;
1762
+  float: left;
1763
+}
1764
+.topbar div > ul a, .nav a {
1765
+  display: block;
1766
+  float: none;
1767
+  padding: 10px 10px 11px;
1768
+  padding: 6px 10px 11px;
1769
+  line-height: 19px;
1770
+  text-decoration: none;
1771
+}
1772
+.topbar div > ul a:hover, .nav a:hover {
1773
+  color: #ffffff;
1774
+  text-decoration: none;
1775
+  background-color: #627aad;
1776
+}
1777
+.topbar div > ul .active > a, .nav .active > a {
1778
+  background-color: #627aad;
1779
+}
1780
+.topbar div > ul.secondary-nav, .nav.secondary-nav {
1781
+  float: right;
1782
+  margin-left: 10px;
1783
+  margin-right: 0;
1784
+}
1785
+.topbar div > ul.secondary-nav .menu-dropdown,
1786
+.nav.secondary-nav .menu-dropdown,
1787
+.topbar div > ul.secondary-nav .dropdown-menu,
1788
+.nav.secondary-nav .dropdown-menu {
1789
+  right: 0;
1790
+  border: 0;
1791
+}
1792
+.topbar div > ul a.menu:hover,
1793
+.nav a.menu:hover,
1794
+.topbar div > ul li.open .menu,
1795
+.nav li.open .menu,
1796
+.topbar div > ul .dropdown-toggle:hover,
1797
+.nav .dropdown-toggle:hover,
1798
+.topbar div > ul .dropdown.open .dropdown-toggle,
1799
+.nav .dropdown.open .dropdown-toggle {
1800
+  background: #3b5998;
1801
+  background: rgba(255, 255, 255, 0.05);
1802
+}
1803
+.topbar div > ul .menu-dropdown,
1804
+.nav .menu-dropdown,
1805
+.topbar div > ul .dropdown-menu,
1806
+.nav .dropdown-menu {
1807
+  background-color: #3b5998;
1808
+}
1809
+.topbar div > ul .menu-dropdown a.menu,
1810
+.nav .menu-dropdown a.menu,
1811
+.topbar div > ul .dropdown-menu a.menu,
1812
+.nav .dropdown-menu a.menu,
1813
+.topbar div > ul .menu-dropdown .dropdown-toggle,
1814
+.nav .menu-dropdown .dropdown-toggle,
1815
+.topbar div > ul .dropdown-menu .dropdown-toggle,
1816
+.nav .dropdown-menu .dropdown-toggle {
1817
+  color: #ffffff;
1818
+}
1819
+.topbar div > ul .menu-dropdown a.menu.open,
1820
+.nav .menu-dropdown a.menu.open,
1821
+.topbar div > ul .dropdown-menu a.menu.open,
1822
+.nav .dropdown-menu a.menu.open,
1823
+.topbar div > ul .menu-dropdown .dropdown-toggle.open,
1824
+.nav .menu-dropdown .dropdown-toggle.open,
1825
+.topbar div > ul .dropdown-menu .dropdown-toggle.open,
1826
+.nav .dropdown-menu .dropdown-toggle.open {
1827
+  background: #627aad;
1828
+  background: rgba(255, 255, 255, 0.05);
1829
+}
1830
+.topbar div > ul .menu-dropdown li a,
1831
+.nav .menu-dropdown li a,
1832
+.topbar div > ul .dropdown-menu li a,
1833
+.nav .dropdown-menu li a {
1834
+  color: #ffffff;
1835
+}
1836
+.topbar div > ul .menu-dropdown li a:hover,
1837
+.nav .menu-dropdown li a:hover,
1838
+.topbar div > ul .dropdown-menu li a:hover,
1839
+.nav .dropdown-menu li a:hover {
1840
+  color: #ffffff;
1841
+}
1842
+.topbar div > ul .menu-dropdown .active a,
1843
+.nav .menu-dropdown .active a,
1844
+.topbar div > ul .dropdown-menu .active a,
1845
+.nav .dropdown-menu .active a {
1846
+  color: #ffffff;
1847
+}
1848
+.topbar div > ul .menu-dropdown .divider,
1849
+.nav .menu-dropdown .divider,
1850
+.topbar div > ul .dropdown-menu .divider,
1851
+.nav .dropdown-menu .divider {
1852
+  background-color: #3b5998;
1853
+  border-color: #627aad;
1854
+}
1855
+.topbar ul .menu-dropdown li a, .topbar ul .dropdown-menu li a {
1856
+  padding: 4px 15px;
1857
+}
1858
+li.menu, .dropdown {
1859
+  position: relative;
1860
+}
1861
+a.menu:after, .dropdown-toggle:after {
1862
+  width: 0;
1863
+  height: 0;
1864
+  display: inline-block;
1865
+  content: "&darr;";
1866
+  text-indent: -99999px;
1867
+  vertical-align: top;
1868
+  margin-top: 8px;
1869
+  margin-left: 4px;
1870
+  border-left: 4px solid transparent;
1871
+  border-right: 4px solid transparent;
1872
+  border-top: 4px solid #ffffff;
1873
+  filter: alpha(opacity=50);
1874
+  -khtml-opacity: 0.5;
1875
+  -moz-opacity: 0.5;
1876
+  opacity: 0.5;
1877
+}
1878
+.menu-dropdown, .dropdown-menu {
1879
+  background-color: #ffffff;
1880
+  float: left;
1881
+  display: none;
1882
+  position: absolute;
1883
+  top: 36px;
1884
+  z-index: 900;
1885
+  min-width: 160px;
1886
+  max-width: 220px;
1887
+  _width: 160px;
1888
+  margin-left: 0;
1889
+  margin-right: 0;
1890
+  padding: 6px 0;
1891
+  zoom: 1;
1892
+  border-color: #627aad;
1893
+  border-color: rgba(0, 0, 0, 0.2);
1894
+  border-style: solid;
1895
+  border-width: 1px 1px 1px;
1896
+  -webkit-border-radius: 0 0 6px 6px;
1897
+  -moz-border-radius: 0 0 6px 6px;
1898
+  border-radius: 0 0 6px 6px;
1899
+  -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
1900
+  -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
1901
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
1902
+  -webkit-background-clip: padding-box;
1903
+  -moz-background-clip: padding-box;
1904
+  background-clip: padding-box;
1905
+}
1906
+.menu-dropdown li, .dropdown-menu li {
1907
+  float: none;
1908
+  display: block;
1909
+  background-color: none;
1910
+}
1911
+.menu-dropdown .divider, .dropdown-menu .divider {
1912
+  height: 1px;
1913
+  margin: 5px 0;
1914
+  overflow: hidden;
1915
+  background-color: #eee;
1916
+  border-bottom: 1px solid #ffffff;
1917
+}
1918
+.topbar .dropdown-menu a, .dropdown-menu a {
1919
+  display: block;
1920
+  padding: 4px 15px;
1921
+  clear: both;
1922
+  font-weight: normal;
1923
+  line-height: 18px;
1924
+  color: #627aad;
1925
+}
1926
+.topbar .dropdown-menu a:hover,
1927
+.dropdown-menu a:hover,
1928
+.topbar .dropdown-menu a.hover,
1929
+.dropdown-menu a.hover {
1930
+  background-color: #627aad;
1931
+  color: #ffffff;
1932
+  text-decoration: none;
1933
+  -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025);
1934
+  -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025);
1935
+  box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025);
1936
+}
1937
+.open .menu,
1938
+.dropdown.open .menu,
1939
+.open .dropdown-toggle,
1940
+.dropdown.open .dropdown-toggle {
1941
+  color: #ffffff;
1942
+  background: #627aad;
1943
+}
1944
+.open .menu-dropdown,
1945
+.dropdown.open .menu-dropdown,
1946
+.open .dropdown-menu,
1947
+.dropdown.open .dropdown-menu {
1948
+  display: block;
1949
+}
1950
+.tabs, .pills {
1951
+  margin: 0 0 14px;
1952
+  padding: 0;
1953
+  list-style: none;
1954
+  zoom: 1;
1955
+}
1956
+.tabs:before,
1957
+.pills:before,
1958
+.tabs:after,
1959
+.pills:after {
1960
+  display: table;
1961
+  content: "";
1962
+  zoom: 1;
1963
+}
1964
+.tabs:after, .pills:after {
1965
+  clear: both;
1966
+}
1967
+.tabs > li, .pills > li {
1968
+  float: left;
1969
+}
1970
+.tabs > li > a, .pills > li > a {
1971
+  display: block;
1972
+}
1973
+.tabs {
1974
+  border-color: #ddd;
1975
+  border-style: solid;
1976
+  border-width: 0 0 1px;
1977
+}
1978
+.tabs > li {
1979
+  position: relative;
1980
+  margin-bottom: -1px;
1981
+}
1982
+.tabs > li > a {
1983
+  padding: 0 15px;
1984
+  margin-right: 2px;
1985
+  line-height: 21px;
1986
+  border: 1px solid transparent;
1987
+  -webkit-border-radius: 2px 2px 0 0;
1988
+  -moz-border-radius: 2px 2px 0 0;
1989
+  border-radius: 2px 2px 0 0;
1990
+}
1991
+.tabs > li > a:hover {
1992
+  text-decoration: none;
1993
+  background-color: #eee;
1994
+  border-color: #eee #eee #ddd;
1995
+}
1996
+.tabs .active > a, .tabs .active > a:hover {
1997
+  color: #666666;
1998
+  background-color: #ffffff;
1999
+  border: 1px solid #ddd;
2000
+  border-bottom-color: transparent;
2001
+  cursor: default;
2002
+}
2003
+.tabs .menu-dropdown, .tabs .dropdown-menu {
2004
+  top: 25px;
2005
+  border-width: 1px;
2006
+  -webkit-border-radius: 0 4px 4px 4px;
2007
+  -moz-border-radius: 0 4px 4px 4px;
2008
+  border-radius: 0 4px 4px 4px;
2009
+}
2010
+.tabs a.menu:after, .tabs .dropdown-toggle:after {
2011
+  border-top-color: #3b5998;
2012
+  margin-top: 10px;
2013
+  margin-left: 5px;
2014
+}
2015
+.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle {
2016
+  border-color: #3b5998;
2017
+}
2018
+.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after {
2019
+  border-top-color: #627aad;
2020
+}
2021
+.pills a {
2022
+  margin: 3px 3px 3px 0;
2023
+  padding: 0 10px;
2024
+  line-height: 20px;
2025
+  text-shadow: 0 1px 1px #ffffff;
2026
+  -webkit-border-radius: 15px;
2027
+  -moz-border-radius: 15px;
2028
+  border-radius: 15px;
2029
+}
2030
+.pills a:hover {
2031
+  color: #ffffff;
2032
+  text-decoration: none;
2033
+  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25);
2034
+  background-color: #3b5998;
2035
+}
2036
+.pills .active a {
2037
+  color: #ffffff;
2038
+  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25);
2039
+  background-color: #3b5998;
2040
+}
2041
+.pills-vertical > li {
2042
+  float: none;
2043
+}
2044
+.tab-content > .tab-pane,
2045
+.pill-content > .pill-pane,
2046
+.tab-content > div,
2047
+.pill-content > div {
2048
+  display: none;
2049
+}
2050
+.tab-content > .active, .pill-content > .active {
2051
+  display: block;
2052
+}
2053
+.breadcrumb {
2054
+  padding: 7px 14px;
2055
+  margin: 0 0 14px;
2056
+  background-color: #f2f2f2;
2057
+  background-repeat: repeat-x;
2058
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f2f2f2));
2059
+  background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
2060
+  background-image: -ms-linear-gradient(top, #ffffff, #f2f2f2);
2061
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f2f2f2));
2062
+  background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
2063
+  background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
2064
+  background-image: linear-gradient(top, #ffffff, #f2f2f2);
2065
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f2f2f2', GradientType=0);
2066
+  border: 1px solid #ddd;
2067
+  -webkit-border-radius: 3px;
2068
+  -moz-border-radius: 3px;
2069
+  border-radius: 3px;
2070
+  -webkit-box-shadow: inset 0 1px 0 #ffffff;
2071
+  -moz-box-shadow: inset 0 1px 0 #ffffff;
2072
+  box-shadow: inset 0 1px 0 #ffffff;
2073
+}
2074
+.breadcrumb li {
2075
+  display: inline;
2076
+  text-shadow: 0 1px 0 #ffffff;
2077
+}
2078
+.breadcrumb .divider {
2079
+  padding: 0 2px;
2080
+}
2081
+.breadcrumb .active a {
2082
+  color: #333333;
2083
+}
2084
+.hero-unit {
2085
+  background-color: #f2f2f2;
2086
+  margin-bottom: 30px;
2087
+  padding: 60px;
2088
+  -webkit-border-radius: 6px;
2089
+  -moz-border-radius: 6px;
2090
+  border-radius: 6px;
2091
+}
2092
+.hero-unit h1 {
2093
+  margin-bottom: 0;
2094
+  font-size: 60px;
2095
+  line-height: 1;
2096
+  letter-spacing: -1px;
2097
+}
2098
+.hero-unit p {
2099
+  font-size: 18px;
2100
+  font-weight: 200;
2101
+  line-height: 21px;
2102
+}
2103
+footer {
2104
+  margin-top: 13px;
2105
+  padding-top: 13px;
2106
+  border-top: 1px solid #eee;
2107
+}
2108
+.page-header {
2109
+  margin-bottom: 13px;
2110
+  border-bottom: 1px solid #ddd;
2111
+  -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
2112
+  -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
2113
+  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
2114
+}
2115
+.page-header h1 {
2116
+  margin-bottom: 6px;
2117
+}
2118
+.btn.success,
2119
+.alert-message.success,
2120
+.btn.success:hover,
2121
+.alert-message.success:hover,
2122
+.btn.danger,
2123
+.alert-message.danger,
2124
+.btn.danger:hover,
2125
+.alert-message.danger:hover,
2126
+.btn.error,
2127
+.alert-message.error,
2128
+.btn.error:hover,
2129
+.alert-message.error:hover,
2130
+.btn.info,
2131
+.alert-message.info,
2132
+.btn.info:hover,
2133
+.alert-message.info:hover {
2134
+  color: #333333;
2135
+}
2136
+.btn .close, .alert-message .close {
2137
+  font-family: Arial, sans-serif;
2138
+  line-height: 14px;
2139
+}
2140
+.btn.danger,
2141
+.alert-message.danger,
2142
+.btn.error,
2143
+.alert-message.error {
2144
+  background-color: #ffebe8;
2145
+  background-repeat: repeat-x;
2146
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#ffebe8), to(#ffebe8));
2147
+  background-image: -moz-linear-gradient(top, #ffebe8, #ffebe8);
2148
+  background-image: -ms-linear-gradient(top, #ffebe8, #ffebe8);
2149
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffebe8), color-stop(100%, #ffebe8));
2150
+  background-image: -webkit-linear-gradient(top, #ffebe8, #ffebe8);
2151
+  background-image: -o-linear-gradient(top, #ffebe8, #ffebe8);
2152
+  background-image: linear-gradient(top, #ffebe8, #ffebe8);
2153
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebe8', endColorstr='#ffebe8', GradientType=0);
2154
+  border-color: #ffebe8 #ffebe8 #ffa89b;
2155
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2156
+}
2157
+.btn.success, .alert-message.success {
2158
+  background-color: #eceff6;
2159
+  background-repeat: repeat-x;
2160
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#eceff6), to(#eceff6));
2161
+  background-image: -moz-linear-gradient(top, #eceff6, #eceff6);
2162
+  background-image: -ms-linear-gradient(top, #eceff6, #eceff6);
2163
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eceff6), color-stop(100%, #eceff6));
2164
+  background-image: -webkit-linear-gradient(top, #eceff6, #eceff6);
2165
+  background-image: -o-linear-gradient(top, #eceff6, #eceff6);
2166
+  background-image: linear-gradient(top, #eceff6, #eceff6);
2167
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eceff6', endColorstr='#eceff6', GradientType=0);
2168
+  border-color: #eceff6 #eceff6 #b8c3dd;
2169
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2170
+  border-color: #d4dae8;
2171
+}
2172
+.btn.info, .alert-message.info {
2173
+  background-color: #fff9d7;
2174
+  background-repeat: repeat-x;
2175
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#fff9d7), to(#fff9d7));
2176
+  background-image: -moz-linear-gradient(top, #fff9d7, #fff9d7);
2177
+  background-image: -ms-linear-gradient(top, #fff9d7, #fff9d7);
2178
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff9d7), color-stop(100%, #fff9d7));
2179
+  background-image: -webkit-linear-gradient(top, #fff9d7, #fff9d7);
2180
+  background-image: -o-linear-gradient(top, #fff9d7, #fff9d7);
2181
+  background-image: linear-gradient(top, #fff9d7, #fff9d7);
2182
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9d7', endColorstr='#fff9d7', GradientType=0);
2183
+  border-color: #fff9d7 #fff9d7 #ffee8b;
2184
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2185
+}
2186
+.btn {
2187
+  cursor: pointer;
2188
+  display: inline-block;
2189
+  background-color: #e6e6e6;
2190
+  background-repeat: no-repeat;
2191
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
2192
+  background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
2193
+  background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
2194
+  background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
2195
+  background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
2196
+  background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
2197
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
2198
+  padding: 5px 12px 6px;
2199
+  color: #333;
2200
+  font-size: 11px;
2201
+  font-weight: bold;
2202
+  line-height: 14px;
2203
+  border: 1px solid #666666;
2204
+  border-bottom-color: #999999;
2205
+  -webkit-border-radius: 0px;
2206
+  -moz-border-radius: 0px;
2207
+  border-radius: 0px;
2208
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
2209
+  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
2210
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
2211
+  -webkit-transition: 0.1s linear all;
2212
+  -moz-transition: 0.1s linear all;
2213
+  -ms-transition: 0.1s linear all;
2214
+  -o-transition: 0.1s linear all;
2215
+  transition: 0.1s linear all;
2216
+}
2217
+.btn:hover {
2218
+  background-position: 0 -15px;
2219
+  color: #333;
2220
+  text-decoration: none;
2221
+}
2222
+.btn:focus {
2223
+  outline: 1px dotted #666;
2224
+}
2225
+.btn.primary {
2226
+  color: #ffffff;
2227
+  background-color: #3b5998;
2228
+  background-repeat: repeat-x;
2229
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#627aad), to(#3b5998));
2230
+  background-image: -moz-linear-gradient(top, #627aad, #3b5998);
2231
+  background-image: -ms-linear-gradient(top, #627aad, #3b5998);
2232
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #627aad), color-stop(100%, #3b5998));
2233
+  background-image: -webkit-linear-gradient(top, #627aad, #3b5998);
2234
+  background-image: -o-linear-gradient(top, #627aad, #3b5998);
2235
+  background-image: linear-gradient(top, #627aad, #3b5998);
2236
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#627aad', endColorstr='#3b5998', GradientType=0);
2237
+  border-color: #3b5998 #3b5998 #263961;
2238
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2239
+}
2240
+.btn.success {
2241
+  background-color: #69a74e;
2242
+  background-repeat: repeat-x;
2243
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#69a74e), to(#69a74e));
2244
+  background-image: -moz-linear-gradient(top, #69a74e, #69a74e);
2245
+  background-image: -ms-linear-gradient(top, #69a74e, #69a74e);
2246
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #69a74e), color-stop(100%, #69a74e));
2247
+  background-image: -webkit-linear-gradient(top, #69a74e, #69a74e);
2248
+  background-image: -o-linear-gradient(top, #69a74e, #69a74e);
2249
+  background-image: linear-gradient(top, #69a74e, #69a74e);
2250
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#69a74e', endColorstr='#69a74e', GradientType=0);
2251
+  border-color: #69a74e #69a74e #487336;
2252
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2253
+  border-color: #3b6e22 #3b6e22 #2c5115;
2254
+}
2255
+.btn.danger, .btn.error {
2256
+  background-color: #dd3c10;
2257
+  background-repeat: repeat-x;
2258
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#dd3c10), to(#dd3c10));
2259
+  background-image: -moz-linear-gradient(top, #dd3c10, #dd3c10);
2260
+  background-image: -ms-linear-gradient(top, #dd3c10, #dd3c10);
2261
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dd3c10), color-stop(100%, #dd3c10));
2262
+  background-image: -webkit-linear-gradient(top, #dd3c10, #dd3c10);
2263
+  background-image: -o-linear-gradient(top, #dd3c10, #dd3c10);
2264
+  background-image: linear-gradient(top, #dd3c10, #dd3c10);
2265
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#dd3c10', endColorstr='#dd3c10', GradientType=0);
2266
+  border-color: #dd3c10 #dd3c10 #96290b;
2267
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2268
+  border-color: #c5360e #c5360e #7e2209;
2269
+}
2270
+.btn.success, .btn.danger, .btn.error {
2271
+  color: #ffffff;
2272
+}
2273
+.btn.success:hover, .btn.danger:hover, .btn.error:hover {
2274
+  color: #ffffff;
2275
+}
2276
+.btn.active, .btn:active {
2277
+  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
2278
+  -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
2279
+  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
2280
+}
2281
+.btn.disabled {
2282
+  cursor: default;
2283
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
2284
+  filter: alpha(opacity=65);
2285
+  -khtml-opacity: 0.65;
2286
+  -moz-opacity: 0.65;
2287
+  opacity: 0.65;
2288
+}
2289
+.btn[disabled] {
2290
+  cursor: default;
2291
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
2292
+  filter: alpha(opacity=65);
2293
+  -khtml-opacity: 0.65;
2294
+  -moz-opacity: 0.65;
2295
+  opacity: 0.65;
2296
+}
2297
+.btn.large {
2298
+  font-size: 13px;
2299
+  line-height: normal;
2300
+  padding: 9px 14px 9px;
2301
+  -webkit-border-radius: 0px;
2302
+  -moz-border-radius: 0px;
2303
+  border-radius: 0px;
2304
+}
2305
+.btn.small {
2306
+  padding: 4px 7px 5px 7px;
2307
+  font-size: 9px;
2308
+}
2309
+:root .alert-message, :root .btn {
2310
+  border-radius: 0 \0;
2311
+}
2312
+button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner {
2313
+  padding: 0;
2314
+  border: 0;
2315
+}
2316
+.close {
2317
+  float: right;
2318
+  color: #000000;
2319
+  font-size: 20px;
2320
+  font-weight: bold;
2321
+  line-height: 10.5px;
2322
+  text-shadow: 0 1px 0 #ffffff;
2323
+  filter: alpha(opacity=25);
2324
+  -khtml-opacity: 0.25;
2325
+  -moz-opacity: 0.25;
2326
+  opacity: 0.25;
2327
+}
2328
+.close:hover {
2329
+  color: #000000;
2330
+  text-decoration: none;
2331
+  filter: alpha(opacity=40);
2332
+  -khtml-opacity: 0.4;
2333
+  -moz-opacity: 0.4;
2334
+  opacity: 0.4;
2335
+}
2336
+.alert-message {
2337
+  position: relative;
2338
+  padding: 7px 15px;
2339
+  margin-bottom: 14px;
2340
+  color: #333333;
2341
+  background-color: #f7f7f7;
2342
+  background-repeat: repeat-x;
2343
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#f7f7f7), to(#f7f7f7));
2344
+  background-image: -moz-linear-gradient(top, #f7f7f7, #f7f7f7);
2345
+  background-image: -ms-linear-gradient(top, #f7f7f7, #f7f7f7);
2346
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f7f7f7), color-stop(100%, #f7f7f7));
2347
+  background-image: -webkit-linear-gradient(top, #f7f7f7, #f7f7f7);
2348
+  background-image: -o-linear-gradient(top, #f7f7f7, #f7f7f7);
2349
+  background-image: linear-gradient(top, #f7f7f7, #f7f7f7);
2350
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7f7f7', endColorstr='#f7f7f7', GradientType=0);
2351
+  border-color: #f7f7f7 #f7f7f7 #d1d1d1;
2352
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2353
+  text-shadow: none;
2354
+  border-width: 1px;
2355
+  border-style: solid;
2356
+  -webkit-border-radius: 0px;
2357
+  -moz-border-radius: 0px;
2358
+  border-radius: 0px;
2359
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2360
+  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2361
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
2362
+}
2363
+.alert-message .close {
2364
+  margin-top: 1px;
2365
+  *margin-top: 0;
2366
+}
2367
+.alert-message a {
2368
+  font-weight: bold;
2369
+  color: #333333;
2370
+  text-shadow: none;
2371
+}
2372
+.alert-message strong {
2373
+  text-shadow: none;
2374
+}
2375
+.alert-message.error, .alert-message.success, .alert-message.info {
2376
+  text-shadow: none;
2377
+}
2378
+.alert-message h5 {
2379
+  line-height: 14px;
2380
+}
2381
+.alert-message p {
2382
+  margin-bottom: 0;
2383
+}
2384
+.alert-message div {
2385
+  margin-top: 5px;
2386
+  margin-bottom: 2px;
2387
+  line-height: 28px;
2388
+}
2389
+.alert-message .btn {
2390
+  -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
2391
+  -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
2392
+  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
2393
+}
2394
+.alert-message.block-message {
2395
+  background-image: none;
2396
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
2397
+  padding: 14px;
2398
+  background-color: #f7f7f7;
2399
+  border-color: #cccccc;
2400
+  -webkit-box-shadow: none;
2401
+  -moz-box-shadow: none;
2402
+  box-shadow: none;
2403
+}
2404
+.alert-message.block-message ul, .alert-message.block-message p {
2405
+  margin-right: 30px;
2406
+}
2407
+.alert-message.block-message ul {
2408
+  margin-bottom: 0;
2409
+}
2410
+.alert-message.block-message li {
2411
+  color: #333333;
2412
+}
2413
+.alert-message.block-message .alert-actions {
2414
+  margin-top: 5px;
2415
+}
2416
+.alert-message.block-message.error, .alert-message.block-message.success, .alert-message.block-message.info {
2417
+  color: #333333;
2418
+}
2419
+.alert-message.block-message.error {
2420
+  background-color: #ffebe8;
2421
+  border-color: #dd3c10;
2422
+}
2423
+.alert-message.block-message.success {
2424
+  background-color: #eceff6;
2425
+  border-color: #d4dae8;
2426
+}
2427
+.alert-message.block-message.info {
2428
+  background-color: #fff9d7;
2429
+  border-color: #e2c822;
2430
+}
2431
+.alert-message.block-message.danger p a,
2432
+.alert-message.block-message.error p a,
2433
+.alert-message.block-message.success p a,
2434
+.alert-message.block-message.info p a {
2435
+  color: #333333;
2436
+}
2437
+.pagination {
2438
+  height: 28px;
2439
+  margin: 14px 0;
2440
+}
2441
+.pagination ul {
2442
+  float: left;
2443
+  margin: 0;
2444
+  border: 1px solid #ddd;
2445
+  border: 1px solid rgba(0, 0, 0, 0.15);
2446
+  -webkit-border-radius: 3px;
2447
+  -moz-border-radius: 3px;
2448
+  border-radius: 3px;
2449
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
2450
+  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
2451
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
2452
+}
2453
+.pagination li {
2454
+  display: inline;
2455
+}
2456
+.pagination a {
2457
+  float: left;
2458
+  padding: 0 14px;
2459
+  line-height: 26px;
2460
+  border-right: 1px solid;
2461
+  border-right-color: #ddd;
2462
+  border-right-color: rgba(0, 0, 0, 0.15);
2463
+  *border-right-color: #ddd;
2464
+  /* IE6-7 */
2465
+
2466
+  text-decoration: none;
2467
+}
2468
+.pagination a:hover, .pagination .active a {
2469
+  background-color: #eceff6;
2470
+}
2471
+.pagination .disabled a, .pagination .disabled a:hover {
2472
+  background-color: transparent;
2473
+  color: #999999;
2474
+}
2475
+.pagination .next a {
2476
+  border: 0;
2477
+}
2478
+.well {
2479
+  background-color: #f2f2f2;
2480
+  margin-bottom: 20px;
2481
+  padding: 19px;
2482
+  min-height: 20px;
2483
+  border: 1px solid #eee;
2484
+  border: 1px solid rgba(0, 0, 0, 0.05);
2485
+  -webkit-border-radius: 4px;
2486
+  -moz-border-radius: 4px;
2487
+  border-radius: 4px;
2488
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
2489
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
2490
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
2491
+}
2492
+.well blockquote {
2493
+  border-color: #ddd;
2494
+  border-color: rgba(0, 0, 0, 0.15);
2495
+}
2496
+.modal-backdrop {
2497
+  background-color: #000000;
2498
+  position: fixed;
2499
+  top: 0;
2500
+  left: 0;
2501
+  right: 0;
2502
+  bottom: 0;
2503
+  z-index: 10000;
2504
+}
2505
+.modal-backdrop.fade {
2506
+  opacity: 0;
2507
+}
2508
+.modal-backdrop, .modal-backdrop.fade.in {
2509
+  filter: alpha(opacity=80);
2510
+  -khtml-opacity: 0.8;
2511
+  -moz-opacity: 0.8;
2512
+  opacity: 0.8;
2513
+}
2514
+.modal {
2515
+  position: fixed;
2516
+  top: 50%;
2517
+  left: 50%;
2518
+  z-index: 11000;
2519
+  width: 560px;
2520
+  margin: -250px 0 0 -280px;
2521
+  background-color: #ffffff;
2522
+  border: 1px solid #999;
2523
+  border: 1px solid rgba(0, 0, 0, 0.3);
2524
+  *border: 1px solid #999;
2525
+  /* IE6-7 */
2526
+
2527
+  -webkit-border-radius: 8px;
2528
+  -moz-border-radius: 8px;
2529
+  border-radius: 8px;
2530
+  -webkit-box-shadow: 0 0 0px 8px rgba(82, 82, 82, 0.7);
2531
+  -moz-box-shadow: 0 0 0px 8px rgba(82, 82, 82, 0.7);
2532
+  box-shadow: 0 0 0px 8px rgba(82, 82, 82, 0.7);
2533
+  -webkit-background-clip: padding-box;
2534
+  -moz-background-clip: padding-box;
2535
+  background-clip: padding-box;
2536
+}
2537
+.modal .close {
2538
+  margin-top: 7px;
2539
+}
2540
+.modal.fade {
2541
+  -webkit-transition: opacity .3s linear, top .3s ease-out;
2542
+  -moz-transition: opacity .3s linear, top .3s ease-out;
2543
+  -ms-transition: opacity .3s linear, top .3s ease-out;
2544
+  -o-transition: opacity .3s linear, top .3s ease-out;
2545
+  transition: opacity .3s linear, top .3s ease-out;
2546
+  top: -25%;
2547
+}
2548
+.modal.fade.in {
2549
+  top: 50%;
2550
+}
2551
+.modal-header {
2552
+  border-bottom: 1px solid #eee;
2553
+  padding: 5px 15px;
2554
+}
2555
+.modal-body {
2556
+  padding: 15px;
2557
+}
2558
+.modal-body form {
2559
+  margin-bottom: 0;
2560
+}
2561
+.modal-footer {
2562
+  background-color: #f2f2f2;
2563
+  padding: 14px 15px 15px;
2564
+  border-top: 1px solid #ddd;
2565
+  -webkit-border-radius: 0 0 6px 6px;
2566
+  -moz-border-radius: 0 0 6px 6px;
2567
+  border-radius: 0 0 6px 6px;
2568
+  -webkit-box-shadow: inset 0 1px 0 #ffffff;
2569
+  -moz-box-shadow: inset 0 1px 0 #ffffff;
2570
+  box-shadow: inset 0 1px 0 #ffffff;
2571
+  zoom: 1;
2572
+  margin-bottom: 0;
2573
+}
2574
+.modal-footer:before, .modal-footer:after {
2575
+  display: table;
2576
+  content: "";
2577
+  zoom: 1;
2578
+}
2579
+.modal-footer:after {
2580
+  clear: both;
2581
+}
2582
+.modal-footer .btn {
2583
+  float: right;
2584
+  margin-left: 5px;
2585
+}
2586
+.modal .popover, .modal .twipsy {
2587
+  z-index: 12000;
2588
+}
2589
+.twipsy {
2590
+  display: block;
2591
+  position: absolute;
2592
+  visibility: visible;
2593
+  padding: 5px;
2594
+  font-size: 11px;
2595
+  z-index: 1000;
2596
+  filter: alpha(opacity=80);
2597
+  -khtml-opacity: 0.8;
2598
+  -moz-opacity: 0.8;
2599
+  opacity: 0.8;
2600
+}
2601
+.twipsy.fade.in {
2602
+  filter: alpha(opacity=80);
2603
+  -khtml-opacity: 0.8;
2604
+  -moz-opacity: 0.8;
2605
+  opacity: 0.8;
2606
+}
2607
+.twipsy.above .twipsy-arrow {
2608
+  bottom: 0;
2609
+  left: 50%;
2610
+  margin-left: -5px;
2611
+  border-left: 5px solid transparent;
2612
+  border-right: 5px solid transparent;
2613
+  border-top: 5px solid #3b5998;
2614
+}
2615
+.twipsy.left .twipsy-arrow {
2616
+  top: 50%;
2617
+  right: 0;
2618
+  margin-top: -5px;
2619
+  border-top: 5px solid transparent;
2620
+  border-bottom: 5px solid transparent;
2621
+  border-left: 5px solid #3b5998;
2622
+}
2623
+.twipsy.below .twipsy-arrow {
2624
+  top: 0;
2625
+  left: 50%;
2626
+  margin-left: -5px;
2627
+  border-left: 5px solid transparent;
2628
+  border-right: 5px solid transparent;
2629
+  border-bottom: 5px solid #3b5998;
2630
+}
2631
+.twipsy.right .twipsy-arrow {
2632
+  top: 50%;
2633
+  left: 0;
2634
+  margin-top: -5px;
2635
+  border-top: 5px solid transparent;
2636
+  border-bottom: 5px solid transparent;
2637
+  border-right: 5px solid #3b5998;
2638
+}
2639
+.twipsy-inner {
2640
+  padding: 3px 8px;
2641
+  background-color: #3b5998;
2642
+  color: #ffffff;
2643
+  text-align: center;
2644
+  max-width: 200px;
2645
+  text-decoration: none;
2646
+  -webkit-border-radius: 4px;
2647
+  -moz-border-radius: 4px;
2648
+  border-radius: 4px;
2649
+}
2650
+.twipsy-arrow {
2651
+  position: absolute;
2652
+  width: 0;
2653
+  height: 0;
2654
+}
2655
+.popover {
2656
+  position: absolute;
2657
+  top: 0;
2658
+  left: 0;
2659
+  z-index: 1000;
2660
+  padding: 5px;
2661
+  display: none;
2662
+}
2663
+.popover.above .arrow {
2664
+  bottom: -4px;
2665
+  left: 50%;
2666
+  margin-left: -10px;
2667
+  border-left: 10px solid transparent;
2668
+  border-right: 10px solid transparent;
2669
+  border-top: 10px solid rgba(0, 0, 0, 0.3);
2670
+}
2671
+.popover.right .arrow {
2672
+  top: 50%;
2673
+  left: -4px;
2674
+  margin-top: -10px;
2675
+  border-top: 10px solid transparent;
2676
+  border-bottom: 10px solid transparent;
2677
+  border-right: 10px solid rgba(0, 0, 0, 0.3);
2678
+}
2679
+.popover.below .arrow {
2680
+  top: -4px;
2681
+  left: 50%;
2682
+  margin-left: -10px;
2683
+  border-left: 10px solid transparent;
2684
+  border-right: 10px solid transparent;
2685
+  border-bottom: 10px solid rgba(0, 0, 0, 0.3);
2686
+}
2687
+.popover.left .arrow {
2688
+  top: 50%;
2689
+  right: -4px;
2690
+  margin-top: -10px;
2691
+  border-top: 10px solid transparent;
2692
+  border-bottom: 10px solid transparent;
2693
+  border-left: 10px solid rgba(0, 0, 0, 0.3);
2694
+}
2695
+.popover.above:after {
2696
+  bottom: 0;
2697
+  left: 50%;
2698
+  margin-left: -11px;
2699
+  border-left: 11px solid transparent;
2700
+  border-right: 11px solid transparent;
2701
+  border-top: 11px solid #ffffff;
2702
+  content: ' ';
2703
+}
2704
+.popover.right:after {
2705
+  top: 50%;
2706
+  left: 0;
2707
+  margin-top: -11px;
2708
+  border-top: 11px solid transparent;
2709
+  border-bottom: 11px solid transparent;
2710
+  border-right: 11px solid #ffffff;
2711
+  content: ' ';
2712
+}
2713
+.popover.below:after {
2714
+  top: 0;
2715
+  left: 50%;
2716
+  margin-left: -11px;
2717
+  border-left: 11px solid transparent;
2718
+  border-right: 11px solid transparent;
2719
+  border-bottom: 11px solid #ffffff;
2720
+  content: ' ';
2721
+}
2722
+.popover.left:after {
2723
+  top: 50%;
2724
+  right: -2px;
2725
+  margin-top: -11px;
2726
+  border-top: 11px solid transparent;
2727
+  border-bottom: 11px solid transparent;
2728
+  border-left: 11px solid #ffffff;
2729
+  content: ' ';
2730
+}
2731
+.popover .arrow,
2732
+.popover.above:after,
2733
+.popover.right:after,
2734
+.popover.below:after,
2735
+.popover.left:after {
2736
+  position: absolute;
2737
+  width: 0;
2738
+  height: 0;
2739
+}
2740
+.popover .inner {
2741
+  padding: 3px;
2742
+  overflow: hidden;
2743
+  width: 280px;
2744
+  -webkit-border-radius: 0;
2745
+  -moz-border-radius: 0;
2746
+  border-radius: 0;
2747
+  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
2748
+  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
2749
+  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
2750
+  border: 1px solid #8C8C8C;
2751
+  border: 1px solid rgba(0, 0, 0, 0.45);
2752
+  border-bottom: 1px solid #666;
2753
+  -moz-box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
2754
+  -webkit-box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
2755
+  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
2756
+}
2757
+.popover .title {
2758
+  padding: 5px 10px;
2759
+  line-height: 1;
2760
+  border-bottom: 1px solid #eee;
2761
+}
2762
+.popover .content {
2763
+  background-color: #ffffff;
2764
+  padding: 10px;
2765
+}
2766
+.popover .content p, .popover .content ul, .popover .content ol {
2767
+  margin-bottom: 0;
2768
+}
2769
+.fade {
2770
+  -webkit-transition: opacity 0.15s linear;
2771
+  -moz-transition: opacity 0.15s linear;
2772
+  -ms-transition: opacity 0.15s linear;
2773
+  -o-transition: opacity 0.15s linear;
2774
+  transition: opacity 0.15s linear;
2775
+  opacity: 0;
2776
+}
2777
+.fade.in {
2778
+  opacity: 1;
2779
+}
2780
+.label {
2781
+  padding: 1px 3px 1px;
2782
+  font-size: 8.25px;
2783
+  font-weight: bold;
2784
+  color: #ffffff;
2785
+  text-transform: uppercase;
2786
+  white-space: nowrap;
2787
+  background-color: #999999;
2788
+  -webkit-border-radius: 3px;
2789
+  -moz-border-radius: 3px;
2790
+  border-radius: 3px;
2791
+  text-shadow: none;
2792
+}
2793
+.label.important {
2794
+  background-color: #dd3c10;
2795
+}
2796
+.label.warning {
2797
+  background-color: #e2c822;
2798
+}
2799
+.label.success {
2800
+  background-color: #3b6e22;
2801
+}
2802
+.label.notice {
2803
+  background-color: #b6c1d9;
2804
+}
2805
+.label.num {
2806
+  color: #3b5998;
2807
+  background-color: #b6c1d9;
2808
+  float: right;
2809
+}
2810
+.media-grid {
2811
+  margin-left: -20px;
2812
+  margin-bottom: 0;
2813
+  zoom: 1;
2814
+}
2815
+.media-grid:before, .media-grid:after {
2816
+  display: table;
2817
+  content: "";
2818
+  zoom: 1;
2819
+}
2820
+.media-grid:after {
2821
+  clear: both;
2822
+}
2823
+.media-grid li {
2824
+  display: inline;
2825
+}
2826
+.media-grid a {
2827
+  float: left;
2828
+  padding: 4px;
2829
+  margin: 0 0 14px 20px;
2830
+  border: 1px solid #ddd;
2831
+  -webkit-border-radius: 4px;
2832
+  -moz-border-radius: 4px;
2833
+  border-radius: 4px;
2834
+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
2835
+  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
2836
+  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
2837
+}
2838
+.media-grid a img {
2839
+  display: block;
2840
+}
2841
+.media-grid a:hover {
2842
+  border-color: #3b5998;
2843
+  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
2844
+  -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
2845
+  box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
2846
+}
0 2847
new file mode 100755
... ...
@@ -0,0 +1,443 @@
1
+html,body{margin:0;padding:0;}
2
+h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,cite,code,del,dfn,em,img,q,s,samp,small,strike,strong,sub,sup,tt,var,dd,dl,dt,li,ol,ul,fieldset,form,label,legend,button,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-weight:normal;font-style:normal;font-size:100%;line-height:1;font-family:inherit;}
3
+table{border-collapse:collapse;border-spacing:0;}
4
+ol,ul{list-style:none;}
5
+q:before,q:after,blockquote:before,blockquote:after{content:"";}
6
+html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
7
+a:focus{outline:thin dotted;}
8
+a:hover,a:active{outline:0;}
9
+article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
10
+audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
11
+audio:not([controls]){display:none;}
12
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}
13
+sup{top:-0.5em;}
14
+sub{bottom:-0.25em;}
15
+img{border:0;-ms-interpolation-mode:bicubic;}
16
+button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;}
17
+button,input{line-height:normal;*overflow:visible;}
18
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}
19
+button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
20
+input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;}
21
+input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}
22
+textarea{overflow:auto;vertical-align:top;}
23
+.container.canvas{width:760px;margin-left:auto;margin-right:auto;zoom:1;}.container.canvas:before,.container.canvas:after{display:table;content:"";zoom:1;}
24
+.container.canvas:after{clear:both;}
25
+.container.canvas .row{zoom:1;margin-left:-20px;}.container.canvas .row:before,.container.canvas .row:after{display:table;content:"";zoom:1;}
26
+.container.canvas .row:after{clear:both;}
27
+.container.canvas .row>[class*="span"]{display:inline;float:left;margin-left:20px;}
28
+.container.canvas .span1{width:45px;}
29
+.container.canvas .span2{width:110px;}
30
+.container.canvas .span3{width:175px;}
31
+.container.canvas .span4{width:240px;}
32
+.container.canvas .span5{width:305px;}
33
+.container.canvas .span6{width:370px;}
34
+.container.canvas .span7{width:435px;}
35
+.container.canvas .span8{width:500px;}
36
+.container.canvas .span9{width:565px;}
37
+.container.canvas .span10{width:630px;}
38
+.container.canvas .span11{width:695px;}
39
+.container.canvas .span12{width:760px;}
40
+.container.canvas .span13{width:825px;}
41
+.container.canvas .span14{width:890px;}
42
+.container.canvas .span15{width:955px;}
43
+.container.canvas .span16{width:1020px;}
44
+.container.canvas .span17{width:1085px;}
45
+.container.canvas .span18{width:1150px;}
46
+.container.canvas .span19{width:1215px;}
47
+.container.canvas .span20{width:1280px;}
48
+.container.canvas .span21{width:1345px;}
49
+.container.canvas .span22{width:1410px;}
50
+.container.canvas .span23{width:1475px;}
51
+.container.canvas .span24{width:1540px;}
52
+.container.canvas .row>.offset1{margin-left:85px;}
53
+.container.canvas .row>.offset2{margin-left:150px;}
54
+.container.canvas .row>.offset3{margin-left:215px;}
55
+.container.canvas .row>.offset4{margin-left:280px;}
56
+.container.canvas .row>.offset5{margin-left:345px;}
57
+.container.canvas .row>.offset6{margin-left:410px;}
58
+.container.canvas .row>.offset7{margin-left:475px;}
59
+.container.canvas .row>.offset8{margin-left:540px;}
60
+.container.canvas .row>.offset9{margin-left:605px;}
61
+.container.canvas .row>.offset10{margin-left:670px;}
62
+.container.canvas .row>.offset11{margin-left:735px;}
63
+.container.canvas .row>.offset12{margin-left:800px;}
64
+.container.canvas .span-one-third{width:240px;}
65
+.container.canvas .span-two-thirds{width:500px;}
66
+.container.canvas .row>.offset-one-third{margin-left:260px;}
67
+.container.canvas .row>.offset-two-thirds{margin-left:540px;}
68
+.container.canvas input.span1,.container.canvas textarea.span1{display:inline-block;float:none;width:35px;margin-left:0;}
69
+.container.canvas input.span2,.container.canvas textarea.span2{display:inline-block;float:none;width:100px;margin-left:0;}
70
+.container.canvas input.span3,.container.canvas textarea.span3{display:inline-block;float:none;width:165px;margin-left:0;}
71
+.container.canvas input.span4,.container.canvas textarea.span4{display:inline-block;float:none;width:230px;margin-left:0;}
72
+.container.canvas input.span5,.container.canvas textarea.span5{display:inline-block;float:none;width:295px;margin-left:0;}
73
+.container.canvas input.span6,.container.canvas textarea.span6{display:inline-block;float:none;width:360px;margin-left:0;}
74
+.container.canvas input.span7,.container.canvas textarea.span7{display:inline-block;float:none;width:425px;margin-left:0;}
75
+.container.canvas input.span8,.container.canvas textarea.span8{display:inline-block;float:none;width:490px;margin-left:0;}
76
+.container.canvas input.span9,.container.canvas textarea.span9{display:inline-block;float:none;width:555px;margin-left:0;}
77
+.container.canvas input.span10,.container.canvas textarea.span10{display:inline-block;float:none;width:620px;margin-left:0;}
78
+.container.canvas input.span11,.container.canvas textarea.span11{display:inline-block;float:none;width:685px;margin-left:0;}
79
+.container.canvas input.span12,.container.canvas textarea.span12{display:inline-block;float:none;width:750px;margin-left:0;}
80
+.container.canvas input.span13,.container.canvas textarea.span13{display:inline-block;float:none;width:815px;margin-left:0;}
81
+.container.canvas input.span14,.container.canvas textarea.span14{display:inline-block;float:none;width:880px;margin-left:0;}
82
+.container.canvas input.span15,.container.canvas textarea.span15{display:inline-block;float:none;width:945px;margin-left:0;}
83
+.container.canvas input.span16,.container.canvas textarea.span16{display:inline-block;float:none;width:1010px;margin-left:0;}
84
+.container.canvas table .span1{width:25px;}
85
+.container.canvas table .span2{width:75px;}
86
+.container.canvas table .span3{width:125px;}
87
+.container.canvas table .span4{width:175px;}
88
+.container.canvas table .span5{width:225px;}
89
+.container.canvas table .span6{width:275px;}
90
+.container.canvas table .span7{width:325px;}
91
+.container.canvas table .span8{width:375px;}
92
+.container.canvas table .span9{width:425px;}
93
+.container.canvas table .span10{width:475px;}
94
+.container.canvas table .span11{width:525px;}
95
+.container.canvas table .span12{width:575px;}
96
+.container.canvas table .span13{width:625px;}
97
+.container.canvas table .span14{width:675px;}
98
+.container.canvas table .span15{width:725px;}
99
+.container.canvas table .span16{width:775px;}
100
+body{background-color:#ffffff;margin:0;overflow:hidden;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size:11px;font-weight:normal;line-height:14px;color:#333333;}
101
+.container{width:520px;margin-left:auto;margin-right:auto;zoom:1;}.container:before,.container:after{display:table;content:"";zoom:1;}
102
+.container:after{clear:both;}
103
+.container-fluid{position:relative;min-width:940px;padding-left:20px;padding-right:20px;zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";zoom:1;}
104
+.container-fluid:after{clear:both;}
105
+.container-fluid>.sidebar{position:absolute;top:0;left:20px;width:220px;}
106
+.container-fluid>.content{margin-left:240px;}
107
+a{color:#3b5998;text-decoration:none;line-height:inherit;font-weight:inherit;}a:hover{color:#3b5998;text-decoration:underline;}
108
+.pull-right{float:right;}
109
+.pull-left{float:left;}
110
+.hide{display:none;}
111
+.show{display:block;}
112
+.row{zoom:1;margin-left:-20px;}.row:before,.row:after{display:table;content:"";zoom:1;}
113
+.row:after{clear:both;}
114
+.row>[class*="span"]{display:inline;float:left;margin-left:20px;}
115
+.span1{width:25px;}
116
+.span2{width:70px;}
117
+.span3{width:115px;}
118
+.span4{width:160px;}
119
+.span5{width:205px;}
120
+.span6{width:250px;}
121
+.span7{width:295px;}
122
+.span8{width:340px;}
123
+.span9{width:385px;}
124
+.span10{width:430px;}
125
+.span11{width:475px;}
126
+.span12{width:520px;}
127
+.span13{width:565px;}
128
+.span14{width:610px;}
129
+.span15{width:655px;}
130
+.span16{width:700px;}
131
+.span17{width:745px;}
132
+.span18{width:790px;}
133
+.span19{width:835px;}
134
+.span20{width:880px;}
135
+.span21{width:925px;}
136
+.span22{width:970px;}
137
+.span23{width:1015px;}
138
+.span24{width:1060px;}
139
+.row>.offset1{margin-left:65px;}
140
+.row>.offset2{margin-left:110px;}
141
+.row>.offset3{margin-left:155px;}
142
+.row>.offset4{margin-left:200px;}
143
+.row>.offset5{margin-left:245px;}
144
+.row>.offset6{margin-left:290px;}
145
+.row>.offset7{margin-left:335px;}
146
+.row>.offset8{margin-left:380px;}
147
+.row>.offset9{margin-left:425px;}
148
+.row>.offset10{margin-left:470px;}
149
+.row>.offset11{margin-left:515px;}
150
+.row>.offset12{margin-left:560px;}
151
+.span-one-third{width:160px;}
152
+.span-two-thirds{width:340px;}
153
+.row>.offset-one-third{margin-left:180px;}
154
+.row>.offset-two-thirds{margin-left:360px;}
155
+p{font-size:11px;font-weight:normal;line-height:14px;margin-bottom:7px;}p small{font-size:9px;color:#999999;}
156
+h1,h2,h3,h4,h5,h6{color:#333333;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#999999;}h1 small.block,h2 small.block,h3 small.block,h4 small.block,h5 small.block,h6 small.block{display:block;}
157
+h1.tab,h2.tab,h3.tab,h4.tab,h5.tab,h6.tab{border-bottom:1px solid #e2e2e2;border-top:1px solid #e2e2e2;margin-bottom:8px;padding:3px 6px;background:#f2f2f2;font-weight:bold;}h1.tab a,h2.tab a,h3.tab a,h4.tab a,h5.tab a,h6.tab a{font-weight:normal;color:#627aad;}
158
+h1{margin-bottom:14px;font-size:24px;line-height:28px;}h1 small{font-size:16px;}
159
+h2{font-size:20px;letter-spacing:-0.03em;line-height:28px;}h2 small{font-size:14px;}
160
+h3,h4,h5,h6{line-height:28px;}
161
+h3{font-size:15px;font-weight:bold;}h3 small{font-size:13px;}
162
+h4{font-size:15px;}h4 small{font-size:12px;}
163
+h5{font-size:14px;}
164
+h6{font-size:13px;color:#999999;text-transform:uppercase;}
165
+ul,ol{margin:0 0 14px 25px;}
166
+ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
167
+ul{list-style:disc;}
168
+ol{list-style:decimal;}
169
+li{line-height:14px;color:#666666;}
170
+ul.unstyled{list-style:none;margin-left:0;}
171
+dl{margin-bottom:14px;}dl dt,dl dd{line-height:14px;}
172
+dl dt{font-weight:bold;}
173
+dl dd{margin-left:7px;}
174
+hr{margin:20px 0 19px;border:0;border-bottom:1px solid #eee;}
175
+strong{font-style:inherit;font-weight:bold;}
176
+em{font-style:italic;font-weight:inherit;line-height:inherit;}
177
+.muted{color:#999999;}
178
+blockquote{margin-bottom:14px;border-left:5px solid #eee;padding-left:15px;}blockquote p{font-size:14px;font-weight:300;line-height:14px;margin-bottom:0;}
179
+blockquote small{display:block;font-size:12px;font-weight:300;line-height:14px;color:#999999;}blockquote small:before{content:'\2014 \00A0';}
180
+address{display:block;line-height:14px;margin-bottom:14px;}
181
+code,pre{padding:0 3px 2px;font-family:Monaco, Andale Mono, Courier New, monospace;font-size:12px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
182
+code{color:#3b6e22;padding:1px 3px;}
183
+pre{background-color:#f2f2f2;display:block;padding:6.5px;margin:0 0 14px;line-height:14px;font-size:12px;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;white-space:pre;white-space:pre-wrap;word-wrap:break-word;}
184
+form{margin-bottom:14px;}
185
+fieldset{margin-bottom:14px;padding-top:14px;}fieldset legend{display:block;padding-left:150px;font-size:16.5px;line-height:1;color:#333333;*padding:0 0 5px 145px;*line-height:1.5;}
186
+form .clearfix{margin-bottom:14px;zoom:1;}form .clearfix:before,form .clearfix:after{display:table;content:"";zoom:1;}
187
+form .clearfix:after{clear:both;}
188
+label,input,select,textarea{font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size:11px;font-weight:normal;line-height:14px;}
189
+label{padding-top:6px;font-size:11px;font-weight:bold;line-height:14px;float:left;width:130px;text-align:right;color:#666666;}
190
+form .input{margin-left:150px;}
191
+input[type=checkbox],input[type=radio]{cursor:pointer;}
192
+input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:14px;padding:4px;font-size:11px;line-height:14px;color:#666666;border:1px solid #d4dae8;-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;}
193
+select{padding:2px;padding:initial;}
194
+input[type=checkbox],input[type=radio]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:none;}
195
+input[type=file]{background-color:#ffffff;padding:initial;border:initial;line-height:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
196
+input[type=button],input[type=reset],input[type=submit]{width:auto;height:auto;}
197
+select,input[type=file]{height:21px;*height:auto;line-height:21px;*margin-top:4px;}
198
+select[multiple]{height:inherit;background-color:#ffffff;}
199
+textarea{height:auto;}
200
+.uneditable-input{background-color:#ffffff;display:block;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;}
201
+:-moz-placeholder{color:#999999;}
202
+::-webkit-input-placeholder{color:#999999;}
203
+input,textarea{-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);}
204
+input:focus,textarea:focus{outline:0;border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);}
205
+input[type=file]:focus,input[type=checkbox]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:1px dotted #666;}
206
+form .clearfix.error>label,form .clearfix.error .help-block,form .clearfix.error .help-inline{color:#dd3c10;}
207
+form .clearfix.error input,form .clearfix.error textarea{color:#dd3c10;border-color:#dd3c10;}form .clearfix.error input:focus,form .clearfix.error textarea:focus{border-color:#ad2f0d;-webkit-box-shadow:0 0 6px #f37f60;-moz-box-shadow:0 0 6px #f37f60;box-shadow:0 0 6px #f37f60;}
208
+form .clearfix.error .input-prepend .add-on,form .clearfix.error .input-append .add-on{color:#dd3c10;background-color:#ffebe8;border-color:#ad2f0d;}
209
+form .clearfix.warning>label,form .clearfix.warning .help-block,form .clearfix.warning .help-inline{color:#e2c822;}
210
+form .clearfix.warning input,form .clearfix.warning textarea{color:#e2c822;border-color:#e2c822;}form .clearfix.warning input:focus,form .clearfix.warning textarea:focus{border-color:#b9a318;-webkit-box-shadow:0 0 6px #eede7c;-moz-box-shadow:0 0 6px #eede7c;box-shadow:0 0 6px #eede7c;}
211
+form .clearfix.warning .input-prepend .add-on,form .clearfix.warning .input-append .add-on{color:#e2c822;background-color:#fff9d7;border-color:#b9a318;}
212
+form .clearfix.success>label,form .clearfix.success .help-block,form .clearfix.success .help-inline{color:#3b6e22;}
213
+form .clearfix.success input,form .clearfix.success textarea{color:#3b6e22;border-color:#3b6e22;}form .clearfix.success input:focus,form .clearfix.success textarea:focus{border-color:#264716;-webkit-box-shadow:0 0 6px #65bc3a;-moz-box-shadow:0 0 6px #65bc3a;box-shadow:0 0 6px #65bc3a;}
214
+form .clearfix.success .input-prepend .add-on,form .clearfix.success .input-append .add-on{color:#3b6e22;background-color:#3b6e22;border-color:#264716;}
215
+input.span1,textarea.span1{display:inline-block;float:none;width:15px;margin-left:0;}
216
+input.span2,textarea.span2{display:inline-block;float:none;width:60px;margin-left:0;}
217
+input.span3,textarea.span3{display:inline-block;float:none;width:105px;margin-left:0;}
218
+input.span4,textarea.span4{display:inline-block;float:none;width:150px;margin-left:0;}
219
+input.span5,textarea.span5{display:inline-block;float:none;width:195px;margin-left:0;}
220
+input.span6,textarea.span6{display:inline-block;float:none;width:240px;margin-left:0;}
221
+input.span7,textarea.span7{display:inline-block;float:none;width:285px;margin-left:0;}
222
+input.span8,textarea.span8{display:inline-block;float:none;width:330px;margin-left:0;}
223
+input.span9,textarea.span9{display:inline-block;float:none;width:375px;margin-left:0;}
224
+input.span10,textarea.span10{display:inline-block;float:none;width:420px;margin-left:0;}
225
+input.span11,textarea.span11{display:inline-block;float:none;width:465px;margin-left:0;}
226
+input.span12,textarea.span12{display:inline-block;float:none;width:510px;margin-left:0;}
227
+input.span13,textarea.span13{display:inline-block;float:none;width:555px;margin-left:0;}
228
+input.span14,textarea.span14{display:inline-block;float:none;width:600px;margin-left:0;}
229
+input.span15,textarea.span15{display:inline-block;float:none;width:645px;margin-left:0;}
230
+input.span16,textarea.span16{display:inline-block;float:none;width:690px;margin-left:0;}
231
+.input-mini,input.mini,textarea.mini,select.mini{display:inline-block;float:none;width:15px;margin-left:0;}
232
+.input-small,input.small,textarea.small,select.small{display:inline-block;float:none;width:60px;margin-left:0;}
233
+.input-medium,input.medium,textarea.medium,select.medium{display:inline-block;float:none;width:105px;margin-left:0;}
234
+.input-large,input.large,textarea.large,select.large{display:inline-block;float:none;width:150px;margin-left:0;}
235
+.input-xlarge,input.xlarge,textarea.xlarge,select.xlarge{display:inline-block;float:none;width:240px;margin-left:0;}
236
+.input-xxlarge,input.xxlarge,textarea.xxlarge,select.xxlarge{display:inline-block;float:none;width:330px;margin-left:0;}
237
+textarea.xxlarge{overflow-y:auto;}
238
+input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f2f2f2;border-color:#ddd;cursor:not-allowed;}
239
+.actions{background:#f2f2f2;margin-top:14px;margin-bottom:14px;padding:13px 20px 14px 150px;border-top:1px solid #ddd;-webkit-border-radius:0 0 0px 0px;-moz-border-radius:0 0 0px 0px;border-radius:0 0 0px 0px;}.actions .secondary-action{float:right;}.actions .secondary-action a{line-height:30px;}.actions .secondary-action a:hover{text-decoration:underline;}
240
+.help-inline,.help-block{font-size:11px;line-height:14px;color:#999999;}
241
+.help-inline{padding-left:5px;*position:relative;*top:-5px;}
242
+.help-block{display:block;max-width:600px;}
243
+.inline-inputs{color:#666666;}.inline-inputs span{padding:0 2px 0 1px;}
244
+.input-prepend input,.input-append input{-webkit-border-radius:0 0px 0px 0;-moz-border-radius:0 0px 0px 0;border-radius:0 0px 0px 0;}
245
+.input-prepend .add-on,.input-append .add-on{position:relative;background:#f2f2f2;border:1px solid #d4dae8;z-index:2;float:left;display:block;width:auto;min-width:16px;height:14px;padding:4px 4px 4px 5px;margin-right:-1px;font-weight:normal;line-height:18px;color:#999999;text-align:center;text-shadow:0 1px 0 #ffffff;-webkit-border-radius:0px 0 0 0px;-moz-border-radius:0px 0 0 0px;border-radius:0px 0 0 0px;}
246
+.input-prepend .active,.input-append .active{background:#81cd5c;border-color:#3b6e22;}
247
+.input-prepend .add-on{*margin-top:1px;}
248
+.input-append input{float:left;-webkit-border-radius:0px 0 0 0px;-moz-border-radius:0px 0 0 0px;border-radius:0px 0 0 0px;}
249
+.input-append .add-on{-webkit-border-radius:0 0px 0px 0;-moz-border-radius:0 0px 0px 0;border-radius:0 0px 0px 0;margin-right:0;margin-left:-1px;}
250
+.inputs-list{margin:0 0 5px;width:100%;}.inputs-list li{display:block;padding:0;width:100%;}
251
+.inputs-list label{display:block;float:none;width:auto;padding:0;margin-left:20px;line-height:18px;text-align:left;white-space:normal;font-weight:normal;}.inputs-list label strong{color:#333333;}
252
+.inputs-list label small{font-size:9px;font-weight:normal;}
253
+.inputs-list .inputs-list{margin-left:25px;margin-bottom:10px;padding-top:0;}
254
+.inputs-list:first-child{padding-top:6px;}
255
+.inputs-list li+li{padding-top:2px;}
256
+.inputs-list input[type=radio],.inputs-list input[type=checkbox]{margin-bottom:0;margin-left:-20px;float:left;}
257
+.form-stacked{padding-left:20px;}.form-stacked fieldset{padding-top:7px;}
258
+.form-stacked legend{padding-left:0;}
259
+.form-stacked label{display:block;float:none;width:auto;font-weight:bold;text-align:left;line-height:20px;padding-top:0;}
260
+.form-stacked .clearfix{margin-bottom:7px;}.form-stacked .clearfix div.input{margin-left:0;}
261
+.form-stacked .inputs-list{margin-bottom:0;}.form-stacked .inputs-list li{padding-top:0;}.form-stacked .inputs-list li label{font-weight:normal;padding-top:0;}
262
+.form-stacked div.clearfix.error{padding-top:10px;padding-bottom:10px;padding-left:10px;margin-top:0;margin-left:-10px;}
263
+.form-stacked .actions{margin-left:-20px;padding-left:20px;}
264
+table{width:100%;margin-bottom:14px;padding:0;font-size:11px;border-collapse:collapse;}table th,table td{padding:10px 10px 9px;line-height:14px;text-align:left;}
265
+table th{padding-top:9px;font-weight:bold;vertical-align:middle;}
266
+table td{vertical-align:top;border-top:1px solid #ddd;}
267
+table tbody th{border-top:1px solid #ddd;vertical-align:top;}
268
+.condensed-table th,.condensed-table td{padding:5px 5px 4px;}
269
+.bordered-table{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.bordered-table th+th,.bordered-table td+td,.bordered-table th+td{border-left:1px solid #ddd;}
270
+.bordered-table thead tr:first-child th:first-child,.bordered-table tbody tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;}
271
+.bordered-table thead tr:first-child th:last-child,.bordered-table tbody tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;}
272
+.bordered-table tbody tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;}
273
+.bordered-table tbody tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;}
274
+table .span1{width:5px;}
275
+table .span2{width:15px;}
276
+table .span3{width:25px;}
277
+table .span4{width:35px;}
278
+table .span5{width:45px;}
279
+table .span6{width:55px;}
280
+table .span7{width:65px;}
281
+table .span8{width:75px;}
282
+table .span9{width:85px;}
283
+table .span10{width:95px;}
284
+table .span11{width:105px;}
285
+table .span12{width:115px;}
286
+table .span13{width:125px;}
287
+table .span14{width:135px;}
288
+table .span15{width:145px;}
289
+table .span16{width:155px;}
290
+.zebra-striped tbody tr:nth-child(odd) td,.zebra-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;}
291
+.zebra-striped tbody tr:hover td,.zebra-striped tbody tr:hover th{background-color:#f2f2f2;}
292
+table .header{cursor:pointer;}table .header:after{content:"";float:right;margin-top:7px;border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:hidden;}
293
+table .headerSortUp,table .headerSortDown{background-color:rgba(141, 192, 219, 0.25);text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);}
294
+table .header:hover:after{visibility:visible;}
295
+table .headerSortDown:after,table .headerSortDown:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;}
296
+table .headerSortUp:after{border-bottom:none;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;}
297
+table .blue{color:#627aad;border-bottom-color:#627aad;}
298
+table .headerSortUp.blue,table .headerSortDown.blue{background-color:#e8ecf3;}
299
+table .green{color:#3b6e22;border-bottom-color:#3b6e22;}
300
+table .headerSortUp.green,table .headerSortDown.green{background-color:#9fd983;}
301
+table .red{color:#dd3c10;border-bottom-color:#dd3c10;}
302
+table .headerSortUp.red,table .headerSortDown.red{background-color:#fef2ee;}
303
+table .yellow{color:#e2c822;border-bottom-color:#e2c822;}
304
+table .headerSortUp.yellow,table .headerSortDown.yellow{background-color:#faf5d6;}
305
+table .orange{color:#f89406;border-bottom-color:#f89406;}
306
+table .headerSortUp.orange,table .headerSortDown.orange{background-color:#fee9cc;}
307
+table .purple{color:#7a43b6;border-bottom-color:#7a43b6;}
308
+table .headerSortUp.purple,table .headerSortDown.purple{background-color:#e2d5f0;}
309
+.topbar{height:38px;position:fixed;top:0;left:0;right:0;z-index:10000;overflow:visible;}.topbar a{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}
310
+.topbar h3 a:hover,.topbar .brand:hover,.topbar ul .active>a{background-color:#627aad;color:#ffffff;text-decoration:none;}
311
+.topbar h3{position:relative;}
312
+.topbar h3 a,.topbar .brand{float:left;display:block;padding:4px 20px 12px;margin:4px 0 0 -20px;color:#ffffff;font-size:20px;font-weight:200;line-height:1;}
313
+.topbar p{margin:0;line-height:38px;}.topbar p a:hover{background-color:transparent;color:#ffffff;}
314
+.topbar form{float:left;margin:5px 0 0 0;position:relative;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;}
315
+.topbar form.pull-right{float:right;}
316
+.topbar input{background-color:#444;background-color:rgba(255, 255, 255, 0.3);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:normal;font-weight:13px;line-height:1;padding:4px 9px;color:#ffffff;color:rgba(255, 255, 255, 0.75);border:1px solid #111;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.topbar input:-moz-placeholder{color:#e2e2e2;}
317
+.topbar input::-webkit-input-placeholder{color:#e2e2e2;}
318
+.topbar input:hover{background-color:#999999;background-color:rgba(255, 255, 255, 0.5);color:#ffffff;}
319
+.topbar input:focus,.topbar input.focused{outline:0;background-color:#ffffff;color:#333333;text-shadow:0 1px 0 #ffffff;border:0;padding:5px 10px;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);}
320
+.topbar-inner,.topbar .fill{background-color:#3b5998;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);}
321
+.topbar div>ul,.nav{display:block;float:left;margin:4px 10px 0 0;position:relative;left:0;}.topbar div>ul>li,.nav>li{display:block;float:left;}
322
+.topbar div>ul a,.nav a{display:block;float:none;padding:10px 10px 11px;padding:6px 10px 11px;line-height:19px;text-decoration:none;}.topbar div>ul a:hover,.nav a:hover{color:#ffffff;text-decoration:none;background-color:#627aad;}
323
+.topbar div>ul .active>a,.nav .active>a{background-color:#627aad;}
324
+.topbar div>ul.secondary-nav,.nav.secondary-nav{float:right;margin-left:10px;margin-right:0;}.topbar div>ul.secondary-nav .menu-dropdown,.nav.secondary-nav .menu-dropdown,.topbar div>ul.secondary-nav .dropdown-menu,.nav.secondary-nav .dropdown-menu{right:0;border:0;}
325
+.topbar div>ul a.menu:hover,.nav a.menu:hover,.topbar div>ul li.open .menu,.nav li.open .menu,.topbar div>ul .dropdown-toggle:hover,.nav .dropdown-toggle:hover,.topbar div>ul .dropdown.open .dropdown-toggle,.nav .dropdown.open .dropdown-toggle{background:#3b5998;background:rgba(255, 255, 255, 0.05);}
326
+.topbar div>ul .menu-dropdown,.nav .menu-dropdown,.topbar div>ul .dropdown-menu,.nav .dropdown-menu{background-color:#3b5998;}.topbar div>ul .menu-dropdown a.menu,.nav .menu-dropdown a.menu,.topbar div>ul .dropdown-menu a.menu,.nav .dropdown-menu a.menu,.topbar div>ul .menu-dropdown .dropdown-toggle,.nav .menu-dropdown .dropdown-toggle,.topbar div>ul .dropdown-menu .dropdown-toggle,.nav .dropdown-menu .dropdown-toggle{color:#ffffff;}.topbar div>ul .menu-dropdown a.menu.open,.nav .menu-dropdown a.menu.open,.topbar div>ul .dropdown-menu a.menu.open,.nav .dropdown-menu a.menu.open,.topbar div>ul .menu-dropdown .dropdown-toggle.open,.nav .menu-dropdown .dropdown-toggle.open,.topbar div>ul .dropdown-menu .dropdown-toggle.open,.nav .dropdown-menu .dropdown-toggle.open{background:#627aad;background:rgba(255, 255, 255, 0.05);}
327
+.topbar div>ul .menu-dropdown li a,.nav .menu-dropdown li a,.topbar div>ul .dropdown-menu li a,.nav .dropdown-menu li a{color:#ffffff;}.topbar div>ul .menu-dropdown li a:hover,.nav .menu-dropdown li a:hover,.topbar div>ul .dropdown-menu li a:hover,.nav .dropdown-menu li a:hover{color:#ffffff;}
328
+.topbar div>ul .menu-dropdown .active a,.nav .menu-dropdown .active a,.topbar div>ul .dropdown-menu .active a,.nav .dropdown-menu .active a{color:#ffffff;}
329
+.topbar div>ul .menu-dropdown .divider,.nav .menu-dropdown .divider,.topbar div>ul .dropdown-menu .divider,.nav .dropdown-menu .divider{background-color:#3b5998;border-color:#627aad;}
330
+.topbar ul .menu-dropdown li a,.topbar ul .dropdown-menu li a{padding:4px 15px;}
331
+li.menu,.dropdown{position:relative;}
332
+a.menu:after,.dropdown-toggle:after{width:0;height:0;display:inline-block;content:"&darr;";text-indent:-99999px;vertical-align:top;margin-top:8px;margin-left:4px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #ffffff;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
333
+.menu-dropdown,.dropdown-menu{background-color:#ffffff;float:left;display:none;position:absolute;top:36px;z-index:900;min-width:160px;max-width:220px;_width:160px;margin-left:0;margin-right:0;padding:6px 0;zoom:1;border-color:#627aad;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px 1px 1px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.menu-dropdown li,.dropdown-menu li{float:none;display:block;background-color:none;}
334
+.menu-dropdown .divider,.dropdown-menu .divider{height:1px;margin:5px 0;overflow:hidden;background-color:#eee;border-bottom:1px solid #ffffff;}
335
+.topbar .dropdown-menu a,.dropdown-menu a{display:block;padding:4px 15px;clear:both;font-weight:normal;line-height:18px;color:#627aad;}.topbar .dropdown-menu a:hover,.dropdown-menu a:hover,.topbar .dropdown-menu a.hover,.dropdown-menu a.hover{background-color:#627aad;color:#ffffff;text-decoration:none;-webkit-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);}
336
+.open .menu,.dropdown.open .menu,.open .dropdown-toggle,.dropdown.open .dropdown-toggle{color:#ffffff;background:#627aad;}
337
+.open .menu-dropdown,.dropdown.open .menu-dropdown,.open .dropdown-menu,.dropdown.open .dropdown-menu{display:block;}
338
+.tabs,.pills{margin:0 0 14px;padding:0;list-style:none;zoom:1;}.tabs:before,.pills:before,.tabs:after,.pills:after{display:table;content:"";zoom:1;}
339
+.tabs:after,.pills:after{clear:both;}
340
+.tabs>li,.pills>li{float:left;}.tabs>li>a,.pills>li>a{display:block;}
341
+.tabs{border-color:#ddd;border-style:solid;border-width:0 0 1px;}.tabs>li{position:relative;margin-bottom:-1px;}.tabs>li>a{padding:0 15px;margin-right:2px;line-height:21px;border:1px solid transparent;-webkit-border-radius:2px 2px 0 0;-moz-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;}.tabs>li>a:hover{text-decoration:none;background-color:#eee;border-color:#eee #eee #ddd;}
342
+.tabs .active>a,.tabs .active>a:hover{color:#666666;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;}
343
+.tabs .menu-dropdown,.tabs .dropdown-menu{top:25px;border-width:1px;-webkit-border-radius:0 4px 4px 4px;-moz-border-radius:0 4px 4px 4px;border-radius:0 4px 4px 4px;}
344
+.tabs a.menu:after,.tabs .dropdown-toggle:after{border-top-color:#3b5998;margin-top:10px;margin-left:5px;}
345
+.tabs li.open.menu .menu,.tabs .open.dropdown .dropdown-toggle{border-color:#3b5998;}
346
+.tabs li.open a.menu:after,.tabs .dropdown.open .dropdown-toggle:after{border-top-color:#627aad;}
347
+.pills a{margin:3px 3px 3px 0;padding:0 10px;line-height:20px;text-shadow:0 1px 1px #ffffff;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}.pills a:hover{color:#ffffff;text-decoration:none;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#3b5998;}
348
+.pills .active a{color:#ffffff;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#3b5998;}
349
+.pills-vertical>li{float:none;}
350
+.tab-content>.tab-pane,.pill-content>.pill-pane,.tab-content>div,.pill-content>div{display:none;}
351
+.tab-content>.active,.pill-content>.active{display:block;}
352
+.breadcrumb{padding:7px 14px;margin:0 0 14px;background-color:#f2f2f2;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f2f2f2));background-image:-moz-linear-gradient(top, #ffffff, #f2f2f2);background-image:-ms-linear-gradient(top, #ffffff, #f2f2f2);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f2f2f2));background-image:-webkit-linear-gradient(top, #ffffff, #f2f2f2);background-image:-o-linear-gradient(top, #ffffff, #f2f2f2);background-image:linear-gradient(top, #ffffff, #f2f2f2);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f2f2f2', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;}
353
+.breadcrumb .divider{padding:0 2px;}
354
+.breadcrumb .active a{color:#333333;}
355
+.hero-unit{background-color:#f2f2f2;margin-bottom:30px;padding:60px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;}
356
+.hero-unit p{font-size:18px;font-weight:200;line-height:21px;}
357
+footer{margin-top:13px;padding-top:13px;border-top:1px solid #eee;}
358
+.page-header{margin-bottom:13px;border-bottom:1px solid #ddd;-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}.page-header h1{margin-bottom:6px;}
359
+.btn.success,.alert-message.success,.btn.success:hover,.alert-message.success:hover,.btn.danger,.alert-message.danger,.btn.danger:hover,.alert-message.danger:hover,.btn.error,.alert-message.error,.btn.error:hover,.alert-message.error:hover,.btn.info,.alert-message.info,.btn.info:hover,.alert-message.info:hover{color:#333333;}
360
+.btn .close,.alert-message .close{font-family:Arial,sans-serif;line-height:14px;}
361
+.btn.danger,.alert-message.danger,.btn.error,.alert-message.error{background-color:#ffebe8;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ffebe8), to(#ffebe8));background-image:-moz-linear-gradient(top, #ffebe8, #ffebe8);background-image:-ms-linear-gradient(top, #ffebe8, #ffebe8);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffebe8), color-stop(100%, #ffebe8));background-image:-webkit-linear-gradient(top, #ffebe8, #ffebe8);background-image:-o-linear-gradient(top, #ffebe8, #ffebe8);background-image:linear-gradient(top, #ffebe8, #ffebe8);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebe8', endColorstr='#ffebe8', GradientType=0);border-color:#ffebe8 #ffebe8 #ffa89b;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
362
+.btn.success,.alert-message.success{background-color:#eceff6;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#eceff6), to(#eceff6));background-image:-moz-linear-gradient(top, #eceff6, #eceff6);background-image:-ms-linear-gradient(top, #eceff6, #eceff6);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #eceff6), color-stop(100%, #eceff6));background-image:-webkit-linear-gradient(top, #eceff6, #eceff6);background-image:-o-linear-gradient(top, #eceff6, #eceff6);background-image:linear-gradient(top, #eceff6, #eceff6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eceff6', endColorstr='#eceff6', GradientType=0);border-color:#eceff6 #eceff6 #b8c3dd;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);border-color:#d4dae8;}
363
+.btn.info,.alert-message.info{background-color:#fff9d7;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fff9d7), to(#fff9d7));background-image:-moz-linear-gradient(top, #fff9d7, #fff9d7);background-image:-ms-linear-gradient(top, #fff9d7, #fff9d7);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff9d7), color-stop(100%, #fff9d7));background-image:-webkit-linear-gradient(top, #fff9d7, #fff9d7);background-image:-o-linear-gradient(top, #fff9d7, #fff9d7);background-image:linear-gradient(top, #fff9d7, #fff9d7);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9d7', endColorstr='#fff9d7', GradientType=0);border-color:#fff9d7 #fff9d7 #ffee8b;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
364
+.btn{cursor:pointer;display:inline-block;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);padding:5px 12px 6px;color:#333;font-size:11px;font-weight:bold;line-height:14px;border:1px solid #666666;border-bottom-color:#999999;-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-webkit-transition:0.1s linear all;-moz-transition:0.1s linear all;-ms-transition:0.1s linear all;-o-transition:0.1s linear all;transition:0.1s linear all;}.btn:hover{background-position:0 -15px;color:#333;text-decoration:none;}
365
+.btn:focus{outline:1px dotted #666;}
366
+.btn.primary{color:#ffffff;background-color:#3b5998;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#627aad), to(#3b5998));background-image:-moz-linear-gradient(top, #627aad, #3b5998);background-image:-ms-linear-gradient(top, #627aad, #3b5998);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #627aad), color-stop(100%, #3b5998));background-image:-webkit-linear-gradient(top, #627aad, #3b5998);background-image:-o-linear-gradient(top, #627aad, #3b5998);background-image:linear-gradient(top, #627aad, #3b5998);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#627aad', endColorstr='#3b5998', GradientType=0);border-color:#3b5998 #3b5998 #263961;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
367
+.btn.success{background-color:#69a74e;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#69a74e), to(#69a74e));background-image:-moz-linear-gradient(top, #69a74e, #69a74e);background-image:-ms-linear-gradient(top, #69a74e, #69a74e);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #69a74e), color-stop(100%, #69a74e));background-image:-webkit-linear-gradient(top, #69a74e, #69a74e);background-image:-o-linear-gradient(top, #69a74e, #69a74e);background-image:linear-gradient(top, #69a74e, #69a74e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#69a74e', endColorstr='#69a74e', GradientType=0);border-color:#69a74e #69a74e #487336;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);border-color:#3b6e22 #3b6e22 #2c5115;}
368
+.btn.danger,.btn.error{background-color:#dd3c10;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#dd3c10), to(#dd3c10));background-image:-moz-linear-gradient(top, #dd3c10, #dd3c10);background-image:-ms-linear-gradient(top, #dd3c10, #dd3c10);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #dd3c10), color-stop(100%, #dd3c10));background-image:-webkit-linear-gradient(top, #dd3c10, #dd3c10);background-image:-o-linear-gradient(top, #dd3c10, #dd3c10);background-image:linear-gradient(top, #dd3c10, #dd3c10);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dd3c10', endColorstr='#dd3c10', GradientType=0);border-color:#dd3c10 #dd3c10 #96290b;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);border-color:#c5360e #c5360e #7e2209;}
369
+.btn.success,.btn.danger,.btn.error{color:#ffffff;}.btn.success:hover,.btn.danger:hover,.btn.error:hover{color:#ffffff;}
370
+.btn.active,.btn:active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);}
371
+.btn.disabled{cursor:default;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;}
372
+.btn[disabled]{cursor:default;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;}
373
+.btn.large{font-size:13px;line-height:normal;padding:9px 14px 9px;-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;}
374
+.btn.small{padding:4px 7px 5px 7px;font-size:9px;}
375
+:root .alert-message,:root .btn{border-radius:0 \0;}
376
+button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0;}
377
+.close{float:right;color:#000000;font-size:20px;font-weight:bold;line-height:10.5px;text-shadow:0 1px 0 #ffffff;filter:alpha(opacity=25);-khtml-opacity:0.25;-moz-opacity:0.25;opacity:0.25;}.close:hover{color:#000000;text-decoration:none;filter:alpha(opacity=40);-khtml-opacity:0.4;-moz-opacity:0.4;opacity:0.4;}
378
+.alert-message{position:relative;padding:7px 15px;margin-bottom:14px;color:#333333;background-color:#f7f7f7;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#f7f7f7), to(#f7f7f7));background-image:-moz-linear-gradient(top, #f7f7f7, #f7f7f7);background-image:-ms-linear-gradient(top, #f7f7f7, #f7f7f7);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #f7f7f7), color-stop(100%, #f7f7f7));background-image:-webkit-linear-gradient(top, #f7f7f7, #f7f7f7);background-image:-o-linear-gradient(top, #f7f7f7, #f7f7f7);background-image:linear-gradient(top, #f7f7f7, #f7f7f7);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7f7f7', endColorstr='#f7f7f7', GradientType=0);border-color:#f7f7f7 #f7f7f7 #d1d1d1;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);text-shadow:none;border-width:1px;border-style:solid;-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);}.alert-message .close{margin-top:1px;*margin-top:0;}
379
+.alert-message a{font-weight:bold;color:#333333;text-shadow:none;}
380
+.alert-message strong{text-shadow:none;}
381
+.alert-message.error,.alert-message.success,.alert-message.info{text-shadow:none;}
382
+.alert-message h5{line-height:14px;}
383
+.alert-message p{margin-bottom:0;}
384
+.alert-message div{margin-top:5px;margin-bottom:2px;line-height:28px;}
385
+.alert-message .btn{-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);}
386
+.alert-message.block-message{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);padding:14px;background-color:#f7f7f7;border-color:#cccccc;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}.alert-message.block-message ul,.alert-message.block-message p{margin-right:30px;}
387
+.alert-message.block-message ul{margin-bottom:0;}
388
+.alert-message.block-message li{color:#333333;}
389
+.alert-message.block-message .alert-actions{margin-top:5px;}
390
+.alert-message.block-message.error,.alert-message.block-message.success,.alert-message.block-message.info{color:#333333;}
391
+.alert-message.block-message.error{background-color:#ffebe8;border-color:#dd3c10;}
392
+.alert-message.block-message.success{background-color:#eceff6;border-color:#d4dae8;}
393
+.alert-message.block-message.info{background-color:#fff9d7;border-color:#e2c822;}
394
+.alert-message.block-message.danger p a,.alert-message.block-message.error p a,.alert-message.block-message.success p a,.alert-message.block-message.info p a{color:#333333;}
395
+.pagination{height:28px;margin:14px 0;}.pagination ul{float:left;margin:0;border:1px solid #ddd;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);}
396
+.pagination li{display:inline;}
397
+.pagination a{float:left;padding:0 14px;line-height:26px;border-right:1px solid;border-right-color:#ddd;border-right-color:rgba(0, 0, 0, 0.15);*border-right-color:#ddd;text-decoration:none;}
398
+.pagination a:hover,.pagination .active a{background-color:#eceff6;}
399
+.pagination .disabled a,.pagination .disabled a:hover{background-color:transparent;color:#999999;}
400
+.pagination .next a{border:0;}
401
+.well{background-color:#f2f2f2;margin-bottom:20px;padding:19px;min-height:20px;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);}
402
+.modal-backdrop{background-color:#000000;position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000;}.modal-backdrop.fade{opacity:0;}
403
+.modal-backdrop,.modal-backdrop.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}
404
+.modal{position:fixed;top:50%;left:50%;z-index:11000;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;-webkit-box-shadow:0 0 0px 8px rgba(82, 82, 82, 0.7);-moz-box-shadow:0 0 0px 8px rgba(82, 82, 82, 0.7);box-shadow:0 0 0px 8px rgba(82, 82, 82, 0.7);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal .close{margin-top:7px;}
405
+.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;}
406
+.modal.fade.in{top:50%;}
407
+.modal-header{border-bottom:1px solid #eee;padding:5px 15px;}
408
+.modal-body{padding:15px;}
409
+.modal-body form{margin-bottom:0;}
410
+.modal-footer{background-color:#f2f2f2;padding:14px 15px 15px;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;zoom:1;margin-bottom:0;}.modal-footer:before,.modal-footer:after{display:table;content:"";zoom:1;}
411
+.modal-footer:after{clear:both;}
412
+.modal-footer .btn{float:right;margin-left:5px;}
413
+.modal .popover,.modal .twipsy{z-index:12000;}
414
+.twipsy{display:block;position:absolute;visibility:visible;padding:5px;font-size:11px;z-index:1000;filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}.twipsy.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}
415
+.twipsy.above .twipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #3b5998;}
416
+.twipsy.left .twipsy-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #3b5998;}
417
+.twipsy.below .twipsy-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #3b5998;}
418
+.twipsy.right .twipsy-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #3b5998;}
419
+.twipsy-inner{padding:3px 8px;background-color:#3b5998;color:#ffffff;text-align:center;max-width:200px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
420
+.twipsy-arrow{position:absolute;width:0;height:0;}
421
+.popover{position:absolute;top:0;left:0;z-index:1000;padding:5px;display:none;}.popover.above .arrow{bottom:-4px;left:50%;margin-left:-10px;border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px solid rgba(0, 0, 0, 0.3);}
422
+.popover.right .arrow{top:50%;left:-4px;margin-top:-10px;border-top:10px solid transparent;border-bottom:10px solid transparent;border-right:10px solid rgba(0, 0, 0, 0.3);}
423
+.popover.below .arrow{top:-4px;left:50%;margin-left:-10px;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid rgba(0, 0, 0, 0.3);}
424
+.popover.left .arrow{top:50%;right:-4px;margin-top:-10px;border-top:10px solid transparent;border-bottom:10px solid transparent;border-left:10px solid rgba(0, 0, 0, 0.3);}
425
+.popover.above:after{bottom:0;left:50%;margin-left:-11px;border-left:11px solid transparent;border-right:11px solid transparent;border-top:11px solid #ffffff;content:' ';}
426
+.popover.right:after{top:50%;left:0;margin-top:-11px;border-top:11px solid transparent;border-bottom:11px solid transparent;border-right:11px solid #ffffff;content:' ';}
427
+.popover.below:after{top:0;left:50%;margin-left:-11px;border-left:11px solid transparent;border-right:11px solid transparent;border-bottom:11px solid #ffffff;content:' ';}
428
+.popover.left:after{top:50%;right:-2px;margin-top:-11px;border-top:11px solid transparent;border-bottom:11px solid transparent;border-left:11px solid #ffffff;content:' ';}
429
+.popover .arrow,.popover.above:after,.popover.right:after,.popover.below:after,.popover.left:after{position:absolute;width:0;height:0;}
430
+.popover .inner{padding:3px;overflow:hidden;width:280px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);border:1px solid #8C8C8C;border:1px solid rgba(0, 0, 0, 0.45);border-bottom:1px solid #666;-moz-box-shadow:0 3px 8px rgba(0, 0, 0, 0.3);-webkit-box-shadow:0 3px 8px rgba(0, 0, 0, 0.3);box-shadow:0 3px 8px rgba(0, 0, 0, 0.3);}
431
+.popover .title{padding:5px 10px;line-height:1;border-bottom:1px solid #eee;}
432
+.popover .content{background-color:#ffffff;padding:10px;}.popover .content p,.popover .content ul,.popover .content ol{margin-bottom:0;}
433
+.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;}
434
+.label{padding:1px 3px 1px;font-size:8.25px;font-weight:bold;color:#ffffff;text-transform:uppercase;white-space:nowrap;background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;text-shadow:none;}.label.important{background-color:#dd3c10;}
435
+.label.warning{background-color:#e2c822;}
436
+.label.success{background-color:#3b6e22;}
437
+.label.notice{background-color:#b6c1d9;}
438
+.label.num{color:#3b5998;background-color:#b6c1d9;float:right;}
439
+.media-grid{margin-left:-20px;margin-bottom:0;zoom:1;}.media-grid:before,.media-grid:after{display:table;content:"";zoom:1;}
440
+.media-grid:after{clear:both;}
441
+.media-grid li{display:inline;}
442
+.media-grid a{float:left;padding:4px;margin:0 0 14px 20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);}.media-grid a img{display:block;}
443
+.media-grid a:hover{border-color:#3b5998;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);}
0 444
new file mode 100755
... ...
@@ -0,0 +1,316 @@
1
+/* Add additional stylesheets below
2
+-------------------------------------------------- */
3
+/*
4
+  Bootstrap's documentation styles
5
+  Special styles for presenting Bootstrap's documentation and examples
6
+*/
7
+
8
+/* Body and structure
9
+-------------------------------------------------- */
10
+body {
11
+  background-color: #fff;
12
+  position: relative;
13
+}
14
+section {
15
+  padding-top: 60px;
16
+}
17
+section > .row {
18
+  margin-bottom: 10px;
19
+}
20
+
21
+
22
+/* Jumbotrons
23
+-------------------------------------------------- */
24
+.jumbotron {
25
+  min-width: 940px;
26
+  padding-top: 40px;
27
+}
28
+.jumbotron .inner {
29
+  padding: 45px 0;
30
+  -webkit-box-shadow: inset 0 10px 30px rgba(0,0,0,.3);
31
+     -moz-box-shadow: inset 0 10px 30px rgba(0,0,0,.3);
32
+/*          box-shadow: inset 0 10px 30px rgba(0,0,0,.3);
33
+*/}
34
+.jumbotron h1,
35
+.jumbotron p {
36
+  margin-bottom: 9px;
37
+  color: #fff;
38
+  text-align: center;
39
+  text-shadow: 0 1px 1px rgba(0,0,0,.3);
40
+}
41
+.jumbotron h1 {
42
+  font-size: 54px;
43
+  line-height: 1;
44
+  text-shadow: 0 1px 2px rgba(0,0,0,.5);
45
+}
46
+.jumbotron p {
47
+  font-weight: 300;
48
+}
49
+.jumbotron .lead {
50
+  font-size: 20px;
51
+  line-height: 27px;
52
+}
53
+.jumbotron p a {
54
+  color: #fff;
55
+  font-weight: bold;
56
+}
57
+
58
+/* Specific jumbotrons
59
+------------------------- */
60
+/* main docs page */
61
+.masthead {
62
+  background-color: #049cd9;
63
+  background-repeat: no-repeat;
64
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#004D9F), to(#049cd9));
65
+  background-image: -webkit-linear-gradient(#004D9F, #049cd9);
66
+  background-image: -moz-linear-gradient(#004D9F, #049cd9);
67
+  background-image: -o-linear-gradient(top, #004D9F, #049cd9);
68
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#004D9F), to(#049cd9));
69
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#004D9F', endColorstr='#049cd9', GradientType=0); /* IE8 and down */
70
+}
71
+/* supporting docs pages */
72
+.subhead {
73
+  background-color: #767d80;
74
+  background-repeat: no-repeat;
75
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#565d60), to(#767d80));
76
+  background-image: -webkit-linear-gradient(#565d60, #767d80);
77
+  background-image: -moz-linear-gradient(#565d60, #767d80);
78
+  background-image: -o-linear-gradient(top, #565d60, #767d80);
79
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#565d60), to(#767d80));
80
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#565d60', endColorstr='#767d80', GradientType=0); /* IE8 and down */
81
+}
82
+.subhead .inner {
83
+  padding: 36px 0 27px;
84
+}
85
+.subhead h1,
86
+.subhead p {
87
+  text-align: left;
88
+}
89
+.subhead h1 {
90
+  font-size: 40px;
91
+}
92
+.subhead p a {
93
+  font-weight: normal;
94
+}
95
+
96
+
97
+/* Footer
98
+-------------------------------------------------- */
99
+.footer {
100
+  background-color: #eee;
101
+  min-width: 940px;
102
+  padding: 30px 0;
103
+  text-shadow: 0 1px 0 #fff;
104
+  border-top: 1px solid #e5e5e5;
105
+  -webkit-box-shadow: inset 0 5px 15px rgba(0,0,0,.025);
106
+     -moz-box-shadow: inset 0 5px 15px rgba(0,0,0,.025);
107
+/*          box-shadow: inset 0 5px 15px rgba(0,0,0,.025);
108
+*/}
109
+.footer p {
110
+  color: #555;
111
+}
112
+
113
+
114
+/* Quickstart section for getting le code
115
+-------------------------------------------------- */
116
+.quickstart {
117
+  background-color: #f5f5f5;
118
+  background-repeat: repeat-x;
119
+  background-image: -khtml-gradient(linear, left top, left bottom, from(#f9f9f9), to(#f5f5f5));
120
+  background-image: -moz-linear-gradient(#f9f9f9, #f5f5f5);
121
+  background-image: -ms-linear-gradient(#f9f9f9, #f5f5f5);
122
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f9f9f9), color-stop(100%, #f5f5f5));
123
+  background-image: -webkit-linear-gradient(#f9f9f9, #f5f5f5);
124
+  background-image: -o-linear-gradient(#f9f9f9, #f5f5f5);
125
+  -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#f5f5f5', GradientType=0)";
126
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#f5f5f5', GradientType=0);
127
+  background-image: linear-gradient(#f9f9f9, #f5f5f5);
128
+  border-top: 1px solid #fff;
129
+  border-bottom: 1px solid #eee;
130
+}
131
+.quickstart .container {
132
+  margin-bottom: 0;
133
+}
134
+.quickstart .row {
135
+  margin: 0 -20px;
136
+  -webkit-box-shadow: 1px 0 0 #f9f9f9;
137
+     -moz-box-shadow: 1px 0 0 #f9f9f9;
138
+          box-shadow: 1px 0 0 #f9f9f9;
139
+}
140
+.quickstart [class*="span"] {
141
+  width: 285px;
142
+  height: 117px;
143
+  margin-left: 0;
144
+  padding: 17px 20px 26px;
145
+  border-left: 1px solid #eee;
146
+  -webkit-box-shadow: inset 1px 0 0 #f9f9f9;
147
+     -moz-box-shadow: inset 1px 0 0 #f9f9f9;
148
+          box-shadow: inset 1px 0 0 #f9f9f9;
149
+}
150
+.quickstart [class*="span"]:last-child {
151
+  border-right: 1px solid #eee;
152
+  width: 286px;
153
+}
154
+.quickstart h6,
155
+.quickstart p {
156
+  line-height: 18px;
157
+  text-align: center;
158
+  margin-bottom: 9px;
159
+  color: #333;
160
+}
161
+.quickstart .current-version,
162
+.quickstart .current-version a {
163
+  color: #999;
164
+}
165
+.quickstart h6 {
166
+  color: #999;
167
+}
168
+.quickstart textarea {
169
+  display: block;
170
+  width: 275px;
171
+  height: auto;
172
+  margin: 0 0 9px;
173
+  line-height: 21px;
174
+  white-space: nowrap;
175
+  overflow: hidden;
176
+}
177
+
178
+
179
+/* Special grid styles
180
+-------------------------------------------------- */
181
+.show-grid {
182
+  margin-top: 10px;
183
+  margin-bottom: 10px;
184
+}
185
+.show-grid [class*="span"] {
186
+  background: #eee;
187
+  text-align: center;
188
+  -webkit-border-radius: 3px;
189
+     -moz-border-radius: 3px;
190
+          border-radius: 3px;
191
+  min-height: 30px;
192
+  line-height: 30px;
193
+}
194
+.show-grid:hover [class*="span"] {
195
+  background: #ddd;
196
+}
197
+.show-grid .show-grid {
198
+  margin-top: 0;
199
+  margin-bottom: 0;
200
+}
201
+.show-grid .show-grid [class*="span"] {
202
+  background-color: #ccc;
203
+}
204
+
205
+
206
+/* Render mini layout previews
207
+-------------------------------------------------- */
208
+.mini-layout {
209
+  border: 1px solid #ddd;
210
+  -webkit-border-radius: 6px;
211
+     -moz-border-radius: 6px;
212
+          border-radius: 6px;
213
+  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.075);
214
+     -moz-box-shadow: 0 1px 2px rgba(0,0,0,.075);
215
+          box-shadow: 0 1px 2px rgba(0,0,0,.075);
216
+}
217
+.mini-layout {
218
+  height: 240px;
219
+  margin-bottom: 20px;
220
+  padding: 9px;
221
+}
222
+.mini-layout div {
223
+  -webkit-border-radius: 3px;
224
+     -moz-border-radius: 3px;
225
+          border-radius: 3px;
226
+}
227
+.mini-layout .mini-layout-body {
228
+  background-color: #dceaf4;
229
+  margin: 0 auto;
230
+  width: 240px;
231
+  height: 240px;
232
+}
233
+.mini-layout.fluid .mini-layout-sidebar,
234
+.mini-layout.fluid .mini-layout-header,
235
+.mini-layout.fluid .mini-layout-body {
236
+  float: left;
237
+}
238
+.mini-layout.fluid .mini-layout-sidebar {
239
+  background-color: #bbd8e9;
240
+  width: 90px;
241
+  height: 240px;
242
+}
243
+.mini-layout.fluid .mini-layout-body {
244
+  width: 300px;
245
+  margin-left: 10px;
246
+}
247
+
248
+
249
+/* Topbar special styles
250
+-------------------------------------------------- */
251
+.topbar-wrapper {
252
+  position: relative;
253
+  height: 40px;
254
+  margin: 5px 0 15px;
255
+}
256
+.topbar-wrapper .topbar {
257
+  position: absolute;
258
+  margin: 0 -20px;
259
+}
260
+.topbar-wrapper .topbar .topbar-inner {
261
+  padding-left: 20px;
262
+  padding-right: 20px;
263
+  -webkit-border-radius: 4px;
264
+     -moz-border-radius: 4px;
265
+          border-radius: 4px;
266
+}
267
+
268
+/* Topbar in js docs
269
+------------------------- */
270
+#bootstrap-js .topbar-wrapper {
271
+  z-index: 1;
272
+}
273
+#bootstrap-js .topbar-wrapper .topbar {
274
+  position: absolute;
275
+  margin: 0 -20px;
276
+}
277
+#bootstrap-js .topbar-wrapper .topbar .topbar-inner {
278
+  padding-left: 20px;
279
+  padding-right: 20px;
280
+  -webkit-border-radius: 4px;
281
+     -moz-border-radius: 4px;
282
+          border-radius: 4px;
283
+}
284
+#bootstrap-js .topbar-wrapper .container {
285
+  width: auto;
286
+}
287
+
288
+
289
+/* Popover docs
290
+-------------------------------------------------- */
291
+.popover-well {
292
+  min-height: 160px;
293
+}
294
+.popover-well .popover {
295
+  display: block;
296
+}
297
+.popover-well .popover-wrapper {
298
+  width: 50%;
299
+  height: 160px;
300
+  float: left;
301
+  margin-left: 55px;
302
+  position: relative;
303
+}
304
+.popover-well .popover-menu-wrapper {
305
+  height: 80px;
306
+}
307
+img.large-bird {
308
+  margin: 5px 0 0 310px;
309
+  opacity: .1;
310
+}
311
+
312
+/* Pretty Print
313
+-------------------------------------------------- */
314
+pre.prettyprint {
315
+  overflow: hidden;
316
+}
0 317
\ No newline at end of file
1 318
new file mode 100755
... ...
@@ -0,0 +1,293 @@
1
+/*
2
+ * HTML5 Boilerplate
3
+ *
4
+ * What follows is the result of much research on cross-browser styling.
5
+ * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
6
+ * Kroc Camen, and the H5BP dev community and team.
7
+ *
8
+ * Detailed information about this CSS: h5bp.com/css
9
+ *
10
+ * ==|== normalize ==========================================================
11
+ */
12
+
13
+
14
+/* =============================================================================
15
+   HTML5 display definitions
16
+   ========================================================================== */
17
+
18
+article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
19
+audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
20
+audio:not([controls]) { display: none; }
21
+[hidden] { display: none; }
22
+
23
+
24
+/* =============================================================================
25
+   Base
26
+   ========================================================================== */
27
+
28
+/*
29
+ * 1. Correct text resizing oddly in IE6/7 when body font-size is set using em units
30
+ * 2. Prevent iOS text size adjust on device orientation change, without disabling user zoom: h5bp.com/g
31
+ */
32
+
33
+html { font-size: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
34
+
35
+html, button, input, select, textarea { font-family: sans-serif; color: #222; }
36
+
37
+body { margin: 0; font-size: 1em; line-height: 1.4; }
38
+
39
+/*
40
+ * Remove text-shadow in selection highlight: h5bp.com/i
41
+ * These selection declarations have to be separate
42
+ * Also: hot pink! (or customize the background color to match your design)
43
+ */
44
+
45
+::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; }
46
+::selection { background: #fe57a1; color: #fff; text-shadow: none; }
47
+
48
+
49
+/* =============================================================================
50
+   Links
51
+   ========================================================================== */
52
+
53
+a { color: #00e; }
54
+a:visited { color: #551a8b; }
55
+a:hover { color: #06e; }
56
+a:focus { outline: thin dotted; }
57
+
58
+/* Improve readability when focused and hovered in all browsers: h5bp.com/h */
59
+a:hover, a:active { outline: 0; }
60
+
61
+
62
+/* =============================================================================
63
+   Typography
64
+   ========================================================================== */
65
+
66
+abbr[title] { border-bottom: 1px dotted; }
67
+
68
+b, strong { font-weight: bold; }
69
+
70
+blockquote { margin: 1em 40px; }
71
+
72
+dfn { font-style: italic; }
73
+
74
+hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
75
+
76
+ins { background: #ff9; color: #000; text-decoration: none; }
77
+
78
+mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
79
+
80
+/* Redeclare monospace font family: h5bp.com/j */
81
+pre, code, kbd, samp { font-family: monospace, serif; _font-family: 'courier new', monospace; font-size: 1em; }
82
+
83
+/* Improve readability of pre-formatted text in all browsers */
84
+pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
85
+
86
+q { quotes: none; }
87
+q:before, q:after { content: ""; content: none; }
88
+
89
+small { font-size: 85%; }
90
+
91
+/* Position subscript and superscript content without affecting line-height: h5bp.com/k */
92
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
93
+sup { top: -0.5em; }
94
+sub { bottom: -0.25em; }
95
+
96
+
97
+/* =============================================================================
98
+   Lists
99
+   ========================================================================== */
100
+
101
+ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
102
+dd { margin: 0 0 0 40px; }
103
+nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }
104
+
105
+
106
+/* =============================================================================
107
+   Embedded content
108
+   ========================================================================== */
109
+
110
+/*
111
+ * 1. Improve image quality when scaled in IE7: h5bp.com/d
112
+ * 2. Remove the gap between images and borders on image containers: h5bp.com/i/440
113
+ */
114
+
115
+img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
116
+
117
+/*
118
+ * Correct overflow not hidden in IE9
119
+ */
120
+
121
+svg:not(:root) { overflow: hidden; }
122
+
123
+
124
+/* =============================================================================
125
+   Figures
126
+   ========================================================================== */
127
+
128
+figure { margin: 0; }
129
+
130
+
131
+/* =============================================================================
132
+   Forms
133
+   ========================================================================== */
134
+
135
+form { margin: 0; }
136
+fieldset { border: 0; margin: 0; padding: 0; }
137
+
138
+/* Indicate that 'label' will shift focus to the associated form element */
139
+label { cursor: pointer; }
140
+
141
+/*
142
+ * 1. Correct color not inheriting in IE6/7/8/9
143
+ * 2. Correct alignment displayed oddly in IE6/7
144
+ */
145
+
146
+legend { border: 0; *margin-left: -7px; padding: 0; white-space: normal; }
147
+
148
+/*
149
+ * 1. Correct font-size not inheriting in all browsers
150
+ * 2. Remove margins in FF3/4 S5 Chrome
151
+ * 3. Define consistent vertical alignment display in all browsers
152
+ */
153
+
154
+button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
155
+
156
+/*
157
+ * 1. Define line-height as normal to match FF3/4 (set using !important in the UA stylesheet)
158
+ */
159
+
160
+button, input { line-height: normal; }
161
+
162
+/*
163
+ * 1. Display hand cursor for clickable form elements
164
+ * 2. Allow styling of clickable form elements in iOS
165
+ * 3. Correct inner spacing displayed oddly in IE7 (doesn't effect IE6)
166
+ */
167
+
168
+button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; *overflow: visible; }
169
+
170
+/*
171
+ * Re-set default cursor for disabled elements
172
+ */
173
+
174
+button[disabled], input[disabled] { cursor: default; }
175
+
176
+/*
177
+ * Consistent box sizing and appearance
178
+ */
179
+
180
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0; *width: 13px; *height: 13px; }
181
+input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
182
+input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: none; }
183
+
184
+/*
185
+ * Remove inner padding and border in FF3/4: h5bp.com/l
186
+ */
187
+
188
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
189
+
190
+/*
191
+ * 1. Remove default vertical scrollbar in IE6/7/8/9
192
+ * 2. Allow only vertical resizing
193
+ */
194
+
195
+textarea { overflow: auto; vertical-align: top; resize: vertical; }
196
+
197
+/* Colors for form validity */
198
+input:valid, textarea:valid {  }
199
+input:invalid, textarea:invalid { background-color: #f0dddd; }
200
+
201
+
202
+/* =============================================================================
203
+   Tables
204
+   ========================================================================== */
205
+
206
+table { border-collapse: collapse; border-spacing: 0; }
207
+td { vertical-align: top; }
208
+
209
+
210
+/* =============================================================================
211
+   Chrome Frame Prompt
212
+   ========================================================================== */
213
+
214
+.chromeframe { margin: 0.2em 0; background: #ccc; color: black; padding: 0.2em 0; }
215
+
216
+
217
+/* ==|== primary styles =====================================================
218
+   Author:
219
+   ========================================================================== */
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+/* ==|== media queries ======================================================
237
+   EXAMPLE Media Query for Responsive Design.
238
+   This example overrides the primary ('mobile first') styles
239
+   Modify as content requires.
240
+   ========================================================================== */
241
+
242
+@media only screen and (min-width: 35em) {
243
+  /* Style adjustments for viewports that meet the condition */
244
+}
245
+
246
+
247
+
248
+/* ==|== non-semantic helper classes ========================================
249
+   Please define your styles before this section.
250
+   ========================================================================== */
251
+
252
+/* For image replacement */
253
+.ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; *line-height: 0; }
254
+.ir br { display: none; }
255
+
256
+/* Hide from both screenreaders and browsers: h5bp.com/u */
257
+.hidden { display: none !important; visibility: hidden; }
258
+
259
+/* Hide only visually, but have it available for screenreaders: h5bp.com/v */
260
+.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
261
+
262
+/* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p */
263
+.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
264
+
265
+/* Hide visually and from screenreaders, but maintain layout */
266
+.invisible { visibility: hidden; }
267
+
268
+/* Contain floats: h5bp.com/q */
269
+.clearfix:before, .clearfix:after { content: ""; display: table; }
270
+.clearfix:after { clear: both; }
271
+.clearfix { *zoom: 1; }
272
+
273
+
274
+
275
+/* ==|== print styles =======================================================
276
+   Print styles.
277
+   Inlined to avoid required HTTP connection: h5bp.com/r
278
+   ========================================================================== */
279
+
280
+@media print {
281
+  * { background: transparent !important; color: black !important; box-shadow:none !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */
282
+  a, a:visited { text-decoration: underline; }
283
+  a[href]:after { content: " (" attr(href) ")"; }
284
+  abbr[title]:after { content: " (" attr(title) ")"; }
285
+  .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }  /* Don't show links for images, or javascript/internal links */
286
+  pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
287
+  thead { display: table-header-group; } /* h5bp.com/t */
288
+  tr, img { page-break-inside: avoid; }
289
+  img { max-width: 100% !important; }
290
+  @page { margin: 0.5cm; }
291
+  p, h2, h3 { orphans: 3; widows: 3; }
292
+  h2, h3 { page-break-after: avoid; }
293
+}
0 294
new file mode 100644
... ...
@@ -0,0 +1,1617 @@
1
+<!doctype html>
2
+<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
3
+<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
4
+<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
5
+<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
6
+<!-- Consider adding a manifest.appcache: h5bp.com/d/Offline -->
7
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
8
+<head>
9
+  <meta charset="utf-8">
10
+
11
+  <!-- Use the .htaccess and remove these lines to avoid edge case issues.
12
+       More info: h5bp.com/i/378 -->
13
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
14
+
15
+  <title>Démo FbootStrap - Site2</title>
16
+  <meta name="description" content="">
17
+
18
+  <!-- Mobile viewport optimized: h5bp.com/viewport -->
19
+  <meta name="viewport" content="width=device-width">
20
+
21
+  <!-- Place favicon.ico and apple-touch-icon.png in the root directory: mathiasbynens.be/notes/touch-icons -->
22
+
23
+  <link rel="stylesheet" href="/css/style.css">
24
+  <link rel="stylesheet" href="/css/bootstrap.css">
25
+  <link rel="stylesheet" href="/css/docs.css">
26
+
27
+  <!-- More ideas for your <head> here: h5bp.com/d/head-Tips -->
28
+
29
+  <!-- All JavaScript at the bottom, except this Modernizr build.
30
+       Modernizr enables HTML5 elements & feature detects for optimal performance.
31
+       Create your own custom Modernizr build: www.modernizr.com/download/ -->
32
+  <script src="js/libs/modernizr-2.5.3.min.js"></script>
33
+</head>
34
+<body>
35
+ <!-- Prompt IE 6 users to install Chrome Frame. Remove this if you support IE 6.
36
+       chromium.org/developers/how-tos/chrome-frame-getting-started -->
37
+  <!--[if lt IE 7]><p class=chromeframe>Your browser is <em>ancient!</em> <a href="http://browsehappy.com/">Upgrade to a different browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to experience this site.</p><![endif]-->
38
+  <header>
39
+		<h1>Projet site2</h1>
40
+  </header>
41
+  <div role="main">
42
+	<div class="container canvas">
43
+    
44
+    <div class="topbar" data-scrollspy="scrollspy">
45
+      <div class="topbar-inner">
46
+        <div class="container canvas">
47
+          <a class="brand" href="/index.html">Retour au Site2</a>
48
+          <ul class="nav">
49
+            <li class="active"><a href="#overview">Overview</a></li>
50
+            <li><a href="#grid-system">Grid</a></li>
51
+            <li><a href="#typography">Type</a></li>
52
+            <li><a href="#media">Media</a></li>
53
+            <li><a href="#tables">Tables</a></li>
54
+            <li><a href="#forms">Forms</a></li>
55
+            <li><a href="#navigation">Navigation</a></li>
56
+            <li><a href="#alerts">Alerts</a></li>
57
+            <li><a href="#popovers">Popovers</a></li>
58
+            <li><a href="#javascript">Javascript</a></li>
59
+          </ul>
60
+        </div>
61
+      </div>
62
+    </div>
63
+    
64
+<section id="overview">
65
+
66
+      <!-- Main hero unit for a primary marketing message or call to action -->
67
+      <div class="hero-unit">
68
+        <h1>site2</h1>
69
+        <p>
70
+            Fbootstrapp is a toolkit designed to kickstart development of facebook iframe apps in both relevant sizes.
71
+            It includes base CSS and HTML for typography, forms, buttons, tables, grids, navigation, and more, styled in the typical facebook look and feel.
72
+        <p>
73
+        <p><a href="http://github.com/ckrack/fbootstrapp" class="btn primary large">Visit the github project &raquo;</a></p>
74
+      </div>
75
+
76
+      <!-- Example row of columns -->
77
+      <div class="row">
78
+        <div class="span-one-third">
79
+          <h2>Based on Bootstrap</h2>
80
+          <p>Fbootstrap is based on Twitter's excellent Bootstrap, as the name might indicate.</p>
81
+          <p><a class="btn" href="http://twitter.github.com/bootstrap">View details &raquo;</a></p>
82
+        </div>
83
+        <div class="span-one-third">
84
+          <h2>Built with less</h2>
85
+           <p>Fbootstrapp comes with the same less goodness as Bootstrap.</p>
86
+       </div>
87
+        <div class="span-one-third">
88
+          <h2>Styled for Facebook</h2>
89
+          <p>As some researchers found out, it is more intuitive for users to style elements within apps and fanpages in the same look as the parenting facebook site.</p>
90
+          <p><a class="btn primary" href="#typography">View details &raquo;</a></p>
91
+        </div>
92
+      </div>
93
+      
94
+      <div class="row">
95
+        <div class="span-one-third">
96
+          <h5 class="tab">Build fanpage tabs</h5>
97
+          <p>Fbootstrapp includes a 520px grid perfectly suited to create fanpage tabs.</p>
98
+          <p><a class="btn" href="#grid-system">View details &raquo;</a></p>
99
+        </div>
100
+        <div class="span-one-third">
101
+          <h5 class="tab">Build canvas apps</h5>
102
+           <p>Additionally to the 520px grid, a 760px grid suitable to the bigger standalone app canvas is included.</p>
103
+          <p><a class="btn" href="#grid-system">View details &raquo;</a></p>
104
+       </div>
105
+        <div class="span-one-third">
106
+          <h5 class="tab">
107
+            Twitter
108
+            <a href="http://twitter.com/clmnsk" class="pull-right">@clmnsk</a>
109
+          </h5>
110
+          <p>Go and build awesome apps for facebook! Then tell me about it on twitter:</p>
111
+          <p>
112
+              <a href="https://twitter.com/clmnsk" class="twitter-follow-button pull-right" data-show-count="false">Follow @clmnsk</a>
113
+              <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
114
+          </p>
115
+        </div>
116
+      </div>
117
+      
118
+</section>      
119
+
120
+
121
+<!-- Grid system
122
+================================================== -->
123
+<section id="grid-system">
124
+  <div class="page-header">
125
+    <h1>Grid system <small>Rock the standard grid or create your own</small></h1>
126
+  </div>
127
+  <h2>Default grids</h2>
128
+  <p>
129
+    The default grid systems provided as part of FBootstrappp are a 760px and a 520px wide 12-column grids.
130
+    They are a flavor of the popular 960 grid system, but without the additional margin/padding on the left and right sides.
131
+  </p>
132
+  <h3>760 px grid</h3>
133
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"span6"</span><span class="tag">&gt;</span></li><li class="L2"><span class="pln">    ...</span></li><li class="L3"><span class="pln">  </span><span class="tag">&lt;/div&gt;</span></li><li class="L4"><span class="pln">  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"span10"</span><span class="tag">&gt;</span></li><li class="L5"><span class="pln">    ...</span></li><li class="L6"><span class="pln">  </span><span class="tag">&lt;/div&gt;</span></li><li class="L7"><span class="tag">&lt;/div&gt;</span></li></ol></pre>
134
+  <div class="row show-grid" title="12 column layout">
135
+    <div class="span1">1</div>
136
+    <div class="span1">1</div>
137
+    <div class="span1">1</div>
138
+    <div class="span1">1</div>
139
+    <div class="span1">1</div>
140
+    <div class="span1">1</div>
141
+    <div class="span1">1</div>
142
+    <div class="span1">1</div>
143
+    <div class="span1">1</div>
144
+    <div class="span1">1</div>
145
+    <div class="span1">1</div>
146
+    <div class="span1">1</div>
147
+  </div><!-- /row -->
148
+  <div class="row show-grid" title="6 column layout">
149
+    <div class="span2">2</div>
150
+    <div class="span2">2</div>
151
+    <div class="span2">2</div>
152
+    <div class="span2">2</div>
153
+    <div class="span2">2</div>
154
+    <div class="span2">2</div>
155
+  </div><!-- /row -->
156
+  <div class="row show-grid" title="4 column layout">
157
+    <div class="span3">3</div>
158
+    <div class="span3">3</div>
159
+    <div class="span3">3</div>
160
+    <div class="span3">3</div>
161
+  </div><!-- /row -->
162
+  <div class="row show-grid" title="Three column layout">
163
+    <div class="span4">4</div>
164
+    <div class="span4">4</div>
165
+    <div class="span4">4</div>
166
+  </div><!-- /row -->
167
+  <div class="row show-grid" title="Default three column layout">
168
+    <div class="span-one-third">1/3</div>
169
+    <div class="span-one-third">1/3</div>
170
+    <div class="span-one-third">1/3</div>
171
+  </div><!-- /row -->
172
+  <div class="row show-grid" title="One-third and two-thirds layout">
173
+    <div class="span-one-third">1/3</div>
174
+    <div class="span-two-thirds">2/3</div>
175
+  </div><!-- /row -->
176
+  <div class="row show-grid" title="Irregular three column layout">
177
+    <div class="span2">2</div>
178
+    <div class="span5">5</div>
179
+    <div class="span5">5</div>
180
+  </div><!-- /row -->
181
+  <div class="row show-grid" title="Half and half">
182
+    <div class="span6">6</div>
183
+    <div class="span6">6</div>
184
+  </div><!-- /row -->
185
+  <div class="row show-grid" title="Example uncommon two-column layout">
186
+    <div class="span3">3</div>
187
+    <div class="span9">9</div>
188
+  </div><!-- /row -->
189
+  <div class="row show-grid" title="Unnecessary single column layout">
190
+    <div class="span12">12</div>
191
+  </div><!-- /row -->
192
+
193
+  <br>
194
+
195
+  <h2>Offsetting columns</h2>
196
+  <div class="row show-grid">
197
+    <div class="span4">4</div>
198
+    <div class="span4 offset4">4 offset 4</div>
199
+  </div><!-- /row -->
200
+  <div class="row show-grid">
201
+    <div class="span-one-third offset-two-thirds">1/3 offset 2/3s</div>
202
+  </div><!-- /row -->
203
+  <div class="row show-grid">
204
+    <div class="span4 offset2">4 offset 2</div>
205
+    <div class="span4 offset2">4 offset 2</div>
206
+  </div><!-- /row -->
207
+  <div class="row show-grid">
208
+    <div class="span10 offset2">10 offset 2</div>
209
+  </div><!-- /row -->
210
+
211
+  <br>
212
+
213
+  <div class="row">
214
+    <div class="span4">
215
+      <h2>Nesting columns</h2>
216
+      <p>Nest your content if you must by creating a <code>.row</code> within an existing column.</p>
217
+    </div>
218
+    <div class="span12">
219
+      <h4>Example of nested columns</h4>
220
+      <div class="row show-grid">
221
+        <div class="span12">
222
+          Level 1 of column
223
+          <div class="row show-grid">
224
+            <div class="span6">
225
+              Level 2
226
+            </div>
227
+            <div class="span6">
228
+              Level 2
229
+            </div>
230
+          </div>
231
+        </div>
232
+      </div>
233
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"span12"</span><span class="tag">&gt;</span></li><li class="L2"><span class="pln">    Level 1 of column</span></li><li class="L3"><span class="pln">    </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"row"</span><span class="tag">&gt;</span></li><li class="L4"><span class="pln">      </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"span6"</span><span class="tag">&gt;</span></li><li class="L5"><span class="pln">        Level 2</span></li><li class="L6"><span class="pln">      </span><span class="tag">&lt;/div&gt;</span></li><li class="L7"><span class="pln">      </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"span6"</span><span class="tag">&gt;</span></li><li class="L8"><span class="pln">        Level 2</span></li><li class="L9"><span class="pln">      </span><span class="tag">&lt;/div&gt;</span></li><li class="L0"><span class="pln">    </span><span class="tag">&lt;/div&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;/div&gt;</span></li><li class="L2"><span class="tag">&lt;/div&gt;</span></li></ol></pre>
234
+    </div>
235
+  </div>
236
+  <br>
237
+
238
+  <div class="row">
239
+    <div class="span10">
240
+      <h2>Roll your own grid</h2>
241
+      <p>Built into Bootstrap are a handful of variables for customizing the default grid system. With a bit of customization, you can modify the size of columns, their gutters, and the container they reside in.</p>
242
+    </div>
243
+    <div class="span12">
244
+      <h3>Inside the grid</h3>
245
+      <p>The variables needed to modify the grid system currently all reside in <code>variables.less</code>.</p>
246
+      <table class="bordered-table zebra-striped">
247
+        <thead>
248
+          <tr>
249
+            <th>Variable</th>
250
+            <th>Default value</th>
251
+            <th>Description</th>
252
+          </tr>
253
+        </thead>
254
+        <tbody>
255
+          <tr>
256
+            <td><code>@gridColumns</code></td>
257
+            <td>16</td>
258
+            <td>The number of columns within the grid</td>
259
+          </tr>
260
+          <tr>
261
+            <td><code>@gridColumnWidth</code></td>
262
+            <td>40px</td>
263
+            <td>The width of each column within the grid</td>
264
+          </tr>
265
+          <tr>
266
+            <td><code>@gridGutterWidth</code></td>
267
+            <td>20px</td>
268
+            <td>The negative space between each column</td>
269
+          </tr>
270
+          <tr>
271
+            <td><code>@siteWidth</code></td>
272
+            <td><em>Computed sum of all columns and gutters</em></td>
273
+            <td>We use some basic match to count the number of columns and gutters and set the width of the <code>.fixed-container()</code> mixin.</td>
274
+          </tr>
275
+        </tbody>
276
+      </table>
277
+      <h3>Now to customize</h3>
278
+      <p>Modifying the grid means changing the three <code>@grid-*</code> variables and recompiling the Less files.</p>
279
+      <p>Bootstrap comes equipped to handle a grid system with up to 24 columns; the default is just 16. Here's how your grid variables would look customized to a 24-column grid.</p>
280
+      <pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="lit">@gridColumns</span><span class="pun">:</span><span class="pln">       </span><span class="lit">24</span><span class="pun">;</span></li><li class="L1"><span class="lit">@gridColumnWidth</span><span class="pun">:</span><span class="pln">   </span><span class="lit">20px</span><span class="pun">;</span></li><li class="L2"><span class="lit">@gridGutterWidth</span><span class="pun">:</span><span class="pln">   </span><span class="lit">20px</span><span class="pun">;</span></li></ol></pre>
281
+      <p>Once recompiled, you'll be set!</p>
282
+    </div>
283
+  </div>
284
+</section>
285
+
286
+
287
+
288
+<!-- Typography
289
+================================================== -->
290
+<section id="typography">
291
+  <div class="page-header">
292
+    <h1>Typography <small>Headings, paragraphs, lists, and other inline type elements</small></h1>
293
+  </div>
294
+
295
+  <!-- Headings & Paragraph Copy -->
296
+  <h2>Headings &amp; copy</h2>
297
+  <p>A standard typographic hierarchy for structuring your webpages.</p>
298
+  <p>The entire typographic grid is based on two Less variables in our variables.less file: <code>@basefont</code> and <code>@baseline</code>. The first is the base font-size used throughout and the second is the base line-height.</p>
299
+  <p>We use those variables, and some math, to create the margins, paddings, and line-heights of all our type and more.</p>
300
+  <div class="row">
301
+    <div class="span4">
302
+      <h1>h1. Heading 1</h1>
303
+      <h2>h2. Heading 2</h2>
304
+      <h3>h3. Heading 3</h3>
305
+      <h4>h4. Heading 4</h4>
306
+      <h5>h5. Heading 5</h5>
307
+      <h6>h6. Heading 6</h6>
308
+    </div>
309
+    <div class="span8">
310
+      <h3>Example paragraph</h3>
311
+      <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
312
+      <h1>Example heading <small>Has sub-heading…</small></h1>
313
+      <h5 class="tab">Tab heading<a href="#" class="pull-right">Test link</a></h1>
314
+      <code>&lt;h5 class="tab"&gt;</code>
315
+    </div>
316
+  </div>
317
+
318
+  <!-- Misc Elements -->
319
+  <div class="row">
320
+    <div class="span4">
321
+      <h2>Misc. elements</h2>
322
+      <p>Using emphasis, addresses, &amp; abbreviations</p>
323
+      <p>
324
+        <code>&lt;strong&gt;</code>
325
+        <code>&lt;em&gt;</code>
326
+        <code>&lt;address&gt;</code>
327
+        <code>&lt;abbr&gt;</code>
328
+      </p>
329
+    </div>
330
+    <div class="span12">
331
+      <h3>When to use</h3>
332
+      <p>Emphasis tags (<code>&lt;strong&gt;</code> and <code>&lt;em&gt;</code>) should be used to indicate additional importance or emphasis of a word or phrase relative to its surrounding copy. Use <code>&lt;strong&gt;</code> for importance and <code>&lt;em&gt;</code> for <em>stress</em> emphasis.</p>
333
+      <h3>Emphasis in a paragraph</h3>
334
+      <p><a href="#">Fusce dapibus</a>, <strong>tellus ac cursus commodo</strong>, <em>tortor mauris condimentum nibh</em>, ut fermentum massa justo sit amet risus. Maecenas faucibus mollis interdum. Nulla vitae elit libero, a pharetra augue.</p>
335
+      <p><strong>Note:</strong> It's still okay to use <code>&lt;b&gt;</code> and <code>&lt;i&gt;</code> tags in HTML5 and they don't have to be styled bold and italic, respectively (although if there is a more semantic element, use it). <code>&lt;b&gt;</code> is meant to highlight words or phrases without conveying additional importance, while <code>&lt;i&gt;</code> is mostly for voice, technical terms, etc.</p>
336
+      <h3>Addresses</h3>
337
+      <p>The <code>&lt;address&gt;</code> element is used for contact information for its nearest ancestor, or the entire body of work. Here are two examples of how it could be used:</p>
338
+
339
+      <div class="row">
340
+        <div class="span4">
341
+          <address>
342
+            <strong>Twitter, Inc.</strong><br>
343
+            795 Folsom Ave, Suite 600<br>
344
+            San Francisco, CA 94107<br>
345
+            <abbr title="Phone">P:</abbr> (123) 456-7890
346
+          </address>
347
+        </div>
348
+        <div class="span4">
349
+          <address>
350
+            <strong>Full Name</strong><br>
351
+            <a mailto="">first.last@gmail.com</a>
352
+          </address>
353
+        </div>
354
+      </div>
355
+
356
+      <p><strong>Note:</strong> Each line in an <code>&lt;address&gt;</code> must end with a line-break (<code>&lt;br /&gt;</code>) or be wrapped in a block-level tag (e.g., <code>&lt;p&gt;</code>) to properly structure the content.</p>
357
+      <h3>Abbreviations</h3>
358
+      <p>For abbreviations and acronyms, use the <code>&lt;abbr&gt;</code> tag (<code>&lt;acronym&gt;</code> is deprecated in <abbr title="HyperText Markup Langugage 5">HTML5</abbr>). Put the shorthand form within the tag and set a title for the complete name.</p>
359
+    </div>
360
+  </div><!-- /row -->
361
+
362
+  <!-- Blockquotes -->
363
+  <div class="row">
364
+    <div class="span4">
365
+      <h2>Blockquotes</h2>
366
+      <p>
367
+        <code>&lt;blockquote&gt;</code>
368
+        <code>&lt;p&gt;</code>
369
+        <code>&lt;small&gt;</code>
370
+      </p>
371
+    </div>
372
+    <div class="span12">
373
+      <h3>How to quote</h3>
374
+      <p>To include a blockquote, wrap <code>&lt;blockquote&gt;</code> around <code>&lt;p&gt;</code> and <code>&lt;small&gt;</code> tags. Use the <code>&lt;small&gt;</code> element to cite your source and you'll get an em dash <code>&amp;mdash;</code> before it.</p>
375
+      <blockquote>
376
+        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.</p>
377
+        <small>Dr. Julius Hibbert</small>
378
+      </blockquote>
379
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;blockquote&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;p&gt;</span><span class="pln">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.</span><span class="tag">&lt;/p&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;small&gt;</span><span class="pln">Dr. Julius Hibbert</span><span class="tag">&lt;/small&gt;</span></li><li class="L3"><span class="tag">&lt;/blockquote&gt;</span></li></ol></pre>
380
+    </div>
381
+  </div><!-- /row -->
382
+
383
+  <h2>Lists</h2>
384
+  <div class="row">
385
+    <div class="span4">
386
+      <h4>Unordered <code>&lt;ul&gt;</code></h4>
387
+      <ul>
388
+        <li>Lorem ipsum dolor sit amet</li>
389
+        <li>Consectetur adipiscing elit</li>
390
+        <li>Integer molestie lorem at massa</li>
391
+        <li>Facilisis in pretium nisl aliquet</li>
392
+        <li>Nulla volutpat aliquam velit
393
+          <ul>
394
+            <li>Phasellus iaculis neque</li>
395
+            <li>Purus sodales ultricies</li>
396
+            <li>Vestibulum laoreet porttitor sem</li>
397
+            <li>Ac tristique libero volutpat at</li>
398
+          </ul>
399
+        </li>
400
+        <li>Faucibus porta lacus fringilla vel</li>
401
+        <li>Aenean sit amet erat nunc</li>
402
+        <li>Eget porttitor lorem</li>
403
+      </ul>
404
+    </div>
405
+    <div class="span4">
406
+      <h4>Unstyled <code>&lt;ul.unstyled&gt;</code></h4>
407
+      <ul class="unstyled">
408
+        <li>Lorem ipsum dolor sit amet</li>
409
+        <li>Consectetur adipiscing elit</li>
410
+        <li>Integer molestie lorem at massa</li>
411
+        <li>Facilisis in pretium nisl aliquet</li>
412
+        <li>Nulla volutpat aliquam velit
413
+          <ul>
414
+            <li>Phasellus iaculis neque</li>
415
+            <li>Purus sodales ultricies</li>
416
+            <li>Vestibulum laoreet porttitor sem</li>
417
+            <li>Ac tristique libero volutpat at</li>
418
+          </ul>
419
+        </li>
420
+        <li>Faucibus porta lacus fringilla vel</li>
421
+        <li>Aenean sit amet erat nunc</li>
422
+        <li>Eget porttitor lorem</li>
423
+      </ul>
424
+    </div>
425
+    <div class="span4">
426
+      <h4>Ordered <code>&lt;ol&gt;</code></h4>
427
+      <ol>
428
+        <li>Lorem ipsum dolor sit amet</li>
429
+        <li>Consectetur adipiscing elit</li>
430
+        <li>Integer molestie lorem at massa</li>
431
+        <li>Facilisis in pretium nisl aliquet</li>
432
+        <li>Nulla volutpat aliquam velit</li>
433
+        <li>Faucibus porta lacus fringilla vel</li>
434
+        <li>Aenean sit amet erat nunc</li>
435
+        <li>Eget porttitor lorem</li>
436
+      </ol>
437
+    </div>
438
+    <div class="span4">
439
+      <h4>Description <code>dl</code></h4>
440
+      <dl>
441
+        <dt>Description lists</dt>
442
+        <dd>A description list is perfect for defining terms.</dd>
443
+        <dt>Euismod</dt>
444
+        <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd>
445
+        <dd>Donec id elit non mi porta gravida at eget metus.</dd>
446
+        <dt>Malesuada porta</dt>
447
+        <dd>Etiam porta sem malesuada magna mollis euismod.</dd>
448
+      </dl>
449
+    </div>
450
+  </div><!-- /row -->
451
+
452
+
453
+
454
+
455
+
456
+  <!-- Code -->
457
+  <div class="row">
458
+    <div class="span4">
459
+      <h2>Code</h2>
460
+      <p>
461
+        <code>&lt;code&gt;</code>
462
+        <code>&lt;pre&gt;</code>
463
+      </p>
464
+      <p>Pimp your code in style with two simple tags. For even more awesomeness through javascript, drop in Google's code prettify library and you're set.</p>
465
+    </div>
466
+    <div class="span12">
467
+      <h3>Presenting code</h3>
468
+      <p>Code, blocks of or just snippets inline, can be displayed with style just by wrapping in the right tag. For blocks of code spanning multiple lines, use the <code>&lt;pre&gt;</code> element. For inline code, use the <code>&lt;code&gt;</code> element.</p>
469
+      <table class="bordered-table zebra-striped">
470
+        <thead>
471
+          <tr>
472
+            <th style="width: 190px;">Element</th>
473
+            <th>Result</th>
474
+          </tr>
475
+        </thead>
476
+        <tbody>
477
+          <tr>
478
+            <td><code>&lt;code&gt;</code></td>
479
+            <td>In a line of text like this, your wrapped code will look like this <code>&lt;html&gt;</code> element.</td>
480
+          </tr>
481
+          <tr>
482
+            <td><code>&lt;pre&gt;</code></td>
483
+            <td>
484
+<pre>&lt;div&gt;
485
+  &lt;h1&gt;Heading&lt;/h1&gt;
486
+  &lt;p&gt;Something right here...&lt;/p&gt;
487
+&lt;/div&gt;</pre>
488
+              <p><strong>Note:</strong> Be sure to keep code within <code>&lt;pre&gt;</code> tags as close to the left as possible; it will render all tabs.</p>
489
+            </td>
490
+          </tr>
491
+          <tr>
492
+            <td><code>&lt;pre class="prettyprint"&gt;</code></td>
493
+            <td>
494
+              <p>Using the google-code-prettify library, your blocks of code get a slightly different visual style and automatic syntax highlighting.</p>
495
+<pre class="prettyprint"><span class="tag">&lt;div&gt;</span><span class="pln">
496
+  </span><span class="tag">&lt;h1&gt;</span><span class="pln">Heading</span><span class="tag">&lt;/h1&gt;</span><span class="pln">
497
+  </span><span class="tag">&lt;p&gt;</span><span class="pln">Something right here...</span><span class="tag">&lt;/p&gt;</span><span class="pln">
498
+</span><span class="tag">&lt;/div&gt;</span></pre>
499
+              <p><a href="http://code.google.com/p/google-code-prettify/">Download google-code-prettify</a> and view the readme for <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html">how to use</a>.</p>
500
+            </td>
501
+          </tr>
502
+        </tbody>
503
+      </table>
504
+    </div>
505
+  </div><!-- /row -->
506
+
507
+  <!-- Labels -->
508
+  <div class="row">
509
+    <div class="span4">
510
+      <h2>Inline labels</h2>
511
+      <p>
512
+        <code>&lt;span class="label"&gt;</code>
513
+      </p>
514
+      <p>Call attention to or flag any phrase in your body text.</p>
515
+    </div>
516
+    <div class="span12">
517
+      <h3>Label anything</h3>
518
+      <p>Ever needed one of those fancy <span class="label success">New!</span> or <span class="label important">Important</span> flags when writing code? Well, now you have them. Here's what's included by default:</p>
519
+      <table class="bordered-table zebra-striped">
520
+        <thead>
521
+          <tr>
522
+            <th style="width: 50%;">Label</th>
523
+            <th>Result</th>
524
+          </tr>
525
+        </thead>
526
+        <tbody>
527
+          <tr>
528
+            <td>
529
+              <code>&lt;span class="label"&gt;Default&lt;/span&gt;</code>
530
+            </td>
531
+            <td>
532
+              <span class="label">Default</span>
533
+            </td>
534
+          </tr>
535
+          <tr>
536
+            <td>
537
+              <code>&lt;span class="label success"&gt;New&lt;/span&gt;</code>
538
+            </td>
539
+            <td>
540
+              <span class="label success">New</span>
541
+            </td>
542
+          </tr>
543
+          <tr>
544
+            <td>
545
+              <code>&lt;span class="label warning"&gt;Warning&lt;/span&gt;</code>
546
+            </td>
547
+            <td>
548
+              <span class="label warning">Warning</span>
549
+            </td>
550
+          </tr>
551
+          <tr>
552
+            <td>
553
+              <code>&lt;span class="label important"&gt;Important&lt;/span&gt;</code>
554
+            </td>
555
+            <td>
556
+              <span class="label important">Important</span>
557
+            </td>
558
+          </tr>
559
+          <tr>
560
+            <td>
561
+              <code>&lt;span class="label notice"&gt;Notice&lt;/span&gt;</code>
562
+            </td>
563
+            <td>
564
+              <span class="label notice">Notice</span>
565
+            </td>
566
+          </tr>
567
+          <tr>
568
+            <td>
569
+              <code>Some Text&lt;span class="label num"&gt;Numeric Indication&lt;/span&gt;</code>
570
+            </td>
571
+            <td>
572
+              Some Text<span class="label num">13</span>
573
+            </td>
574
+          </tr>
575
+        </tbody>
576
+      </table>
577
+    </div>
578
+  </div><!-- /row -->
579
+
580
+</section>
581
+
582
+
583
+
584
+<!-- Media
585
+================================================== -->
586
+<section id="media">
587
+  <div class="page-header">
588
+    <h1>Media <small>Displaying images and videos</small></h1>
589
+  </div>
590
+  <!-- Table structure -->
591
+  <h2>Media grid</h2>
592
+  <p>Display thumbnails of varying sizes on pages with a low HTML footprint and minimal styles.</p>
593
+  <div class="row">
594
+    <div class="span12">
595
+      <h3>Example thumbnails</h3>
596
+      <p>Thumbnails in the <code>.media-grid</code> can be any size, but they work best when mapped directly to the built-in Bootstrap grid system. Image widths like 90, 210, and 330 combine with a few pixels of padding to equal the <code>.span2</code>, <code>.span4</code>, and <code>.span6</code> column sizes.</p>
597
+      <h4>Large</h4>
598
+      <ul class="media-grid">
599
+        <li>
600
+          <a href="#">
601
+            <img class="thumbnail" src="http://placehold.it/360x200" alt="">
602
+          </a>
603
+        </li>
604
+        <li>
605
+          <a href="#">
606
+            <img class="thumbnail" src="http://placehold.it/360x200" alt="">
607
+          </a>
608
+        </li>
609
+      </ul>
610
+      <h4>Medium</h4>
611
+      <ul class="media-grid">
612
+        <li>
613
+          <a href="#">
614
+            <img class="thumbnail" src="http://placehold.it/165x140" alt="">
615
+          </a>
616
+        </li>
617
+        <li>
618
+          <a href="#">
619
+            <img class="thumbnail" src="http://placehold.it/165x140" alt="">
620
+          </a>
621
+        </li>
622
+        <li>
623
+          <a href="#">
624
+            <img class="thumbnail" src="http://placehold.it/165x140" alt="">
625
+          </a>
626
+        </li>
627
+        <li>
628
+          <a href="#">
629
+            <img class="thumbnail" src="http://placehold.it/165x140" alt="">
630
+          </a>
631
+        </li>
632
+        <li>
633
+          <a href="#">
634
+            <img class="thumbnail" src="http://placehold.it/165x140" alt="">
635
+          </a>
636
+        </li>
637
+      </ul>
638
+      <h4>Small</h4>
639
+      <ul class="media-grid">
640
+        <li>
641
+          <a href="#">
642
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
643
+          </a>
644
+        </li>
645
+        <li>
646
+          <a href="#">
647
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
648
+          </a>
649
+        </li>
650
+        <li>
651
+          <a href="#">
652
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
653
+          </a>
654
+        </li>
655
+        <li>
656
+          <a href="#">
657
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
658
+          </a>
659
+        </li>
660
+        <li>
661
+          <a href="#">
662
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
663
+          </a>
664
+        </li>
665
+        <li>
666
+          <a href="#">
667
+            <img class="thumbnail" src="http://placehold.it/100x80" alt="">
668
+          </a>
669
+        </li>
670
+      </ul>
671
+      <h4>Coding them</h4>
672
+      <p>Media grids are easy to use and rather simple on the markup side. Their dimensions are purely based on the size of the images included.</p>
673
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"media-grid"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;li&gt;</span></li><li class="L2"><span class="pln">    </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span></li><li class="L3"><span class="pln">      </span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"thumbnail"</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"http://placehold.it/330x230"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span></li><li class="L4"><span class="pln">    </span><span class="tag">&lt;/a&gt;</span></li><li class="L5"><span class="pln">  </span><span class="tag">&lt;/li&gt;</span></li><li class="L6"><span class="pln">  </span><span class="tag">&lt;li&gt;</span></li><li class="L7"><span class="pln">    </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span></li><li class="L8"><span class="pln">      </span><span class="tag">&lt;img</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"thumbnail"</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"http://placehold.it/330x230"</span><span class="pln"> </span><span class="atn">alt</span><span class="pun">=</span><span class="atv">""</span><span class="tag">&gt;</span></li><li class="L9"><span class="pln">    </span><span class="tag">&lt;/a&gt;</span></li><li class="L0"><span class="pln">  </span><span class="tag">&lt;/li&gt;</span></li><li class="L1"><span class="tag">&lt;/ul&gt;</span></li></ol></pre>
674
+    </div>
675
+  </div><!-- /row -->
676
+</section>
677
+
678
+
679
+
680
+<!-- Tables
681
+================================================== -->
682
+<section id="tables">
683
+  <div class="page-header">
684
+    <h1>Tables <small>For, you guessed it, tabular data</small></h1>
685
+  </div>
686
+  <!-- Table structure -->
687
+  <h2>Building tables</h2>
688
+  <p>
689
+    <code>&lt;table&gt;</code>
690
+    <code>&lt;thead&gt;</code>
691
+    <code>&lt;tbody&gt;</code>
692
+    <code>&lt;tr&gt;</code>
693
+    <code>&lt;th&gt;</code>
694
+    <code>&lt;td&gt;</code>
695
+    <code>&lt;colspan&gt;</code>
696
+    <code>&lt;caption&gt;</code>
697
+  </p>
698
+  <p>Tables are great—for a lot of things. Great tables, however, need a bit of markup love to be useful, scalable, and readable (at the code level). Here are a few tips to help.</p>
699
+  <p>Always wrap your column headers in a <code>&lt;thead&gt;</code> such that hierarchy is <code>&lt;thead&gt;</code> &gt; <code>&lt;tr&gt;</code> &gt; <code>&lt;th&gt;</code>.</p>
700
+  <p>Similar to the column headers, all your table’s body content should be wrapped in a <code>&lt;tbody&gt;</code> so your hierarchy is <code>&lt;tbody&gt;</code> &gt; <code>&lt;tr&gt;</code> &gt; <code>&lt;td&gt;</code>.</p>
701
+  <div class="row">
702
+    <div class="span12">
703
+      <h3>Example: Default table styles</h3>
704
+      <p>All tables will be automatically styled with only the essential borders to ensure readability and maintain structure. No need to add extra classes or attributes.</p>
705
+      <table>
706
+        <thead>
707
+          <tr>
708
+            <th>#</th>
709
+            <th>First Name</th>
710
+            <th>Last Name</th>
711
+            <th>Language</th>
712
+          </tr>
713
+        </thead>
714
+        <tbody>
715
+          <tr>
716
+            <td>1</td>
717
+            <td>Some</td>
718
+            <td>One</td>
719
+            <td>English</td>
720
+          </tr>
721
+          <tr>
722
+            <td>2</td>
723
+            <td>Joe</td>
724
+            <td>Sixpack</td>
725
+            <td>English</td>
726
+          </tr>
727
+          <tr>
728
+            <td>3</td>
729
+            <td>Stu</td>
730
+            <td>Dent</td>
731
+            <td>Code</td>
732
+          </tr>
733
+        </tbody>
734
+      </table>
735
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;table&gt;</span></li><li class="L1"><span class="pln">  ...</span></li><li class="L2"><span class="tag">&lt;/table&gt;</span></li></ol></pre>
736
+      <h3>Example: Condensed table</h3>
737
+      <p>For tables that require more data in tighter spaces, use the condensed flavor that cuts padding in half. It can also be used in conjunction with borders and zebra-stripes, just like the default table styles.</p>
738
+      <table class="condensed-table">
739
+        <thead>
740
+          <tr>
741
+            <th>#</th>
742
+            <th>First Name</th>
743
+            <th>Last Name</th>
744
+            <th>Language</th>
745
+          </tr>
746
+        </thead>
747
+        <tbody>
748
+          <tr>
749
+            <th>1</th>
750
+            <td>Some</td>
751
+            <td>One</td>
752
+            <td>English</td>
753
+          </tr>
754
+          <tr>
755
+            <th>2</th>
756
+            <td>Joe</td>
757
+            <td>Sixpack</td>
758
+            <td>English</td>
759
+          </tr>
760
+          <tr>
761
+            <th>3</th>
762
+            <td>Stu</td>
763
+            <td>Dent</td>
764
+            <td>Code</td>
765
+          </tr>
766
+        </tbody>
767
+      </table>
768
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"condensed-table"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  ...</span></li><li class="L2"><span class="tag">&lt;/table&gt;</span></li></ol></pre>
769
+      <h3>Example: Bordered table</h3>
770
+      <p>Make your tables look just a wee bit sleeker by rounding their corners and adding borders on all sides.</p>
771
+      <table class="bordered-table">
772
+        <thead>
773
+          <tr>
774
+            <th>#</th>
775
+            <th>First Name</th>
776
+            <th>Last Name</th>
777
+            <th>Language</th>
778
+          </tr>
779
+        </thead>
780
+        <tbody>
781
+          <tr>
782
+            <th>1</th>
783
+            <td>Some</td>
784
+            <td>One</td>
785
+            <td>English</td>
786
+          </tr>
787
+          <tr>
788
+            <th>2</th>
789
+            <td>Joe</td>
790
+            <td>Sixpack</td>
791
+            <td>English</td>
792
+          </tr>
793
+          <tr>
794
+            <th>3</th>
795
+            <td>Stu</td>
796
+            <td>Dent</td>
797
+            <td>Code</td>
798
+          </tr>
799
+        </tbody>
800
+      </table>
801
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"bordered-table"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  ...</span></li><li class="L2"><span class="tag">&lt;/table&gt;</span></li></ol></pre>
802
+      <h3>Example: Zebra-striped</h3>
803
+      <p>Get a little fancy with your tables by adding zebra-striping—just add the <code>.zebra-striped</code> class.</p>
804
+      <table class="bordered-table zebra-striped">
805
+        <thead>
806
+          <tr>
807
+            <th>#</th>
808
+            <th>First Name</th>
809
+            <th>Last Name</th>
810
+            <th>Language</th>
811
+          </tr>
812
+        </thead>
813
+        <tbody>
814
+          <tr>
815
+            <td>1</td>
816
+            <td>Some</td>
817
+            <td>One</td>
818
+            <td>English</td>
819
+          </tr>
820
+          <tr>
821
+            <td>2</td>
822
+            <td>Joe</td>
823
+            <td>Sixpack</td>
824
+            <td>English</td>
825
+          </tr>
826
+          <tr>
827
+            <td>3</td>
828
+            <td>Stu</td>
829
+            <td>Dent</td>
830
+            <td>Code</td>
831
+          </tr>
832
+          <tr>
833
+            <td colspan="4">
834
+              span 4 columns
835
+            </td>
836
+          </tr>
837
+          <tr>
838
+            <td colspan="2">
839
+              span 2 columns
840
+            </td>
841
+            <td colspan="2">
842
+              span 2 columns
843
+            </td>
844
+          </tr>
845
+        </tbody>
846
+      </table>
847
+      <p><strong>Note:</strong> Zebra-striping is a progressive enhancement not available for older browsers like IE8 and below.</p>
848
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"zebra-striped"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  ...</span></li><li class="L2"><span class="tag">&lt;/table&gt;</span></li></ol></pre>
849
+      <h3>Example: Zebra-striped w/ TableSorter.js</h3>
850
+      <p>Taking the previous example, we improve the usefulness of our tables by providing sorting functionality via <a href="http://jquery.com">jQuery</a> and the <a href="http://tablesorter.com/docs/">Tablesorter</a> plugin. <strong>Click any column’s header to change the sort.</strong></p>
851
+      <table class="zebra-striped" id="sortTableExample">
852
+        <thead>
853
+          <tr>
854
+            <th class="header">#</th>
855
+            <th class="yellow header headerSortDown">First Name</th>
856
+            <th class="blue header">Last Name</th>
857
+            <th class="green header">Language</th>
858
+          </tr>
859
+        </thead>
860
+        <tbody>
861
+          
862
+          
863
+          
864
+        <tr>
865
+            <td>2</td>
866
+            <td>Joe</td>
867
+            <td>Sixpack</td>
868
+            <td>English</td>
869
+          </tr><tr>
870
+            <td>3</td>
871
+            <td>Stu</td>
872
+            <td>Dent</td>
873
+            <td>Code</td>
874
+          </tr><tr>
875
+            <td>1</td>
876
+            <td>Your</td>
877
+            <td>One</td>
878
+            <td>English</td>
879
+          </tr></tbody>
880
+      </table>
881
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;script</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"js/jquery/jquery.tablesorter.min.js"</span><span class="tag">&gt;&lt;/script&gt;</span></li><li class="L1"><span class="tag">&lt;script</span><span class="pln"> </span><span class="tag">&gt;</span></li><li class="L2"><span class="pln">  $</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span></li><li class="L3"><span class="pln">    $</span><span class="pun">(</span><span class="str">"table#sortTableExample"</span><span class="pun">).</span><span class="pln">tablesorter</span><span class="pun">({</span><span class="pln"> sortList</span><span class="pun">:</span><span class="pln"> </span><span class="pun">[[</span><span class="lit">1</span><span class="pun">,</span><span class="lit">0</span><span class="pun">]]</span><span class="pln"> </span><span class="pun">});</span></li><li class="L4"><span class="pln">  </span><span class="pun">});</span></li><li class="L5"><span class="tag">&lt;/script&gt;</span></li><li class="L6"><span class="tag">&lt;table</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"zebra-striped"</span><span class="tag">&gt;</span></li><li class="L7"><span class="pln">  ...</span></li><li class="L8"><span class="tag">&lt;/table&gt;</span></li></ol></pre>
882
+    </div>
883
+  </div><!-- /row -->
884
+</section>
885
+
886
+
887
+
888
+<!-- Forms
889
+================================================== -->
890
+<section id="forms">
891
+  <div class="page-header">
892
+    <h1>Forms</h1>
893
+  </div>
894
+
895
+  <h2>Default styles</h2>
896
+  <p>All forms are given default styles to present them in a readable and scalable way. Styles are provided for text inputs, select lists, textareas, radio buttons and checkboxes, and buttons.</p>
897
+  <div class="row">
898
+    <div class="span12">
899
+      <form>
900
+        <fieldset>
901
+          <legend>Example form legend</legend>
902
+          <div class="clearfix">
903
+            <label for="xlInput">X-Large input</label>
904
+            <div class="input">
905
+              <input class="xlarge" id="xlInput" name="xlInput" size="30" type="text">
906
+            </div>
907
+          </div><!-- /clearfix -->
908
+          <div class="clearfix">
909
+            <label for="normalSelect">Select</label>
910
+            <div class="input">
911
+              <select name="normalSelect" id="normalSelect">
912
+                <option>1</option>
913
+                <option>2</option>
914
+                <option>3</option>
915
+                <option>4</option>
916
+                <option>5</option>
917
+              </select>
918
+            </div>
919
+          </div><!-- /clearfix -->
920
+          <div class="clearfix">
921
+            <label for="mediumSelect">Select</label>
922
+            <div class="input">
923
+              <select class="medium" name="mediumSelect" id="mediumSelect">
924
+                <option>1</option>
925
+                <option>2</option>
926
+                <option>3</option>
927
+                <option>4</option>
928
+                <option>5</option>
929
+              </select>
930
+            </div>
931
+          </div><!-- /clearfix -->
932
+          <div class="clearfix">
933
+            <label for="multiSelect">Multiple select</label>
934
+            <div class="input">
935
+              <select class="medium" size="5" multiple="multiple" name="multiSelect" id="multiSelect">
936
+                <option>1</option>
937
+                <option>2</option>
938
+                <option>3</option>
939
+                <option>4</option>
940
+                <option>5</option>
941
+              </select>
942
+            </div>
943
+          </div><!-- /clearfix -->
944
+          <div class="clearfix">
945
+            <label>Uneditable input</label>
946
+            <div class="input">
947
+              <span class="uneditable-input">Some value here</span>
948
+            </div>
949
+          </div><!-- /clearfix -->
950
+          <div class="clearfix">
951
+            <label for="disabledInput">Disabled input</label>
952
+            <div class="input">
953
+              <input class="xlarge disabled" id="disabledInput" name="disabledInput" size="30" type="text" placeholder="Disabled input here… carry on." disabled="">
954
+            </div>
955
+          </div><!-- /clearfix -->
956
+          <div class="clearfix">
957
+            <label for="disabledInput">Disabled textarea</label>
958
+            <div class="input">
959
+              <textarea class="xxlarge" name="textarea" id="textarea" rows="3" disabled=""></textarea>
960
+            </div>
961
+          </div><!-- /clearfix -->
962
+          <div class="clearfix error">
963
+            <label for="errorInput">Input with error</label>
964
+            <div class="input">
965
+              <input class="xlarge error" id="errorInput" name="errorInput" size="30" type="text">
966
+              <span class="help-inline">Small snippet of help text</span>
967
+            </div>
968
+          </div><!-- /clearfix -->
969
+          <div class="clearfix success">
970
+            <label for="successInput">Input with success</label>
971
+            <div class="input">
972
+              <input class="xlarge error" id="successInput" name="successInput" size="30" type="text">
973
+              <span class="help-inline">Success!</span>
974
+            </div>
975
+          </div><!-- /clearfix -->
976
+          <div class="clearfix warning">
977
+            <label for="warningInput">Input with warning</label>
978
+            <div class="input">
979
+              <input class="xlarge error" id="warningInput" name="warningInput" size="30" type="text">
980
+              <span class="help-inline">Ruh roh!</span>
981
+            </div>
982
+          </div><!-- /clearfix -->
983
+        </fieldset>
984
+        <fieldset>
985
+          <legend>Example form legend</legend>
986
+          <div class="clearfix">
987
+            <label for="prependedInput">Prepended text</label>
988
+            <div class="input">
989
+              <div class="input-prepend">
990
+                <span class="add-on">@</span>
991
+                <input class="medium" id="prependedInput" name="prependedInput" size="16" type="text">
992
+              </div>
993
+              <span class="help-block">Here's some help text</span>
994
+            </div>
995
+          </div><!-- /clearfix -->
996
+          <div class="clearfix">
997
+            <label for="prependedInput2">Prepended checkbox</label>
998
+            <div class="input">
999
+              <div class="input-prepend">
1000
+                <label class="add-on"><input type="checkbox" name="" id="" value=""></label>
1001
+                <input class="mini" id="prependedInput2" name="prependedInput2" size="16" type="text">
1002
+              </div>
1003
+            </div>
1004
+          </div><!-- /clearfix -->
1005
+          <div class="clearfix">
1006
+            <label for="appendedInput">Appended checkbox</label>
1007
+            <div class="input">
1008
+              <div class="input-append">
1009
+                <input class="mini" id="appendedInput" name="appendedInput" size="16" type="text">
1010
+                <label class="add-on active"><input type="checkbox" name="" id="" value="" checked="checked"></label>
1011
+              </div>
1012
+            </div>
1013
+          </div><!-- /clearfix -->
1014
+          <div class="clearfix">
1015
+            <label for="fileInput">File input</label>
1016
+            <div class="input">
1017
+              <input class="input-file" id="fileInput" name="fileInput" type="file">
1018
+            </div>
1019
+          </div><!-- /clearfix -->
1020
+        </fieldset>
1021
+        <fieldset>
1022
+          <legend>Example form legend</legend>
1023
+          <div class="clearfix">
1024
+            <label id="optionsCheckboxes">List of options</label>
1025
+            <div class="input">
1026
+              <ul class="inputs-list">
1027
+                <li>
1028
+                  <label>
1029
+                    <input type="checkbox" name="optionsCheckboxes" value="option1">
1030
+                    <span>Option one is this and that—be sure to include why it’s great</span>
1031
+                  </label>
1032
+                </li>
1033
+                <li>
1034
+                  <label>
1035
+                    <input type="checkbox" name="optionsCheckboxes" value="option2">
1036
+                    <span>Option two can also be checked and included in form results</span>
1037
+                  </label>
1038
+                </li>
1039
+                <li>
1040
+                  <label>
1041
+                    <input type="checkbox" name="optionsCheckboxes" value="option2">
1042
+                    <span>Option three can—yes, you guessed it—also be checked and included in form results. Let's make it super long so that everyone can see how it wraps, too.</span>
1043
+                  </label>
1044
+                </li>
1045
+                <li>
1046
+                  <label class="disabled">
1047
+                    <input type="checkbox" name="optionsCheckboxes" value="option2" disabled="">
1048
+                    <span>Option four cannot be checked as it is disabled.</span>
1049
+                  </label>
1050
+                </li>
1051
+              </ul>
1052
+              <span class="help-block">
1053
+                <strong>Note:</strong> Labels surround all the options for much larger click areas and a more usable form.
1054
+              </span>
1055
+            </div>
1056
+          </div><!-- /clearfix -->
1057
+          <div class="clearfix">
1058
+            <label>Date range</label>
1059
+            <div class="input">
1060
+              <div class="inline-inputs">
1061
+                <input class="small" type="text" value="May 1, 2011">
1062
+                <input class="mini" type="text" value="12:00am">
1063
+                to
1064
+                <input class="small" type="text" value="May 8, 2011">
1065
+                <input class="mini" type="text" value="11:59pm">
1066
+                <span class="help-block">All times are shown as Pacific Standard Time (GMT -08:00).</span>
1067
+              </div>
1068
+            </div>
1069
+          </div><!-- /clearfix -->
1070
+          <div class="clearfix">
1071
+            <label for="textarea">Textarea</label>
1072
+            <div class="input">
1073
+              <textarea class="xxlarge" id="textarea2" name="textarea2" rows="3"></textarea>
1074
+              <span class="help-block">
1075
+                Block of help text to describe the field above if need be.
1076
+              </span>
1077
+            </div>
1078
+          </div><!-- /clearfix -->
1079
+          <div class="clearfix">
1080
+            <label id="optionsRadio">List of options</label>
1081
+            <div class="input">
1082
+              <ul class="inputs-list">
1083
+                <li>
1084
+                  <label>
1085
+                    <input type="radio" checked="" name="optionsRadios" value="option1">
1086
+                    <span>Option one is this and that—be sure to include why it’s great</span>
1087
+                  </label>
1088
+                </li>
1089
+                <li>
1090
+                  <label>
1091
+                    <input type="radio" name="optionsRadios" value="option2">
1092
+                    <span>Option two is something else and selecting it will deselect option 1</span>
1093
+                  </label>
1094
+                </li>
1095
+              </ul>
1096
+            </div>
1097
+          </div><!-- /clearfix -->
1098
+          <div class="actions">
1099
+            <input type="submit" class="btn primary" value="Save changes">&nbsp;<button type="reset" class="btn">Cancel</button>
1100
+          </div>
1101
+        </fieldset>
1102
+      </form>
1103
+    </div>
1104
+  </div><!-- /row -->
1105
+
1106
+  <br>
1107
+
1108
+  <div class="row">
1109
+    <div class="span4">
1110
+      <h2>Stacked forms</h2>
1111
+      <p>Add <code>.form-stacked</code> to your form’s HTML and you’ll have labels on top of their fields instead of to their left. This works great if your forms are short or you have two columns of inputs for heavier forms.</p>
1112
+    </div>
1113
+    <div class="span12">
1114
+      <form action="" class="form-stacked">
1115
+        <fieldset>
1116
+          <legend>Example form legend</legend>
1117
+          <div class="clearfix">
1118
+            <label for="xlInput3">X-Large input</label>
1119
+            <div class="input">
1120
+              <input class="xlarge" id="xlInput3" name="xlInput3" size="30" type="text">
1121
+            </div>
1122
+          </div><!-- /clearfix -->
1123
+          <div class="clearfix">
1124
+            <label for="stackedSelect">Select</label>
1125
+            <div class="input">
1126
+              <select name="stackedSelect" id="stackedSelect">
1127
+                <option>1</option>
1128
+                <option>2</option>
1129
+                <option>3</option>
1130
+                <option>4</option>
1131
+                <option>5</option>
1132
+              </select>
1133
+            </div>
1134
+          </div><!-- /clearfix -->
1135
+        </fieldset>
1136
+        <fieldset>
1137
+          <legend>Example form legend</legend>
1138
+          <div class="clearfix error">
1139
+            <label for="xlInput4">X-Large input</label>
1140
+            <div class="input">
1141
+              <input class="xlarge error" id="xlInput4" name="xlInput4" size="30" type="text">
1142
+              <span class="help-inline">Small snippet of help text</span>
1143
+            </div>
1144
+          </div><!-- /clearfix -->
1145
+          <div class="clearfix">
1146
+            <label id="optionsCheckboxes">List of options</label>
1147
+            <div class="input">
1148
+              <ul class="inputs-list">
1149
+                <li>
1150
+                  <label>
1151
+                    <input type="checkbox" name="optionsCheckboxes" value="option1">
1152
+                    <span>Option one is this and that—be sure to include why it’s great</span>
1153
+                  </label>
1154
+                </li>
1155
+                <li>
1156
+                  <label>
1157
+                    <input type="checkbox" name="optionsCheckboxes" value="option2">
1158
+                    <span>Option two can also be checked and included in form results</span>
1159
+                  </label>
1160
+                </li>
1161
+              </ul>
1162
+              <span class="help-block">
1163
+                <strong>Note:</strong> Labels surround all the options for much larger click areas and a more usable form.
1164
+              </span>
1165
+            </div>
1166
+          </div><!-- /clearfix -->
1167
+        </fieldset>
1168
+        <div class="actions">
1169
+          <button type="submit" class="btn primary">Save changes</button>&nbsp;<button type="reset" class="btn">Cancel</button>
1170
+        </div>
1171
+      </form>
1172
+    </div>
1173
+  </div><!-- /row -->
1174
+
1175
+  <div class="row">
1176
+    <div class="span4">
1177
+      <h2>Form field sizes</h2>
1178
+      <p>Customize any form <code>input</code>, <code>select</code>, or <code>textarea</code> width by adding just a few classes to your markup.</p>
1179
+      <p>As of v1.3.0, we have added the grid-based sizing classes for form elements. <strong>Please use the these over the existing <code>.mini</code>, <code>.small</code>, etc classes.</strong></p>
1180
+    </div>
1181
+    <div class="span12">
1182
+      <form action="">
1183
+        <div class="clearfix"><input class="span2" id="" name="" type="text" placeholder=".span2"></div>
1184
+        <div class="clearfix"><input class="span3" id="" name="" type="text" placeholder=".span3"></div>
1185
+        <div class="clearfix"><input class="span4" id="" name="" type="text" placeholder=".span4"></div>
1186
+        <div class="clearfix"><input class="span5" id="" name="" type="text" placeholder=".span5"></div>
1187
+        <div class="clearfix"><input class="span6" id="" name="" type="text" placeholder=".span6"></div>
1188
+        <div class="clearfix"><input class="span7" id="" name="" type="text" placeholder=".span7"></div>
1189
+        <div class="clearfix"><input class="span8" id="" name="" type="text" placeholder=".span8"></div>
1190
+        <div class="clearfix"><input class="span9" id="" name="" type="text" placeholder=".span9"></div>
1191
+        <div class="clearfix"><input class="span10" id="" name="" type="text" placeholder=".span10"></div>
1192
+        <div class="clearfix"><input class="span11" id="" name="" type="text" placeholder=".span11"></div>
1193
+        <div class="clearfix"><input class="span12" id="" name="" type="text" placeholder=".span12"></div>
1194
+      </form>
1195
+    </div>
1196
+  </div>
1197
+
1198
+  <div class="row">
1199
+    <div class="span4">
1200
+      <h2>Buttons</h2>
1201
+      <p>As a convention, buttons are used for actions while links are used for objects. For instance, "Download" could be a button and "recent activity" could be a link.</p>
1202
+      <p>All buttons default to a light gray style, but a number of functional classes can be applied for different color styles. These classes include a blue <code>.primary</code> class, a light-blue <code>.info</code> class, a green <code>.success</code> class, and a red <code>.danger</code> class.</p>
1203
+    </div>
1204
+    <div class="span12">
1205
+      <h3>Example buttons</h3>
1206
+      <p>Button styles can be applied to anything with the <code>.btn</code> applied. Typically you’ll want to apply these to only <code>&lt;a&gt;</code>, <code>&lt;button&gt;</code>, and select <code>&lt;input&gt;</code> elements. Here’s how it looks:</p>
1207
+      <div class="well" style="padding: 14px 19px;">
1208
+        <button class="btn primary">Primary</button>&nbsp;<button class="btn">Default</button>&nbsp;<button class="btn info">Info</button>&nbsp;<button class="btn success">Success</button>&nbsp;<button class="btn danger">Danger</button>
1209
+      </div>
1210
+      <h3>Alternate sizes</h3>
1211
+      <p>Fancy larger or smaller buttons? Have at it!</p>
1212
+      <div class="well">
1213
+        <a href="#" class="btn large primary">Primary action</a>
1214
+        <a href="#" class="btn large">Action</a>
1215
+      </div>
1216
+      <div class="well" style="padding: 16px 19px;">
1217
+        <a href="#" class="btn small primary">Primary action</a>
1218
+        <a href="#" class="btn small">Action</a>
1219
+      </div>
1220
+      <h3>Disabled state</h3>
1221
+      <p>For buttons that are not active or are disabled by the app for one reason or another, use the disabled state. That’s <code>.disabled</code> for links and <code>:disabled</code> for <code>&lt;button&gt;</code> elements.</p>
1222
+      <h4>Links</h4>
1223
+      <div class="well">
1224
+        <a href="#" class="btn large primary disabled">Primary action</a>
1225
+        <a href="#" class="btn large disabled">Action</a>
1226
+      </div>
1227
+      <h4>Buttons</h4>
1228
+      <div class="well">
1229
+        <button class="btn large primary disabled" disabled="disabled">Primary action</button>&nbsp;<button class="btn large" disabled="">Action</button>
1230
+      </div>
1231
+    </div>
1232
+  </div><!-- /row -->
1233
+</section>
1234
+
1235
+
1236
+
1237
+<!-- Navigation
1238
+================================================== -->
1239
+<section id="navigation">
1240
+  <div class="page-header">
1241
+    <h1>Navigation</h1>
1242
+  </div>
1243
+
1244
+  <h2>Tabs and pills</h2>
1245
+  <p>Create simple secondary navigation with a <code>&lt;ul&gt;</code>. Swap between tabs or pills by adding the appropriate class.</p>
1246
+  <p>Great for sub-sections of content like our account settings pages and user timelines for toggling between pages of like content. Available in tabbed or pill styles.</p>
1247
+  <div class="row">
1248
+    <div class="span12">
1249
+      <h3>Basic tabs example</h3>
1250
+      <p>Tabs can be used as regular navigation (loading external pages in the same tab) or as tabbable content areas for swapping out panes of content. We have a <a href="./javascript.html#tabs">tabs plugin</a> that can be used to integrate the latter.</p>
1251
+      <ul class="tabs">
1252
+        <li class="active"><a href="#">Home</a></li>
1253
+        <li><a href="#">Profile</a></li>
1254
+        <li><a href="#">Messages</a></li>
1255
+        <li><a href="#">Settings</a></li>
1256
+        <li><a href="#">Contact</a></li>
1257
+        <li class="dropdown" data-dropdown="dropdown">
1258
+          <a href="#" class="dropdown-toggle">Dropdown</a>
1259
+          <ul class="dropdown-menu">
1260
+            <li><a href="#">Secondary link</a></li>
1261
+            <li><a href="#">Something else here</a></li>
1262
+            <li class="divider"></li>
1263
+            <li><a href="#">Another link</a></li>
1264
+          </ul>
1265
+        </li>
1266
+      </ul>
1267
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"tabs"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"active"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Home</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Profile</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L3"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Messages</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L4"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Settings</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L5"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Contact</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L6"><span class="tag">&lt;/ul&gt;</span></li></ol></pre>
1268
+      <h3>Basic pills example</h3>
1269
+      <ul class="pills">
1270
+        <li class="active"><a href="#">Home</a></li>
1271
+        <li><a href="#">Profile</a></li>
1272
+        <li><a href="#">Messages</a></li>
1273
+        <li><a href="#">Settings</a></li>
1274
+        <li><a href="#">Contact</a></li>
1275
+      </ul>
1276
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pills"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"active"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Home</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Profile</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L3"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Messages</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L4"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Settings</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L5"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Contact</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L6"><span class="tag">&lt;/ul&gt;</span></li></ol></pre>
1277
+    </div>
1278
+  </div><!-- /row -->
1279
+
1280
+  <!-- Breadcrumbs -->
1281
+  <div class="row">
1282
+    <div class="span4">
1283
+      <h2>Breadcrumbs</h2>
1284
+      <p>Breadcrumb navigation is used as a way to show users where they are within an app or a site, but not for primary navigation.</p>
1285
+    </div>
1286
+    <div class="span12">
1287
+      <ul class="breadcrumb">
1288
+        <li class="active">Home</li>
1289
+      </ul>
1290
+      <ul class="breadcrumb">
1291
+        <li><a href="#">Home</a> <span class="divider">&gt;</span></li>
1292
+        <li class="active">Middle page</li>
1293
+      </ul>
1294
+      <ul class="breadcrumb">
1295
+        <li><a href="#">Home</a> <span class="divider">&gt;</span></li>
1296
+        <li><a href="#">Middle page</a> <span class="divider">&gt;</span></li>
1297
+        <li class="active">Another one</li>
1298
+      </ul>
1299
+      <ul class="breadcrumb">
1300
+        <li><a href="#">Home</a> <span class="divider">&gt;</span></li>
1301
+        <li><a href="#">Middle page</a> <span class="divider">&gt;</span></li>
1302
+        <li><a href="#">Another one</a> <span class="divider">&gt;</span></li>
1303
+        <li class="active">You are here</li>
1304
+      </ul>
1305
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;ul</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"breadcrumb"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Home</span><span class="tag">&lt;/a&gt;</span><span class="pln"> </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"divider"</span><span class="tag">&gt;</span><span class="pln">/</span><span class="tag">&lt;/span&gt;&lt;/li&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Middle page</span><span class="tag">&lt;/a&gt;</span><span class="pln"> </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"divider"</span><span class="tag">&gt;</span><span class="pln">/</span><span class="tag">&lt;/span&gt;&lt;/li&gt;</span></li><li class="L3"><span class="pln">  </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Another one</span><span class="tag">&lt;/a&gt;</span><span class="pln"> </span><span class="tag">&lt;span</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"divider"</span><span class="tag">&gt;</span><span class="pln">/</span><span class="tag">&lt;/span&gt;&lt;/li&gt;</span></li><li class="L4"><span class="pln">  </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"active"</span><span class="tag">&gt;</span><span class="pln">You are here</span><span class="tag">&lt;/li&gt;</span></li><li class="L5"><span class="tag">&lt;/ul&gt;</span></li></ol></pre>
1306
+    </div>
1307
+  </div>
1308
+
1309
+  <!-- Pagination -->
1310
+  <div class="row">
1311
+    <div class="span4">
1312
+      <h2>Pagination</h2>
1313
+      <p>Ultra simplistic and minimally styled pagination inspired by Rdio. The large block is hard to miss, easily scalable, and provides large click areas.</p>
1314
+    </div>
1315
+    <div class="span12">
1316
+      <div class="pagination">
1317
+        <ul>
1318
+          <li class="prev disabled"><a href="#">? Previous</a></li>
1319
+          <li class="active"><a href="#">1</a></li>
1320
+          <li><a href="#">2</a></li>
1321
+          <li><a href="#">3</a></li>
1322
+          <li><a href="#">4</a></li>
1323
+          <li><a href="#">5</a></li>
1324
+          <li class="next"><a href="#">Next ?</a></li>
1325
+        </ul>
1326
+      </div>
1327
+      <div class="pagination">
1328
+        <ul>
1329
+          <li class="prev"><a href="#">? Previous</a></li>
1330
+          <li class="active"><a href="#">10</a></li>
1331
+          <li><a href="#">11</a></li>
1332
+          <li><a href="#">12</a></li>
1333
+          <li class="disabled"><a href="#">…</a></li>
1334
+          <li><a href="#">19</a></li>
1335
+          <li><a href="#">20</a></li>
1336
+          <li><a href="#">21</a></li>
1337
+          <li class="next"><a href="#">Next ?</a></li>
1338
+        </ul>
1339
+      </div>
1340
+      <div class="pagination">
1341
+        <ul>
1342
+          <li class="prev"><a href="#">? Previous</a></li>
1343
+          <li><a href="#">12</a></li>
1344
+          <li><a href="#">13</a></li>
1345
+          <li><a href="#">14</a></li>
1346
+          <li class="active"><a href="#">15</a></li>
1347
+          <li><a href="#">16</a></li>
1348
+          <li><a href="#">17</a></li>
1349
+          <li class="next"><a href="#">Next ?</a></li>
1350
+        </ul>
1351
+      </div>
1352
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"pagination"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;ul&gt;</span></li><li class="L2"><span class="pln">    </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"prev disabled"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">&amp;larr; Previous</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L3"><span class="pln">    </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"active"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">1</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L4"><span class="pln">    </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">2</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L5"><span class="pln">    </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">3</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L6"><span class="pln">    </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">4</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L7"><span class="pln">    </span><span class="tag">&lt;li&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">5</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L8"><span class="pln">    </span><span class="tag">&lt;li</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"next"</span><span class="tag">&gt;&lt;a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Next &amp;rarr;</span><span class="tag">&lt;/a&gt;&lt;/li&gt;</span></li><li class="L9"><span class="pln">  </span><span class="tag">&lt;/ul&gt;</span></li><li class="L0"><span class="tag">&lt;/div&gt;</span></li></ol></pre>
1353
+    </div>
1354
+  </div><!-- /row -->
1355
+
1356
+</section>
1357
+
1358
+
1359
+
1360
+<!-- Alerts & Messages
1361
+================================================== -->
1362
+<section id="alerts">
1363
+  <div class="page-header">
1364
+    <h1>Alerts &amp; Errors <small>Styles for success, warning, error, and info messages</small></h1>
1365
+  </div>
1366
+  <!-- Basic alert messages -->
1367
+  <h2>Basic alerts</h2>
1368
+  <p><code>.alert-message</code></p>
1369
+  <p>One-line messages for highlighting the failure, possible failure, or success of an action. Particularly useful for forms.</p>
1370
+  <p><a class="btn js-btn" href="./javascript.html#alerts">Get the javascript »</a></p>
1371
+  <div class="row">
1372
+    <div class="span12">
1373
+      <div class="alert-message warning">
1374
+        <a class="close" href="#">×</a>
1375
+        <p><strong>Holy guacamole!</strong> Best check yo self, you’re not <a href="#">looking too good</a>.</p>
1376
+      </div>
1377
+      <div class="alert-message error">
1378
+        <a class="close" href="#">×</a>
1379
+        <p><strong>Oh snap!</strong> Change this and that and <a href="#">try again</a>.</p>
1380
+      </div>
1381
+      <div class="alert-message success">
1382
+        <a class="close" href="#">×</a>
1383
+        <p><strong>Well done!</strong> You successfully <a href="#">read this</a> alert message.</p>
1384
+      </div>
1385
+      <div class="alert-message info">
1386
+        <a class="close" href="#">×</a>
1387
+        <p><strong>Heads up!</strong> This is an alert that needs your attention, but it’s not <a href="#">a huge priority</a> just yet.</p>
1388
+      </div>
1389
+
1390
+      <h4>Example code</h4>
1391
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"alert-message warning"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"close"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">×</span><span class="tag">&lt;/a&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;p&gt;&lt;strong&gt;</span><span class="pln">Holy guacamole!</span><span class="tag">&lt;/strong&gt;</span><span class="pln"> Best check yo self, you’re not looking too good.</span><span class="tag">&lt;/p&gt;</span></li><li class="L3"><span class="tag">&lt;/div&gt;</span></li></ol></pre>
1392
+    </div>
1393
+  </div><!-- /row -->
1394
+  <!-- Block messages -->
1395
+  <div class="row">
1396
+    <div class="span4">
1397
+      <h2>Block messages</h2>
1398
+      <p><code>.alert-message.block-message</code></p>
1399
+      <p>For messages that require a bit of explanation, we have paragraph style alerts. These are perfect for bubbling up longer error messages, warning a user of a pending action, or just presenting information for more emphasis on the page.</p>
1400
+      <p><a class="btn js-btn" href="./javascript.html#alerts">Get the javascript »</a></p>
1401
+    </div>
1402
+    <div class="span12">
1403
+      <div class="alert-message block-message warning">
1404
+        <a class="close" href="#">×</a>
1405
+        <p><strong>Holy guacamole! This is a warning!</strong> Best check yo self, you’re not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p>
1406
+        <div class="alert-actions">
1407
+          <a class="btn small" href="#">Take this action</a> <a class="btn small" href="#">Or do this</a>
1408
+        </div>
1409
+      </div>
1410
+      <div class="alert-message block-message error">
1411
+        <a class="close" href="#">×</a>
1412
+        <p><strong>Oh snap! You got an error!</strong> Change this and that and <a href="#">try again</a>.</p>
1413
+        <ul>
1414
+          <li>Duis mollis est non commodo luctus</li>
1415
+          <li>Nisi erat porttitor ligula</li>
1416
+          <li>Eget lacinia odio sem nec elit</li>
1417
+        </ul>
1418
+        <div class="alert-actions">
1419
+          <a class="btn small" href="#">Take this action</a> <a class="btn small" href="#">Or do this</a>
1420
+        </div>
1421
+      </div>
1422
+      <div class="alert-message block-message success">
1423
+        <a class="close" href="#">×</a>
1424
+        <p><strong>Well done!</strong> You successfully read this alert message. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas faucibus mollis interdum.</p>
1425
+        <div class="alert-actions">
1426
+          <a class="btn small" href="#">Take this action</a> <a class="btn small" href="#">Or do this</a>
1427
+        </div>
1428
+      </div>
1429
+      <div class="alert-message block-message info">
1430
+        <a class="close" href="#">×</a>
1431
+        <p><strong>Heads up!</strong> This is an alert that needs your attention, but it’s not a huge priority just yet.</p>
1432
+        <div class="alert-actions">
1433
+          <a class="btn small" href="#">Take this action</a> <a class="btn small" href="#">Or do this</a>
1434
+        </div>
1435
+      </div>
1436
+
1437
+      <h4>Example code</h4>
1438
+<pre class="prettyprint linenums"><ol class="linenums"><li class="L0"><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"alert-message block-message warning"</span><span class="tag">&gt;</span></li><li class="L1"><span class="pln">  </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"close"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">×</span><span class="tag">&lt;/a&gt;</span></li><li class="L2"><span class="pln">  </span><span class="tag">&lt;p&gt;&lt;strong&gt;</span><span class="pln">Holy guacamole! This is a warning!</span><span class="tag">&lt;/strong&gt;</span><span class="pln"> Best check yo self, you’re not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</span><span class="tag">&lt;/p&gt;</span></li><li class="L3"><span class="pln">  </span><span class="tag">&lt;div</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"alert-actions"</span><span class="tag">&gt;</span></li><li class="L4"><span class="pln">    </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"btn small"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Take this action</span><span class="tag">&lt;/a&gt;</span><span class="pln"> </span><span class="tag">&lt;a</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"btn small"</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"#"</span><span class="tag">&gt;</span><span class="pln">Or do this</span><span class="tag">&lt;/a&gt;</span></li><li class="L5"><span class="pln">  </span><span class="tag">&lt;/div&gt;</span></li><li class="L6"><span class="tag">&lt;/div&gt;</span></li></ol></pre>
1439
+    </div>
1440
+  </div><!-- /row -->
1441
+</section>
1442
+
1443
+
1444
+
1445
+<!-- Popovers
1446
+================================================== -->
1447
+<section id="popovers">
1448
+  <div class="page-header">
1449
+    <h1>Popovers <small>Components for displaying content in modals, tooltips, and popovers</small></h1>
1450
+  </div>
1451
+  <h2>Modals</h2>
1452
+  <p>Modals—dialogs or lightboxes—are great for contextual actions in situations where it’s important that the background context be maintained.</p>
1453
+  <p><a class="btn js-btn" href="./javascript.html#modal">Get the javascript »</a></p>
1454
+  <div class="row">
1455
+    <div class="span12">
1456
+      <div class="well" style="background-color: #888; border: none; padding: 40px;">
1457
+        <!-- Modal -->
1458
+        <div class="modal" style="position: relative; top: auto; left: auto; margin: 0 auto; z-index: 1">
1459
+          <div class="modal-header">
1460
+            <a href="#" class="close">×</a>
1461
+            <h3>Modal Heading</h3>
1462
+          </div>
1463
+          <div class="modal-body">
1464
+            <p>One fine body…</p>
1465
+          </div>
1466
+          <div class="modal-footer">
1467
+            <a href="#" class="btn primary">Primary</a>
1468
+            <a href="#" class="btn secondary">Secondary</a>
1469
+          </div>
1470
+        </div>
1471
+      </div>
1472
+    </div>
1473
+  </div><!-- /row -->
1474
+
1475
+  <!-- Tooltips --
1476
+  <div class="row">
1477
+    <div class="span4">
1478
+      <h2>Tooltips</h2>
1479
+      <p>Twipsies are super useful for aiding a confused user and pointing them in the right direction.</p>
1480
+      <p><a class="btn js-btn" href="./javascript.html#twipsy">Get the javascript »</a></p>
1481
+    </div>
1482
+    <div class="span12">
1483
+      <div class="twipsies well">
1484
+        <div style="position: relative">
1485
+          <p class="muted" style="margin-bottom: 0">
1486
+Lorem ipsum dolar sit amet illo error <a href="#" data-original-title="below">ipsum</a> veritatis aut iste perspiciatis iste voluptas natus illo quasi odit aut natus consequuntur consequuntur, aut natus illo voluptatem odit perspiciatis laudantium rem doloremque totam voluptas. <a href="#" data-original-title="right">Voluptasdicta</a> eaque beatae aperiam ut enim voluptatem explicabo explicabo, voluptas quia odit fugit accusantium totam totam architecto explicabo sit quasi fugit fugit, totam doloremque unde sunt <a href="#" data-original-title="left">sed</a> dicta quae accusantium fugit voluptas nemo voluptas voluptatem <a href="#" data-original-title="above">rem</a> quae aut veritatis quasi quae.
1487
+          </p>
1488
+        </div>
1489
+      </div>
1490
+    </div>
1491
+  </div><!-- /row -->
1492
+
1493
+  <!-- Popovers -->
1494
+  <div class="row">
1495
+    <div class="span4">
1496
+      <h2>Popovers</h2>
1497
+      <p>Use popovers to provide subtextual information to a page without affecting layout.</p>
1498
+      <p><a class="btn js-btn" href="./javascript.html#popover">Get the javascript »</a></p>
1499
+    </div>
1500
+    <div class="span12">
1501
+      <div class="popover-well">
1502
+         <div class="popover-wrapper">
1503
+          <div class="popover left">
1504
+            <div class="arrow"></div>
1505
+            <div class="inner">
1506
+              <h3 class="title">Popover Title</h3>
1507
+              <div class="content">
1508
+                <p>Etiam porta sem malesuada magna mollis euismod. Maecenas faucibus mollis interdum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>
1509
+              </div>
1510
+            </div>
1511
+          </div>
1512
+        </div>
1513
+      </div>
1514
+    </div>
1515
+  </div><!-- /row -->
1516
+</section>
1517
+
1518
+
1519
+
1520
+
1521
+
1522
+<!-- Using Javascript w/ Bootstrap
1523
+ ================================================== -->
1524
+ <section id="javascript">
1525
+   <div class="page-header">
1526
+     <h1>Using javascript with Bootstrap <small>An index of plugins to get you started</small></h1>
1527
+   </div>
1528
+   <h2>Getting started</h2>
1529
+   <p>Integrating javascript with the Bootstrap library is super easy. Below we go over the basics and provide you with some awesome plugins to get you started!</p>
1530
+   <p><a class="btn primary" href="./javascript.html">View javascript docs »</a></p>
1531
+   <div class="row">
1532
+     <div class="span12">
1533
+      <h3>What's included</h3>
1534
+       <p>Bring some of Bootstrap's primary components to life with new custom plugins that work with <a href="http://jquery.com/" target="_blank">jQuery</a> and <a href="http://ender.no.de" target="_blank">Ender</a>. We encourage you to extend and modify them to fit your specific development needs.</p>
1535
+        <table class="bordered-table zebra-striped">
1536
+          <thead>
1537
+            <tr>
1538
+              <th style="width: 150px;">File</th>
1539
+              <th>Description</th>
1540
+            </tr>
1541
+          </thead>
1542
+          <tbody>
1543
+            <tr>
1544
+              <td><a href="./javascript.html#modal">bootstrap-modal.js</a></td>
1545
+              <td>Our Modal plugin is a <strong>super</strong> slim take on the traditional modal js plugin! We took special care to include only the bare functionality that we require at twitter.</td>
1546
+            </tr>
1547
+            <tr>
1548
+              <td><a href="./javascript.html#alerts">bootstrap-alerts.js</a></td>
1549
+              <td>The alert plugin is a super tiny class for adding close functionality to alerts.</td>
1550
+            </tr>
1551
+            <tr>
1552
+              <td><a href="./javascript.html#dropdown">bootstrap-dropdown.js</a></td>
1553
+              <td>This plugin is for adding dropdown interaction to the bootstrap topbar or tabbed navigations.</td>
1554
+            </tr>
1555
+            <tr>
1556
+              <td><a href="./javascript.html#scrollspy">bootstrap-scrollspy.js</a></td>
1557
+              <td>The ScrollSpy plugin is for adding an auto updating nav based on scroll position to the bootstrap topbar.</td>
1558
+            </tr>
1559
+            <tr>
1560
+              <td><a href="./javascript.html#buttons">bootstrap-buttons.js</a></td>
1561
+              <td>This plugin offers additional functionality for managing button state.</td>
1562
+            </tr>
1563
+            <tr>
1564
+             <td><a href="./javascript.html#tabs">bootstrap-tabs.js</a></td>
1565
+              <td>This plugin adds quick, dynamic tab and pill functionality for cycling through local content.</td>
1566
+            </tr>
1567
+            <tr>
1568
+              <td><a href="./javascript.html#twipsy">bootstrap-twipsy.js</a></td>
1569
+              <td>Based on the excellent jQuery.tipsy plugin written by Jason Frame; twipsy is an updated version, which doesn't rely on images, uses css3 for animations, and data-attributes for local title storage!</td>
1570
+            </tr>
1571
+            <tr>
1572
+              <td><a href="./javascript.html#popover">bootstrap-popover.js</a></td>
1573
+              <td>The popover plugin provides a simple interface for adding popovers to your application. It extends the <a href="#twipsy">boostrap-twipsy.js</a> plugin, so be sure to grab that file as well when including popovers in your project!</td>
1574
+            </tr>
1575
+          </tbody>
1576
+       </table>
1577
+       <h3>Is javascript necessary?</h3>
1578
+       <p><strong>Nope!</strong> Bootstrap is designed first and foremost to be a CSS library. This javascript provides a basic interactive layer on top of the included styles.</p>
1579
+       <p>However, for those who do need javascript, we've provided the plugins above to help you understand how to integrate Bootstrap with javascript and to give you a quick, lightweight option for the basic functionality right away.</p>
1580
+       <p>For more information and to see some live demos, please refer to our <a href="./javascript.html">plugin documentation page</a>.</p>
1581
+     </div>
1582
+   </div>
1583
+ </section>
1584
+
1585
+    <footer>
1586
+        <p>&copy; Company 2011</p>
1587
+    </footer>
1588
+
1589
+
1590
+  <!-- JavaScript at the bottom for fast page loading -->
1591
+
1592
+  <!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
1593
+  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
1594
+  <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script>
1595
+
1596
+  <!-- scripts concatenated and minified via build script -->
1597
+  <script src="/js/plugins.js"></script>
1598
+  <script src="/js/script.js"></script>
1599
+  <script src="http://autobahn.tablesorter.com/jquery.tablesorter.min.js"></script>
1600
+  
1601
+  <script src="/js/bootstrap-dropdown.js"></script>
1602
+  <script src="/js/bootstrap-twipsy.js"></script>
1603
+  <script src="/js/bootstrap-scrollspy.js"></script>
1604
+  <script src="/js/bootstrap-scrollspy.js"></script>
1605
+  <script src="/js/assets/application.js"></script>
1606
+  <!-- end scripts -->
1607
+
1608
+  <!-- Asynchronous Google Analytics snippet. Change UA-XXXXX-X to be your site's ID.
1609
+       mathiasbynens.be/notes/async-analytics-snippet -->
1610
+  <script>
1611
+    var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
1612
+    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
1613
+    g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
1614
+    s.parentNode.insertBefore(g,s)}(document,'script'));
1615
+  </script>
1616
+</body>
1617
+</html>
0 1618
new file mode 100755
... ...
@@ -0,0 +1,13 @@
1
+<?php
2
+@ini_set('zend_monitor.enable', 0);
3
+if (@function_exists('output_cache_disable')) {
4
+    @output_cache_disable();
5
+}
6
+if (isset($_GET['debugger_connect']) && $_GET['debugger_connect'] == 1) {
7
+    if (function_exists('debugger_connect')) {
8
+        debugger_connect();
9
+        exit();
10
+    } else {
11
+        echo "No connector is installed.";
12
+    }
13
+}
0 14
new file mode 100755
1 15
Binary files /dev/null and b/public/favicon.ico differ
2 16
new file mode 100755
... ...
@@ -0,0 +1,43 @@
1
+/* the humans responsible & colophon */
2
+/* humanstxt.org */
3
+
4
+
5
+/* TEAM */
6
+  <your title>: <your name>
7
+  Site:
8
+  Twitter:
9
+  Location:
10
+
11
+/* THANKS */
12
+  Names (& URL):
13
+
14
+/* SITE */
15
+  Standards: HTML5, CSS3
16
+  Components: Modernizr, jQuery
17
+  Software:
18
+
19
+
20
+
21
+                               -o/-
22
+                               +oo//-
23
+                              :ooo+//:
24
+                             -ooooo///-
25
+                             /oooooo//:
26
+                            :ooooooo+//-
27
+                           -+oooooooo///-
28
+           -://////////////+oooooooooo++////////////::
29
+            :+ooooooooooooooooooooooooooooooooooooo+:::-
30
+              -/+ooooooooooooooooooooooooooooooo+/::////:-
31
+                -:+oooooooooooooooooooooooooooo/::///////:-
32
+                  --/+ooooooooooooooooooooo+::://////:-
33
+                     -:+ooooooooooooooooo+:://////:--
34
+                       /ooooooooooooooooo+//////:-
35
+                      -ooooooooooooooooooo////-
36
+                      /ooooooooo+oooooooooo//:
37
+                     :ooooooo+/::/+oooooooo+//-
38
+                    -oooooo/::///////+oooooo///-
39
+                    /ooo+::://////:---:/+oooo//:
40
+                   -o+/::///////:-      -:/+o+//-
41
+                   :-:///////:-            -:/://
42
+                     -////:-                 --//:
43
+                       --                       -:
1 45
new file mode 100755
... ...
@@ -0,0 +1,37 @@
1
+<?php
2
+
3
+define('PUBLIC_PATH', __DIR__);
4
+	define(  'APPLICATION_PATH', dirname(__DIR__) .
5
+			 DIRECTORY_SEPARATOR . 'application'
6
+			);
7
+	define(
8
+		'PAGES_PATH',
9
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
10
+		'pages'
11
+	 );
12
+	 define(
13
+		'INC_PATH',
14
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
15
+		'includes'
16
+	 );
17
+	 define(
18
+		'TPL_PATH',
19
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
20
+		'templates'
21
+	 );
22
+	 define(
23
+		'CLASS_PATH',
24
+		APPLICATION_PATH . DIRECTORY_SEPARATOR .
25
+		'classes'
26
+	 );
27
+
28
+ini_set('display_errors',1);
29
+ // Appel du routage d'url en PHP
30
+require_once CLASS_PATH . DIRECTORY_SEPARATOR .'url.class.php';
31
+$page = Url::url_rewrite();
32
+
33
+ // Appel du coeur de l'application
34
+require_once CLASS_PATH . DIRECTORY_SEPARATOR . 'application.class.php';
35
+$content = Application::load_body($page);
36
+Application::load_layout($content);
37
+
0 38
new file mode 100755
... ...
@@ -0,0 +1,798 @@
1
+<!DOCTYPE html>
2
+<html lang="en">
3
+  <head>
4
+    <meta charset="utf-8">
5
+    <title>Fbootstrapp by Clemens Krack, based on Bootstrap, from Twitter</title>
6
+    <meta name="description" content="">
7
+    <meta name="author" content="">
8
+
9
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
10
+    <!--[if lt IE 9]>
11
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
12
+    <![endif]-->
13
+
14
+    <!-- Le javascript -->
15
+    <script src="http://code.jquery.com/jquery-1.7.min.js"></script>
16
+    <script src="/js/assets/prettify.js"></script>
17
+    <script>$(function () { prettyPrint() })</script>
18
+    <script src="/js/bootstrap-modal.js"></script>
19
+    <script src="/js/bootstrap-alerts.js"></script>
20
+    <script src="/js/bootstrap-twipsy.js"></script>
21
+    <script src="/js/bootstrap-popover.js"></script>
22
+    <script src="/js/bootstrap-dropdown.js"></script>
23
+    <script src="/js/bootstrap-scrollspy.js"></script>
24
+    <script src="/js/bootstrap-tabs.js"></script>
25
+    <script src="/js/bootstrap-buttons.js"></script>
26
+
27
+    <!-- Le styles -->
28
+    <link rel="stylesheet" href="/css/bootstrap.css">
29
+    <link href="/css/docs.css" rel="stylesheet">
30
+    <link href="/js/assets/prettify.css" rel="stylesheet">
31
+
32
+    <!-- Le fav icon -->
33
+    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
34
+
35
+    </head>
36
+
37
+  <body id="bootstrap-js">
38
+
39
+    <!-- Topbar
40
+    ================================================== -->
41
+    <div class="topbar" data-scrollspy="scrollspy" >
42
+      <div class="fill">
43
+        <div class="container canvas">
44
+          <h3><a href="#">Bootstrap JS</a></h3>
45
+          <ul>
46
+            <li><a href="#overview">Overview</a></li>
47
+            <li><a href="#modal">Modals</a></li>
48
+            <li><a href="#dropdown">Dropdown</a></li>
49
+            <li><a href="#scrollspy">ScrollSpy</a></li>
50
+            <li><a href="#buttons">Buttons</a></li>
51
+            <li><a href="#tabs">Tabs</a></li>
52
+            <li><a href="#twipsy">Twipsy</a></li>
53
+            <li><a href="#popover">Popover</a></li>
54
+            <li><a href="#alerts">Alerts</a></li>
55
+          </ul>
56
+        </div>
57
+      </div>
58
+    </div>
59
+
60
+    <!-- Masthead (blueprinty thing)
61
+    ================================================== -->
62
+    <header class="jumbotron subhead" id="overview">
63
+      <div class="inner">
64
+        <div class="container canvas">
65
+          <h1>Javascript for Bootstrap</h1>
66
+          <p class="lead">
67
+            Bring Bootstrap's components to life with new, custom plugins that work with <a href="http://jquery.com/" target="_blank">jQuery</a> and <a href="http://ender.no.de" target="_blank">Ender</a>.
68
+          </p>
69
+          <p><a href="./index.html">&larr; Back to Bootstrap home</a></p>
70
+        </div><!-- /container -->
71
+      </div>
72
+    </header>
73
+
74
+    <div class="container canvas">
75
+
76
+    <!-- Modal
77
+    ================================================== -->
78
+
79
+    <section id="modal">
80
+      <div class="page-header">
81
+        <h1>Modals <small>bootstrap-modal.js</small></h1>
82
+      </div>
83
+      <div class="row">
84
+        <div class="span4 columns">
85
+          <p>Our Modal plugin is a super slim take on the traditional modal js plugin, taking special care to include only the bare functionality that we require here at twitter.</p>
86
+          <a href="js/bootstrap-modal.js" target="_blank" class="btn primary">Download</a>
87
+        </div>
88
+        <div class="span12 columns">
89
+          <h3>Using bootstrap-modal</h3>
90
+          <pre class="prettyprint linenums">$('#my-modal').modal(options)</pre>
91
+          <h3>Options</h3>
92
+          <table class="zebra-striped">
93
+            <thead>
94
+             <tr>
95
+               <th style="width: 100px;">Name</th>
96
+               <th style="width: 50px;">type</th>
97
+               <th style="width: 50px;">default</th>
98
+               <th>description</th>
99
+             </tr>
100
+            </thead>
101
+            <tbody>
102
+             <tr>
103
+               <td>backdrop</td>
104
+               <td>boolean, string</td>
105
+               <td>false</td>
106
+               <td>Includes a modal-backdrop element. Set backdrop to <code>"static"</code> if you do not want the modal closed when the backdrop is clicked.</td>
107
+             </tr>
108
+             <tr>
109
+               <td>keyboard</td>
110
+               <td>boolean</td>
111
+               <td>false</td>
112
+               <td>Closes the modal when escape key is pressed</td>
113
+             </tr>
114
+             <tr>
115
+               <td>show</td>
116
+               <td>boolean</td>
117
+               <td>false</td>
118
+               <td>Opens modal on class initialization</td>
119
+             </tr>
120
+            </tbody>
121
+          </table>
122
+          <h3>Markup</h3>
123
+          <p>You can activate modals on your page easily without having to write a single line of javascript. Just give an element a <code>data-controls-modal</code> attribute which corresponds to a modal element id, and when clicked, it will launch your modal. To add modal options, just include them as data attributes as well.</p>
124
+<pre class="prettyprint linenums">
125
+&lt;a class="btn" data-controls-modal="my-modal" data-backdrop="static" &gt;Launch Modal&lt;/a&gt;
126
+</pre>
127
+          <p><span class="label notice">Notice</span> If you want your modal to animate in and out, just add a <code>.fade</code> class to your <code>.modal</code> element (refer to the demo to see this in action).</p>
128
+          <h3>Methods</h3>
129
+          <h4>.modal(options)</h4>
130
+          <p>Activates your content as a modal. Accepts an optional options <code>object</code>.
131
+<pre class="prettyprint linenums">
132
+$('#my-modal').modal({
133
+  keyboard: true
134
+})</pre>
135
+          <h4>.modal('toggle')</h4>
136
+          <p>Manually toggles a modal.</p>
137
+          <pre class="prettyprint linenums">$('#my-modal').modal('toggle')</pre>
138
+          <h4>.modal('show')</h4>
139
+          <p>Manually opens a modal.</p>
140
+          <pre class="prettyprint linenums">$('#my-modal').modal('show')</pre>
141
+          <h4>.modal('hide')</h4>
142
+          <p>Manually hides a modal.</p>
143
+          <pre class="prettyprint linenums">$('#my-modal').modal('hide')</pre>
144
+          <h4>.modal(true)</h4>
145
+          <p>Returns an elements modal class instance.</p>
146
+          <pre class="prettyprint linenums">$('#my-modal').modal(true)</pre>
147
+          <p><span class="label notice">Notice</span> Alternatively, this can be retrieved with <code>$().data('modal')</code>.</p>
148
+          <h3>Events</h3>
149
+          <p>Bootstrap's modal class exposes a few events for hooking into modal functionality. </p>
150
+          <table class="zebra-striped">
151
+            <thead>
152
+             <tr>
153
+               <th style="width: 150px;">Event</th>
154
+               <th>Description</th>
155
+             </tr>
156
+            </thead>
157
+            <tbody>
158
+             <tr>
159
+               <td>show</td>
160
+               <td>This event fires immediately when the <code>show</code> instance method is called.</td>
161
+             </tr>
162
+             <tr>
163
+               <td>shown</td>
164
+               <td>This event is fired when the modal has been made visible to the user (will wait for css transitions to complete).</td>
165
+             </tr>
166
+             <tr>
167
+               <td>hide</td>
168
+               <td>This event is fired immediately when the <code>hide</code> instance method has been called.</td>
169
+             </tr>
170
+             <tr>
171
+               <td>hidden</td>
172
+               <td>This event is fired when the modal has finished being hidden from the user (will wait for css transitions to complete).</td>
173
+             </tr>
174
+            </tbody>
175
+          </table>
176
+
177
+<pre class="prettyprint linenums">
178
+$('#my-modal').bind('hidden', function () {
179
+  // do something ...
180
+})</pre>
181
+          <h3>Demo</h3>
182
+          <!-- sample modal content -->
183
+          <div id="modal-from-dom" class="modal hide fade">
184
+            <div class="modal-header">
185
+              <a href="#" class="close">&times;</a>
186
+              <h3>Modal Heading</h3>
187
+            </div>
188
+            <div class="modal-body">
189
+              <p>One fine body…</p>
190
+            </div>
191
+            <div class="modal-footer">
192
+              <a href="#" class="btn primary">Primary</a>
193
+              <a href="#" class="btn secondary">Secondary</a>
194
+            </div>
195
+          </div>
196
+
197
+          <button data-controls-modal="modal-from-dom" data-backdrop="true" data-keyboard="true" class="btn danger">Launch Modal</button>
198
+        </div>
199
+      </div>
200
+    </section>
201
+
202
+
203
+    <!-- Dropdown
204
+    ================================================== -->
205
+
206
+    <section id="dropdown">
207
+      <div class="page-header">
208
+        <h1>Dropdown <small>bootstrap-dropdown.js</small></h1>
209
+      </div>
210
+      <div class="row">
211
+        <div class="span4 columns">
212
+          <p>This plugin is for adding dropdown interaction to the bootstrap topbar or tabbed navigations.</p>
213
+          <a href="js/bootstrap-dropdown.js" target="_blank" class="btn primary">Download</a>
214
+        </div>
215
+        <div class="span12 columns">
216
+          <h3>Using bootstrap-dropdown.js</h3>
217
+          <pre class="prettyprint linenums">$('#topbar').dropdown()</pre>
218
+          <h3>Markup</h3>
219
+          <p>To quickly add dropdown functionality to any nav element, use the <code>data-dropdown</code> attribute. Any valid bootstrap dropdown will automatically be activated.</p>
220
+<pre class="prettyprint linenums">
221
+&lt;ul class="tabs"&gt;
222
+  &lt;li class="active"&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/li&gt;
223
+  &lt;li class="dropdown" data-dropdown="dropdown" &gt;
224
+    &lt;a href="#" class="dropdown-toggle"&gt;Dropdown&lt;/a&gt;
225
+    &lt;ul class="dropdown-menu"&gt;
226
+      &lt;li&gt;&lt;a href="#"&gt;Secondary link&lt;/a&gt;&lt;/li&gt;
227
+      &lt;li&gt;&lt;a href="#"&gt;Something else here&lt;/a&gt;&lt;/li&gt;
228
+      &lt;li class="divider"&gt;&lt;/li&gt;
229
+      &lt;li&gt;&lt;a href="#"&gt;Another link&lt;/a&gt;&lt;/li&gt;
230
+    &lt;/ul&gt;
231
+  &lt;/li&gt;
232
+&lt;/ul&gt;</pre>
233
+          <p><span class="label notice">Notice</span> If your ui has several dropdowns, consider adding the <code>data-dropdown</code> attribute to a more significant container element like <code>.tabs</code> or <code>.topbar</code>.
234
+          <h3>Methods</h3>
235
+          <h4>$().dropdown()</h4>
236
+          <p>
237
+          A programatic api for activating menus for a given topbar or tabbed navigation.
238
+          </p>
239
+          <h3>Demo</h3>
240
+          <div class="topbar-wrapper">
241
+            <div id="topbar-example" class="topbar" data-dropdown="dropdown">
242
+              <div class="topbar-inner">
243
+                <div class="container">
244
+                  <h3><a href="#">Project Name</a></h3>
245
+                  <ul>
246
+                    <li><a href="#">Link</a></li>
247
+                    <li><a href="#">Link</a></li>
248
+                  </ul>
249
+                  <form action="">
250
+                    <input type="text" placeholder="Search" />
251
+                  </form>
252
+                  <ul class="nav secondary-nav">
253
+                    <li class="menu">
254
+                      <a href="#" class="menu">Dropdown 1</a>
255
+                      <ul class="menu-dropdown">
256
+                        <li><a href="#">Secondary link</a></li>
257
+                        <li><a href="#">Something else here</a></li>
258
+                        <li class="divider"></li>
259
+                        <li><a href="#">Another link</a></li>
260
+                      </ul>
261
+                    </li>
262
+                    <li class="menu">
263
+                      <a href="#" class="menu">Dropdown 2</a>
264
+                      <ul class="menu-dropdown">
265
+                        <li><a href="#">Secondary link</a></li>
266
+                        <li><a href="#">Something else here</a></li>
267
+                        <li class="divider"></li>
268
+                        <li><a href="#">Another link</a></li>
269
+                      </ul>
270
+                    </li>
271
+                  </ul>
272
+                </div>
273
+              </div>
274
+            </div>
275
+          </div>
276
+        </div>
277
+      </div>
278
+    </section>
279
+
280
+   <!-- ScrollSpy
281
+    ================================================== -->
282
+
283
+    <section id="scrollspy">
284
+      <div class="page-header">
285
+        <h1>ScrollSpy <small>bootstrap-scrollspy.js</small></h1>
286
+      </div>
287
+      <div class="row">
288
+        <div class="span4 columns">
289
+          <p>This plugin is for adding the scrollspy (auto updating nav) interaction to the bootstrap topbar.</p>
290
+          <a href="js/bootstrap-scrollspy.js" target="_blank" class="btn primary">Download</a>
291
+        </div>
292
+        <div class="span12 columns">
293
+          <h2>Using bootstrap-scrollspy.js</h2>
294
+          <pre class="prettyprint linenums">$('#topbar').scrollSpy()</pre>
295
+          <h3>Markup</h3>
296
+          <p>To easily add scrollspy behavior to your nav, just add the <code>data-scrollspy</code> attribute to the <code>.topbar</code>.
297
+          <pre class="prettyprint linenums">&lt;div class="topbar" data-scrollspy="scrollspy" &gt;...&lt;/div&gt;</pre>
298
+          <h3>Methods</h3>
299
+          <h4>$().scrollSpy()</h4>
300
+          <p>
301
+          Auto activates navigation buttons by users scroll position.
302
+          </p>
303
+          <pre class="prettyprint linenums">$('body > .topbar').scrollSpy()</pre>
304
+           <p><span class="label notice">Notice</span> Topbar anchor tags must have resolvable id targets. For example, a <code>&lt;a href="#home"&gt;home&lt;/a&gt;</code> must correspond to something in the dom like <code>&lt;div id="home"&gt;&lt;/div&gt;</code>.
305
+          </p>
306
+          <h4>.scrollSpy('refresh')</h4>
307
+          <p>The scrollspy caches nav buttons and section coordinates for performance. If you need to update this cache (likely if you have dynamic content) just call this refresh method. If you used the data attribute to define your scrollspy, just call refresh on the body.</p>
308
+          <pre class="prettyprint linenums">$('body').scrollSpy('refresh')</pre>
309
+          <h3>Demo</h3>
310
+          <p>Checkout the the topbar navigation on this page.</p>
311
+        </div>
312
+      </div>
313
+    </section>
314
+
315
+    <!-- Buttons
316
+    ================================================== -->
317
+
318
+    <section id="buttons">
319
+      <div class="page-header">
320
+        <h1>Buttons <small>bootstrap-buttons.js</small></h1>
321
+      </div>
322
+      <div class="row">
323
+        <div class="span4 columns">
324
+          <p>This plugin offers additional functionality for managing button state.</p>
325
+          <a href="js/bootstrap-buttons.js" target="_blank" class="btn primary">Download</a>
326
+        </div>
327
+        <div class="span12 columns">
328
+          <h3>Using bootstrap-buttons.js</h3>
329
+          <pre class="prettyprint linenums">$('.tabs').button()</pre>
330
+          <h3>Methods</h3>
331
+          <h4>$().button('toggle')</h4>
332
+          <p>Toggles push state. Gives btn the look that it's been activated.</p>
333
+          <p><span class="label notice">Notice</span> You can enable auto toggling of a button by using the <code>data-toggle</code> attribute.</p>
334
+          <pre class="prettyprint linenums">&lt;button class="btn" data-toggle="toggle" &gt;...&lt;/button&gt;</pre>
335
+          <h4>$().button('loading')</h4>
336
+          <p>Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute <code>data-loading-text</code>.
337
+          </p>
338
+           <pre class="prettyprint linenums">&lt;button class="btn" data-loading-text="loading stuff..." &gt;...&lt;/button&gt;</pre>
339
+           <h4>$().button('reset')</h4>
340
+           <p>Resets button state - swaps text to original text.</p>
341
+           <h4>$().button(string)</h4>
342
+           <p>Resets button state - swaps text to any data defined text state.</p>
343
+<pre class="prettyprint linenums">&lt;button class="btn" data-complete-text="finished!" &gt;...&lt;/button&gt;
344
+&lt;script&gt;
345
+  $('.btn').button('complete')
346
+&lt;/scrip&gt;</pre>
347
+          <h3>Demo</h3>
348
+          <button id="fat-btn" data-loading-text="loading..." class="btn danger">Loading Demo</button>
349
+          <button class="btn" data-toggle="toggle">Toggle Demo</button>
350
+          <script>
351
+            $(function() {
352
+              var btn = $('#fat-btn').click(function () {
353
+                btn.button('loading')
354
+                setTimeout(function () {
355
+                  btn.button('reset')
356
+                }, 3000)
357
+              })
358
+            })
359
+          </script>
360
+        </div>
361
+      </div>
362
+    </section>
363
+
364
+
365
+    <!-- Tabs
366
+    ================================================== -->
367
+
368
+    <section id="tabs">
369
+      <div class="page-header">
370
+        <h1>Tabs <small>bootstrap-tabs.js</small></h1>
371
+      </div>
372
+      <div class="row">
373
+        <div class="span4 columns">
374
+          <p>This plugin adds quick, dynamic tab and pill functionality.</p>
375
+          <a href="js/bootstrap-tabs.js" target="_blank" class="btn primary">Download</a>
376
+        </div>
377
+        <div class="span12 columns">
378
+          <h3>Using bootstrap-tabs.js</h3>
379
+          <pre class="prettyprint linenums">$('.tabs').tabs()</pre>
380
+          <h3>Markup</h3>
381
+          <p>You can activate a tab or pill navigation without writing any javascript by simply giving them a <code>data-tabs</code> or <code>data-pills</code> attribute.</p>
382
+          <pre class="prettyprint linenums"> &lt;ul class="tabs" data-tabs="tabs" &gt;...&lt;/ul&gt;</pre>
383
+          <h3>Methods</h3>
384
+          <h4>$().tabs or $().pills</h4>
385
+          <p>
386
+            Activates tab and pill functionality for a given container. Tab links should reference IDs in the document.
387
+          </p>
388
+<pre class="prettyprint linenums">
389
+&lt;ul class="tabs"&gt;
390
+  &lt;li class="active"&gt;&lt;a href="#home"&gt;Home&lt;/a&gt;&lt;/li&gt;
391
+  &lt;li&gt;&lt;a href="#profile"&gt;Profile&lt;/a&gt;&lt;/li&gt;
392
+  &lt;li&gt;&lt;a href="#messages"&gt;Messages&lt;/a&gt;&lt;/li&gt;
393
+  &lt;li&gt;&lt;a href="#settings"&gt;Settings&lt;/a&gt;&lt;/li&gt;
394
+&lt;/ul&gt;
395
+
396
+&lt;div class="pill-content"&gt;
397
+  &lt;div class="active" id="home"&gt;...&lt;/div&gt;
398
+  &lt;div id="profile"&gt;...&lt;/div&gt;
399
+  &lt;div id="messages"&gt;...&lt;/div&gt;
400
+  &lt;div id="settings"&gt;...&lt;/div&gt;
401
+&lt;/div&gt;
402
+
403
+&lt;script&gt;
404
+  $(function () {
405
+    $('.tabs').tabs()
406
+  })
407
+&lt;/script&gt;</pre>
408
+          </p>
409
+					<h3>Events</h3>
410
+					<table class="zebra-striped">
411
+					  <thead>
412
+					   <tr>
413
+					     <th style="width: 150px;">Event</th>
414
+					     <th>Description</th>
415
+					   </tr>
416
+					  </thead>
417
+					  <tbody>
418
+					   <tr>
419
+					     <td>change</td>
420
+					     <td>This event fires on tab change. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab respectively.</td>
421
+					   </tr>
422
+					  </tbody>
423
+					</table>
424
+
425
+					<pre class="prettyprint linenums">
426
+$('.tabs a').bind('change', function (e) {
427
+  e.target // activated tab
428
+  e.relatedTarget // previous tab
429
+})</pre>
430
+          <h3>Demo</h3>
431
+          <ul class="tabs" data-tabs="tabs">
432
+            <li class="active"><a href="#home">Home</a></li>
433
+            <li><a href="#profile">Profile</a></li>
434
+            <li><a href="#messages">Messages</a></li>
435
+            <li><a href="#settings">Settings</a></li>
436
+            <li class="dropdown" data-dropdown="dropdown">
437
+              <a href="#" class="dropdown-toggle">Dropdown</a>
438
+              <ul class="dropdown-menu">
439
+                <li><a href="#fat">@fat</a></li>
440
+                <li><a href="#mdo">@mdo</a></li>
441
+              </ul>
442
+            </li>
443
+          </ul>
444
+          <div id="my-tab-content" class="tab-content">
445
+            <div class="active tab-pane" id="home">
446
+              <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>
447
+            </div>
448
+            <div class="tab-pane" id="profile">
449
+              <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>
450
+            </div>
451
+            <div class="tab-pane" id="messages">
452
+              <p>Banksy do proident, brooklyn photo booth delectus sunt artisan sed organic exercitation eiusmod four loko. Quis tattooed iphone esse aliqua. Master cleanse vero fixie mcsweeney's. Ethical portland aute, irony food truck pitchfork lomo eu anim. Aesthetic blog DIY, ethical beard leggings tofu consequat whatever cardigan nostrud. Helvetica you probably haven't heard of them carles, marfa veniam occaecat lomo before they sold out in shoreditch scenester sustainable thundercats. Consectetur tofu craft beer, mollit brunch fap echo park pitchfork mustache dolor.</p>
453
+            </div>
454
+            <div class="tab-pane" id="settings">
455
+              <p>Sunt qui biodiesel mollit officia, fanny pack put a bird on it thundercats seitan squid ad wolf bicycle rights blog. Et aute readymade farm-to-table carles 8-bit, nesciunt nulla etsy adipisicing organic ea. Master cleanse mollit high life, next level Austin nesciunt american apparel twee mustache adipisicing reprehenderit hoodie portland irony. Aliqua tofu quinoa +1 commodo eiusmod. High life williamsburg cupidatat twee homo leggings. Four loko vinyl DIY consectetur nisi, marfa retro keffiyeh vegan. Fanny pack viral retro consectetur gentrify fap.</p>
456
+            </div>
457
+            <div class="tab-pane" id="fat">
458
+              <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>
459
+            </div>
460
+            <div class="tab-pane" id="mdo">
461
+              <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>
462
+            </div>
463
+          </div>
464
+        </div>
465
+      </div>
466
+    </section>
467
+
468
+    <!-- Tips
469
+    ================================================== -->
470
+
471
+    <section id="twipsy">
472
+      <div class="page-header">
473
+        <h1>Twipsy <small>bootstrap-twipsy.js</small></h1>
474
+      </div>
475
+      <div class="row">
476
+        <div class="span4 columns">
477
+          <p>Based on the excellent jQuery.tipsy plugin written by Jason Frame; twipsy is an updated version, which doesn't rely on images, uses css3 for animations, and data-attributes for title storage!</p>
478
+          <a href="js/bootstrap-twipsy.js" target="_blank" class="btn primary">Download</a>
479
+        </div>
480
+        <div class="span12 columns">
481
+          <h3>Using bootstrap-twipsy.js</h3>
482
+          <pre class="prettyprint linenums">$('#example').twipsy(options)</pre>
483
+          <h3>Options</h3>
484
+          <table class="zebra-striped">
485
+            <thead>
486
+             <tr>
487
+               <th style="width: 100px;">Name</th>
488
+               <th style="width: 95px;">type</th>
489
+               <th style="width: 95px;">default</th>
490
+               <th>description</th>
491
+             </tr>
492
+            </thead>
493
+            <tbody>
494
+             <tr>
495
+               <td>animate</td>
496
+               <td>boolean</td>
497
+               <td>true</td>
498
+               <td>apply a css fade transition to the tooltip</td>
499
+             </tr>
500
+             <tr>
501
+               <td>delayIn</td>
502
+               <td>number</td>
503
+               <td>0</td>
504
+               <td>delay before showing tooltip (ms)</td>
505
+             </tr>
506
+             <tr>
507
+               <td>delayOut</td>
508
+               <td>number</td>
509
+               <td>0</td>
510
+               <td>delay before hiding tooltip (ms)</td>
511
+             </tr>
512
+             <tr>
513
+               <td>fallback</td>
514
+               <td>string</td>
515
+               <td>''</td>
516
+               <td>text to use when no tooltip title is present</td>
517
+             </tr>
518
+             <tr>
519
+               <td>placement</td>
520
+               <td>string</td>
521
+               <td>'above'</td>
522
+               <td>how to position the tooltip - above | below | left | right</td>
523
+             </tr>
524
+             <tr>
525
+               <td>html</td>
526
+               <td>boolean</td>
527
+               <td>false</td>
528
+               <td>allows html content within tooltip</td>
529
+             </tr>
530
+             <tr>
531
+               <td>live</td>
532
+               <td>boolean</td>
533
+               <td>false</td>
534
+               <td>use event delegation instead of individual event handlers</td>
535
+             </tr>
536
+             <tr>
537
+               <td>offset</td>
538
+               <td>number</td>
539
+               <td>0</td>
540
+               <td>pixel offset of tooltip from target element</td>
541
+             </tr>
542
+             <tr>
543
+               <td>title</td>
544
+               <td>string, function</td>
545
+               <td>'title'</td>
546
+               <td>attribute or method for retrieving title text</td>
547
+             </tr>
548
+             <tr>
549
+               <td>trigger</td>
550
+               <td>string</td>
551
+               <td>'hover'</td>
552
+               <td>how tooltip is triggered - hover | focus | manual</td>
553
+             </tr>
554
+             <tr>
555
+               <td>template</td>
556
+               <td>string</td>
557
+               <td>[default markup]</td>
558
+               <td>the html template used for rendering a twipsy</td>
559
+             </tr>
560
+            </tbody>
561
+          </table>
562
+          <p><span class="label notice">Notice</span> Individual twipsy instance options can alternatively be specified through the use of data attributes.</code></p>
563
+          <pre class="prettyprint linenums">&lt;a href="#" data-placement="below" rel='twipsy' title='Some title text'&gt;text&lt;/a&gt;</pre>
564
+          <h3>Methods</h3>
565
+          <h4>$().twipsy(options)</h4>
566
+          <p>Attaches a twipsy handler to an element collection.</p>
567
+          <h4>.twipsy('show')</h4>
568
+          <p>Reveals an elements twipsy.</p>
569
+          <pre class="prettyprint linenums">$('#element').twipsy('show')</pre>
570
+          <h4>.twipsy('hide')</h4>
571
+          <p>Hides an elements twipsy.</p>
572
+          <pre class="prettyprint linenums">$('#element').twipsy('hide')</pre>
573
+          <h4>.twipsy(true)</h4>
574
+          <p>Returns an elements twipsy class instance.</p>
575
+          <pre class="prettyprint linenums">$('#element').twipsy(true)</pre>
576
+          <p><span class="label notice">Notice</span> Alternatively, this can be retrieved with <code>$().data('twipsy')</code>.</p>
577
+          <h3>Demo</h3>
578
+          <div class="well">
579
+            <p class="muted">Tight pants next level keffiyeh <a href="#" rel='twipsy' title='Some title text'>you probably</a> haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel <a href="#" rel='twipsy' title='Another twipsy'>have a</a> terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A <a href="#" rel='twipsy' title='Another one here too'>really ironic</a> artisan whatever keytar, scenester farm-to-table banksy Austin <a href="#" rel='twipsy' title='The last tip!'>twitter handle</a> freegan cred raw denim single-origin coffee viral.
580
+            </p>
581
+          </div>
582
+          <script>
583
+            $(function () {
584
+              $("a[rel=twipsy]").twipsy({
585
+                live: true
586
+              })
587
+            })
588
+          </script>
589
+        </div>
590
+      </div>
591
+    </section>
592
+
593
+    <!-- Popovers
594
+    ================================================== -->
595
+
596
+
597
+    <section id="popover">
598
+      <div class="page-header">
599
+        <h1>Popovers <small>bootstrap-popover.js</small></h1>
600
+      </div>
601
+      <div class="row">
602
+        <div class="span4 columns">
603
+          <p>The popover plugin provides a simple interface for adding popovers to your application. It extends the <a href="#twipsy">bootstrap-twipsy.js</a> plugin, so be sure to grab that file as well when including popovers in your project!</p>
604
+           <p><span class="label notice">Notice</span> You must include the bootstrap-twipsy.js file <strong>before</strong> bootstrap-popover.js.</p>
605
+          <a href="js/bootstrap-popover.js" target="_blank" class="btn primary">Download</a>
606
+        </div>
607
+        <div class="span12 columns">
608
+          <h3>Using bootstrap-popover.js</h3>
609
+          <pre class="prettyprint linenums">$('#example').popover(options)</pre>
610
+          <h3>Options</h3>
611
+          <table class="zebra-striped">
612
+            <thead>
613
+             <tr>
614
+               <th style="width: 100px;">Name</th>
615
+               <th style="width: 95px;">type</th>
616
+               <th style="width: 95px;">default</th>
617
+               <th>description</th>
618
+             </tr>
619
+            </thead>
620
+            <tbody>
621
+             <tr>
622
+               <td>animate</td>
623
+               <td>boolean</td>
624
+               <td>true</td>
625
+               <td>apply a css fade transition to the tooltip</td>
626
+             </tr>
627
+             <tr>
628
+               <td>delayIn</td>
629
+               <td>number</td>
630
+               <td>0</td>
631
+               <td>delay before showing tooltip (ms)</td>
632
+             </tr>
633
+             <tr>
634
+               <td>delayOut</td>
635
+               <td>number</td>
636
+               <td>0</td>
637
+               <td>delay before hiding tooltip (ms)</td>
638
+             </tr>
639
+             <tr>
640
+               <td>fallback</td>
641
+               <td>string</td>
642
+               <td>''</td>
643
+               <td>text to use when no tooltip title is present</td>
644
+             </tr>
645
+             <tr>
646
+               <td>placement</td>
647
+               <td>string</td>
648
+               <td>'right'</td>
649
+               <td>how to position the tooltip - above | below | left | right</td>
650
+             </tr>
651
+             <tr>
652
+               <td>html</td>
653
+               <td>boolean</td>
654
+               <td>false</td>
655
+               <td>allows html content within tooltip</td>
656
+             </tr>
657
+             <tr>
658
+               <td>live</td>
659
+               <td>boolean</td>
660
+               <td>false</td>
661
+               <td>use event delegation instead of individual event handlers</td>
662
+             </tr>
663
+             <tr>
664
+               <td>offset</td>
665
+               <td>number</td>
666
+               <td>0</td>
667
+               <td>pixel offset of tooltip from target element</td>
668
+             </tr>
669
+             <tr>
670
+               <td>title</td>
671
+               <td>string, function</td>
672
+               <td>'title'</td>
673
+               <td>attribute or method for retrieving title text</td>
674
+             </tr>
675
+             <tr>
676
+               <td>content</td>
677
+               <td>string, function</td>
678
+               <td>'data-content'</td>
679
+               <td>attribute or method for retrieving content text.</td>
680
+             </tr>
681
+             <tr>
682
+               <td>trigger</td>
683
+               <td>string</td>
684
+               <td>'hover'</td>
685
+               <td>how tooltip is triggered - hover | focus | manual</td>
686
+             </tr>
687
+             <tr>
688
+               <td>template</td>
689
+               <td>string</td>
690
+               <td>[default markup]</td>
691
+               <td>the html template used for rendering a popover</td>
692
+             </tr>
693
+            </tbody>
694
+          </table>
695
+          <p><span class="label notice">Notice</span> Individual popover instance options can alternatively be specified through the use of data attributes.</code></p>
696
+          <pre class="prettyprint linenums">&lt;a data-placement="below" href="#" class="btn danger" rel="popover"&gt;text&lt;/a&gt;</pre>
697
+          <h3>Methods</h3>
698
+          <h4>$().popover(options)</h4>
699
+          <p>Initializes popovers for an element collection.</p>
700
+          <h4>.popover('show')</h4>
701
+          <p>Reveals an elements popover.</p>
702
+          <pre class="prettyprint linenums">$('#element').popover('show')</pre>
703
+          <h4>.popover('hide')</h4>
704
+          <p>Hides an elements popover.</p>
705
+          <pre class="prettyprint linenums">$('#element').popover('hide')</pre>
706
+          <h3>Demo</h3>
707
+          <a href="#" class="btn danger" rel="popover" title="A title" data-content="And here's some amazing content. It's very engaging. right?">hover for popover</a>
708
+          <script>
709
+            $(function () {
710
+              $("a[rel=popover]")
711
+                .popover({
712
+                  offset: 10
713
+                })
714
+                .click(function(e) {
715
+                  e.preventDefault()
716
+                })
717
+            })
718
+          </script>
719
+        </div>
720
+      </div>
721
+    </section>
722
+
723
+
724
+
725
+    <!-- Alerts
726
+    ================================================== -->
727
+
728
+    <section id="alerts">
729
+      <div class="page-header">
730
+        <h1>Alerts <small>bootstrap-alerts.js</small></h1>
731
+      </div>
732
+      <div class="row">
733
+        <div class="span4 columns">
734
+          <p>The alert plugin is a super tiny class for adding close functionality to alerts.</p>
735
+          <a href="js/bootstrap-alerts.js" target="_blank" class="btn primary">Download</a>
736
+        </div>
737
+        <div class="span12 columns">
738
+          <h3>Using bootstrap-alerts.js</h3>
739
+          <pre class="prettyprint linenums">$(".alert-message").alert()</pre>
740
+          <h3>Markup</h3>
741
+          <p>Just add a <code>data-alert</code> attribute to your alert messages to automatically give them close functionality.</p>
742
+          <h3>Options</h3>
743
+          <table class="zebra-striped">
744
+            <thead>
745
+             <tr>
746
+               <th style="width: 100px;">Name</th>
747
+               <th style="width: 100px;">type</th>
748
+               <th style="width: 50px;">default</th>
749
+               <th>description</th>
750
+             </tr>
751
+            </thead>
752
+            <tbody>
753
+             <tr>
754
+               <td>selector</td>
755
+               <td>string</td>
756
+               <td>'.close'</td>
757
+               <td>What selector to target for closing an alert.</td>
758
+             </tr>
759
+            </tbody>
760
+          </table>
761
+
762
+          <h3>Methods</h3>
763
+          <h4>$().alert()</h4>
764
+          <p>Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the <code>.fade</code> and <code>.in</code> class already applied to them.</p>
765
+          <h4>.alert('close')</h4>
766
+          <p>Closes an alert.</p>
767
+          <pre class="prettyprint linenums">$(".alert-message").alert('close')</pre>
768
+          <h3>Demo</h3>
769
+          <div class="alert-message warning fade in" data-alert="alert" >
770
+            <a class="close" href="#">&times;</a>
771
+            <p><strong>Holy guacamole!</strong> Best check yo self, you’re not looking too good.</p>
772
+          </div>
773
+          <div class="alert-message block-message error fade in" data-alert="alert" >
774
+            <a class="close" href="#">&times;</a>
775
+            <p><strong>Oh snap! You got an error!</strong> Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.</p>
776
+            <div class="alert-actions">
777
+              <a class="btn small" href="#">Take this action</a> <a class="btn small" href="#">Or do this</a>
778
+            </div>
779
+          </div>
780
+        </div>
781
+      </div>
782
+    </section>
783
+
784
+
785
+    </div><!-- /container -->
786
+
787
+    <footer class="footer">
788
+      <div class="container">
789
+        <p class="pull-right"><a href="#">Back to top</a></p>
790
+        <p>
791
+          Designed and built with all the love in the world <a href="http://twitter.com/twitter" target="_blank">@twitter</a> by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.<br />
792
+          Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>.
793
+        </p>
794
+      </div>
795
+    </footer>
796
+
797
+  </body>
798
+</html>
0 799
new file mode 100755
... ...
@@ -0,0 +1,52 @@
1
+$(document).ready(function(){
2
+
3
+  // table sort example
4
+  // ==================
5
+
6
+  $("#sortTableExample").tablesorter( { sortList: [[ 1, 0 ]] } )
7
+
8
+
9
+  // add on logic
10
+  // ============
11
+
12
+  $('.add-on :checkbox').click(function () {
13
+    if ($(this).attr('checked')) {
14
+      $(this).parents('.add-on').addClass('active')
15
+    } else {
16
+      $(this).parents('.add-on').removeClass('active')
17
+    }
18
+  })
19
+
20
+
21
+  // Disable certain links in docs
22
+  // =============================
23
+  // Please do not carry these styles over to your projects, it's merely here to prevent button clicks form taking you away from your spot on page
24
+
25
+  $('ul.tabs a, ul.pills a, .pagination a, .well .btn, .actions .btn, .alert-message .btn, a.close').click(function (e) {
26
+    e.preventDefault()
27
+  })
28
+
29
+  // Copy code blocks in docs
30
+  $(".copy-code").focus(function () {
31
+    var el = this;
32
+    // push select to event loop for chrome :{o
33
+    setTimeout(function () { $(el).select(); }, 0);
34
+  });
35
+
36
+
37
+  // POSITION STATIC TWIPSIES
38
+  // ========================
39
+
40
+  $(window).bind( 'load resize', function () {
41
+    $(".twipsies a").each(function () {
42
+       $(this)
43
+        .twipsy({
44
+          live: false
45
+        , placement: $(this).attr('title')
46
+        , trigger: 'manual'
47
+        , offset: 2
48
+        })
49
+        .twipsy('show')
50
+      })
51
+  })
52
+});
0 53
new file mode 100755
... ...
@@ -0,0 +1,28 @@
1
+var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
2
+(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
3
+[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
4
+f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
5
+(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
6
+{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
7
+t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
8
+"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
9
+l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
10
+q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
11
+q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
12
+"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
13
+a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
14
+for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
15
+m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
16
+a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
17
+j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
18
+"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
19
+H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
20
+J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
21
+I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
22
+["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
23
+/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
24
+["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
25
+hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
26
+!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
27
+250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
28
+PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
0 29
new file mode 100755
... ...
@@ -0,0 +1,124 @@
1
+/* ==========================================================
2
+ * bootstrap-alerts.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
4
+ * ==========================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ========================================================== */
19
+
20
+
21
+!function( $ ){
22
+
23
+  "use strict"
24
+
25
+  /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
26
+   * ======================================================= */
27
+
28
+   var transitionEnd
29
+
30
+   $(document).ready(function () {
31
+
32
+     $.support.transition = (function () {
33
+       var thisBody = document.body || document.documentElement
34
+         , thisStyle = thisBody.style
35
+         , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
36
+       return support
37
+     })()
38
+
39
+     // set CSS transition event type
40
+     if ( $.support.transition ) {
41
+       transitionEnd = "TransitionEnd"
42
+       if ( $.browser.webkit ) {
43
+        transitionEnd = "webkitTransitionEnd"
44
+       } else if ( $.browser.mozilla ) {
45
+        transitionEnd = "transitionend"
46
+       } else if ( $.browser.opera ) {
47
+        transitionEnd = "oTransitionEnd"
48
+       }
49
+     }
50
+
51
+   })
52
+
53
+ /* ALERT CLASS DEFINITION
54
+  * ====================== */
55
+
56
+  var Alert = function ( content, options ) {
57
+    if (options == 'close') return this.close.call(content)
58
+    this.settings = $.extend({}, $.fn.alert.defaults, options)
59
+    this.$element = $(content)
60
+      .delegate(this.settings.selector, 'click', this.close)
61
+  }
62
+
63
+  Alert.prototype = {
64
+
65
+    close: function (e) {
66
+      var $element = $(this)
67
+        , className = 'alert-message'
68
+
69
+      $element = $element.hasClass(className) ? $element : $element.parent()
70
+
71
+      e && e.preventDefault()
72
+      $element.removeClass('in')
73
+
74
+      function removeElement () {
75
+        $element.remove()
76
+      }
77
+
78
+      $.support.transition && $element.hasClass('fade') ?
79
+        $element.bind(transitionEnd, removeElement) :
80
+        removeElement()
81
+    }
82
+
83
+  }
84
+
85
+
86
+ /* ALERT PLUGIN DEFINITION
87
+  * ======================= */
88
+
89
+  $.fn.alert = function ( options ) {
90
+
91
+    if ( options === true ) {
92
+      return this.data('alert')
93
+    }
94
+
95
+    return this.each(function () {
96
+      var $this = $(this)
97
+        , data
98
+
99
+      if ( typeof options == 'string' ) {
100
+
101
+        data = $this.data('alert')
102
+
103
+        if (typeof data == 'object') {
104
+          return data[options].call( $this )
105
+        }
106
+
107
+      }
108
+
109
+      $(this).data('alert', new Alert( this, options ))
110
+
111
+    })
112
+  }
113
+
114
+  $.fn.alert.defaults = {
115
+    selector: '.close'
116
+  }
117
+
118
+  $(document).ready(function () {
119
+    new Alert($('body'), {
120
+      selector: '.alert-message[data-alert] .close'
121
+    })
122
+  })
123
+
124
+}( window.jQuery || window.ender );
0 125
\ No newline at end of file
1 126
new file mode 100755
... ...
@@ -0,0 +1,64 @@
1
+/* ============================================================
2
+ * bootstrap-buttons.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
4
+ * ============================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ============================================================ */
19
+
20
+!function( $ ){
21
+
22
+  "use strict"
23
+
24
+  function setState(el, state) {
25
+    var d = 'disabled'
26
+      , $el = $(el)
27
+      , data = $el.data()
28
+
29
+    state = state + 'Text'
30
+    data.resetText || $el.data('resetText', $el.html())
31
+
32
+    $el.html( data[state] || $.fn.button.defaults[state] )
33
+
34
+    setTimeout(function () {
35
+      state == 'loadingText' ?
36
+        $el.addClass(d).attr(d, d) :
37
+        $el.removeClass(d).removeAttr(d)
38
+    }, 0)
39
+  }
40
+
41
+  function toggle(el) {
42
+    $(el).toggleClass('active')
43
+  }
44
+
45
+  $.fn.button = function(options) {
46
+    return this.each(function () {
47
+      if (options == 'toggle') {
48
+        return toggle(this)
49
+      }
50
+      options && setState(this, options)
51
+    })
52
+  }
53
+
54
+  $.fn.button.defaults = {
55
+    loadingText: 'loading...'
56
+  }
57
+
58
+  $(function () {
59
+    $('body').delegate('.btn[data-toggle]', 'click', function () {
60
+      $(this).button('toggle')
61
+    })
62
+  })
63
+
64
+}( window.jQuery || window.ender );
0 65
\ No newline at end of file
1 66
new file mode 100755
... ...
@@ -0,0 +1,55 @@
1
+/* ============================================================
2
+ * bootstrap-dropdown.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#dropdown
4
+ * ============================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ============================================================ */
19
+
20
+
21
+!function( $ ){
22
+
23
+  "use strict"
24
+
25
+  /* DROPDOWN PLUGIN DEFINITION
26
+   * ========================== */
27
+
28
+  $.fn.dropdown = function ( selector ) {
29
+    return this.each(function () {
30
+      $(this).delegate(selector || d, 'click', function (e) {
31
+        var li = $(this).parent('li')
32
+          , isActive = li.hasClass('open')
33
+
34
+        clearMenus()
35
+        !isActive && li.toggleClass('open')
36
+        return false
37
+      })
38
+    })
39
+  }
40
+
41
+  /* APPLY TO STANDARD DROPDOWN ELEMENTS
42
+   * =================================== */
43
+
44
+  var d = 'a.menu, .dropdown-toggle'
45
+
46
+  function clearMenus() {
47
+    $(d).parent('li').removeClass('open')
48
+  }
49
+
50
+  $(function () {
51
+    $('html').bind("click", clearMenus)
52
+    $('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' )
53
+  })
54
+
55
+}( window.jQuery || window.ender );
0 56
new file mode 100755
... ...
@@ -0,0 +1,260 @@
1
+/* =========================================================
2
+ * bootstrap-modal.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#modal
4
+ * =========================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ========================================================= */
19
+
20
+
21
+!function( $ ){
22
+
23
+  "use strict"
24
+
25
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
26
+  * ======================================================= */
27
+
28
+  var transitionEnd
29
+
30
+  $(document).ready(function () {
31
+
32
+    $.support.transition = (function () {
33
+      var thisBody = document.body || document.documentElement
34
+        , thisStyle = thisBody.style
35
+        , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
36
+      return support
37
+    })()
38
+
39
+    // set CSS transition event type
40
+    if ( $.support.transition ) {
41
+      transitionEnd = "TransitionEnd"
42
+      if ( $.browser.webkit ) {
43
+      	transitionEnd = "webkitTransitionEnd"
44
+      } else if ( $.browser.mozilla ) {
45
+      	transitionEnd = "transitionend"
46
+      } else if ( $.browser.opera ) {
47
+      	transitionEnd = "oTransitionEnd"
48
+      }
49
+    }
50
+
51
+  })
52
+
53
+
54
+ /* MODAL PUBLIC CLASS DEFINITION
55
+  * ============================= */
56
+
57
+  var Modal = function ( content, options ) {
58
+    this.settings = $.extend({}, $.fn.modal.defaults, options)
59
+    this.$element = $(content)
60
+      .delegate('.close', 'click.modal', $.proxy(this.hide, this))
61
+
62
+    if ( this.settings.show ) {
63
+      this.show()
64
+    }
65
+
66
+    return this
67
+  }
68
+
69
+  Modal.prototype = {
70
+
71
+      toggle: function () {
72
+        return this[!this.isShown ? 'show' : 'hide']()
73
+      }
74
+
75
+    , show: function () {
76
+        var that = this
77
+        this.isShown = true
78
+        this.$element.trigger('show')
79
+
80
+        escape.call(this)
81
+        backdrop.call(this, function () {
82
+          var transition = $.support.transition && that.$element.hasClass('fade')
83
+
84
+          that.$element
85
+            .appendTo(document.body)
86
+            .show()
87
+
88
+          if (transition) {
89
+            that.$element[0].offsetWidth // force reflow
90
+          }
91
+
92
+          that.$element.addClass('in')
93
+
94
+          transition ?
95
+            that.$element.one(transitionEnd, function () { that.$element.trigger('shown') }) :
96
+            that.$element.trigger('shown')
97
+
98
+        })
99
+
100
+        return this
101
+      }
102
+
103
+    , hide: function (e) {
104
+        e && e.preventDefault()
105
+
106
+        if ( !this.isShown ) {
107
+          return this
108
+        }
109
+
110
+        var that = this
111
+        this.isShown = false
112
+
113
+        escape.call(this)
114
+
115
+        this.$element
116
+          .trigger('hide')
117
+          .removeClass('in')
118
+
119
+        $.support.transition && this.$element.hasClass('fade') ?
120
+          hideWithTransition.call(this) :
121
+          hideModal.call(this)
122
+
123
+        return this
124
+      }
125
+
126
+  }
127
+
128
+
129
+ /* MODAL PRIVATE METHODS
130
+  * ===================== */
131
+
132
+  function hideWithTransition() {
133
+    // firefox drops transitionEnd events :{o
134
+    var that = this
135
+      , timeout = setTimeout(function () {
136
+          that.$element.unbind(transitionEnd)
137
+          hideModal.call(that)
138
+        }, 500)
139
+
140
+    this.$element.one(transitionEnd, function () {
141
+      clearTimeout(timeout)
142
+      hideModal.call(that)
143
+    })
144
+  }
145
+
146
+  function hideModal (that) {
147
+    this.$element
148
+      .hide()
149
+      .trigger('hidden')
150
+
151
+    backdrop.call(this)
152
+  }
153
+
154
+  function backdrop ( callback ) {
155
+    var that = this
156
+      , animate = this.$element.hasClass('fade') ? 'fade' : ''
157
+    if ( this.isShown && this.settings.backdrop ) {
158
+      var doAnimate = $.support.transition && animate
159
+
160
+      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
161
+        .appendTo(document.body)
162
+
163
+      if ( this.settings.backdrop != 'static' ) {
164
+        this.$backdrop.click($.proxy(this.hide, this))
165
+      }
166
+
167
+      if ( doAnimate ) {
168
+        this.$backdrop[0].offsetWidth // force reflow
169
+      }
170
+
171
+      this.$backdrop.addClass('in')
172
+
173
+      doAnimate ?
174
+        this.$backdrop.one(transitionEnd, callback) :
175
+        callback()
176
+
177
+    } else if ( !this.isShown && this.$backdrop ) {
178
+      this.$backdrop.removeClass('in')
179
+
180
+      $.support.transition && this.$element.hasClass('fade')?
181
+        this.$backdrop.one(transitionEnd, $.proxy(removeBackdrop, this)) :
182
+        removeBackdrop.call(this)
183
+
184
+    } else if ( callback ) {
185
+       callback()
186
+    }
187
+  }
188
+
189
+  function removeBackdrop() {
190
+    this.$backdrop.remove()
191
+    this.$backdrop = null
192
+  }
193
+
194
+  function escape() {
195
+    var that = this
196
+    if ( this.isShown && this.settings.keyboard ) {
197
+      $(document).bind('keyup.modal', function ( e ) {
198
+        if ( e.which == 27 ) {
199
+          that.hide()
200
+        }
201
+      })
202
+    } else if ( !this.isShown ) {
203
+      $(document).unbind('keyup.modal')
204
+    }
205
+  }
206
+
207
+
208
+ /* MODAL PLUGIN DEFINITION
209
+  * ======================= */
210
+
211
+  $.fn.modal = function ( options ) {
212
+    var modal = this.data('modal')
213
+
214
+    if (!modal) {
215
+
216
+      if (typeof options == 'string') {
217
+        options = {
218
+          show: /show|toggle/.test(options)
219
+        }
220
+      }
221
+
222
+      return this.each(function () {
223
+        $(this).data('modal', new Modal(this, options))
224
+      })
225
+    }
226
+
227
+    if ( options === true ) {
228
+      return modal
229
+    }
230
+
231
+    if ( typeof options == 'string' ) {
232
+      modal[options]()
233
+    } else if ( modal ) {
234
+      modal.toggle()
235
+    }
236
+
237
+    return this
238
+  }
239
+
240
+  $.fn.modal.Modal = Modal
241
+
242
+  $.fn.modal.defaults = {
243
+    backdrop: false
244
+  , keyboard: false
245
+  , show: false
246
+  }
247
+
248
+
249
+ /* MODAL DATA- IMPLEMENTATION
250
+  * ========================== */
251
+
252
+  $(document).ready(function () {
253
+    $('body').delegate('[data-controls-modal]', 'click', function (e) {
254
+      e.preventDefault()
255
+      var $this = $(this).data('show', true)
256
+      $('#' + $this.attr('data-controls-modal')).modal( $this.data() )
257
+    })
258
+  })
259
+
260
+}( window.jQuery || window.ender );
0 261
new file mode 100755
... ...
@@ -0,0 +1,90 @@
1
+/* ===========================================================
2
+ * bootstrap-popover.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#popover
4
+ * ===========================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * =========================================================== */
19
+
20
+
21
+!function( $ ) {
22
+
23
+ "use strict"
24
+
25
+  var Popover = function ( element, options ) {
26
+    this.$element = $(element)
27
+    this.options = options
28
+    this.enabled = true
29
+    this.fixTitle()
30
+  }
31
+
32
+  /* NOTE: POPOVER EXTENDS BOOTSTRAP-TWIPSY.js
33
+     ========================================= */
34
+
35
+  Popover.prototype = $.extend({}, $.fn.twipsy.Twipsy.prototype, {
36
+
37
+    setContent: function () {
38
+      var $tip = this.tip()
39
+      $tip.find('.title')[this.options.html ? 'html' : 'text'](this.getTitle())
40
+      $tip.find('.content > *')[this.options.html ? 'html' : 'text'](this.getContent())
41
+      $tip[0].className = 'popover'
42
+    }
43
+
44
+  , hasContent: function () {
45
+      return this.getTitle() || this.getContent()
46
+    }
47
+
48
+  , getContent: function () {
49
+      var content
50
+       , $e = this.$element
51
+       , o = this.options
52
+
53
+      if (typeof this.options.content == 'string') {
54
+        content = $e.attr(this.options.content)
55
+      } else if (typeof this.options.content == 'function') {
56
+        content = this.options.content.call(this.$element[0])
57
+      }
58
+
59
+      return content
60
+    }
61
+
62
+  , tip: function() {
63
+      if (!this.$tip) {
64
+        this.$tip = $('<div class="popover" />')
65
+          .html(this.options.template)
66
+      }
67
+      return this.$tip
68
+    }
69
+
70
+  })
71
+
72
+
73
+ /* POPOVER PLUGIN DEFINITION
74
+  * ======================= */
75
+
76
+  $.fn.popover = function (options) {
77
+    if (typeof options == 'object') options = $.extend({}, $.fn.popover.defaults, options)
78
+    $.fn.twipsy.initWith.call(this, options, Popover, 'popover')
79
+    return this
80
+  }
81
+
82
+  $.fn.popover.defaults = $.extend({} , $.fn.twipsy.defaults, {
83
+    placement: 'right'
84
+  , content: 'data-content'
85
+  , template: '<div class="arrow"></div><div class="inner"><h3 class="title"></h3><div class="content"><p></p></div></div>'
86
+  })
87
+
88
+  $.fn.twipsy.rejectAttrOptions.push( 'content' )
89
+
90
+}( window.jQuery || window.ender );
0 91
new file mode 100755
... ...
@@ -0,0 +1,107 @@
1
+/* =============================================================
2
+ * bootstrap-scrollspy.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#scrollspy
4
+ * =============================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ============================================================== */
19
+
20
+
21
+!function ( $ ) {
22
+
23
+  "use strict"
24
+
25
+  var $window = $(window)
26
+
27
+  function ScrollSpy( topbar, selector ) {
28
+    var processScroll = $.proxy(this.processScroll, this)
29
+    this.$topbar = $(topbar)
30
+    this.selector = selector || 'li > a'
31
+    this.refresh()
32
+    this.$topbar.delegate(this.selector, 'click', processScroll)
33
+    $window.scroll(processScroll)
34
+    this.processScroll()
35
+  }
36
+
37
+  ScrollSpy.prototype = {
38
+
39
+      refresh: function () {
40
+        this.targets = this.$topbar.find(this.selector).map(function () {
41
+          var href = $(this).attr('href')
42
+          return /^#\w/.test(href) && $(href).length ? href : null
43
+        })
44
+
45
+        this.offsets = $.map(this.targets, function (id) {
46
+          return $(id).offset().top
47
+        })
48
+      }
49
+
50
+    , processScroll: function () {
51
+        var scrollTop = $window.scrollTop() + 10
52
+          , offsets = this.offsets
53
+          , targets = this.targets
54
+          , activeTarget = this.activeTarget
55
+          , i
56
+
57
+        for (i = offsets.length; i--;) {
58
+          activeTarget != targets[i]
59
+            && scrollTop >= offsets[i]
60
+            && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
61
+            && this.activateButton( targets[i] )
62
+        }
63
+      }
64
+
65
+    , activateButton: function (target) {
66
+        this.activeTarget = target
67
+
68
+        this.$topbar
69
+          .find(this.selector).parent('.active')
70
+          .removeClass('active')
71
+
72
+        this.$topbar
73
+          .find(this.selector + '[href="' + target + '"]')
74
+          .parent('li')
75
+          .addClass('active')
76
+      }
77
+
78
+  }
79
+
80
+  /* SCROLLSPY PLUGIN DEFINITION
81
+   * =========================== */
82
+
83
+  $.fn.scrollSpy = function( options ) {
84
+    var scrollspy = this.data('scrollspy')
85
+
86
+    if (!scrollspy) {
87
+      return this.each(function () {
88
+        $(this).data('scrollspy', new ScrollSpy( this, options ))
89
+      })
90
+    }
91
+
92
+    if ( options === true ) {
93
+      return scrollspy
94
+    }
95
+
96
+    if ( typeof options == 'string' ) {
97
+      scrollspy[options]()
98
+    }
99
+
100
+    return this
101
+  }
102
+
103
+  $(document).ready(function () {
104
+    $('body').scrollSpy('[data-scrollspy] li > a')
105
+  })
106
+
107
+}( window.jQuery || window.ender );
0 108
\ No newline at end of file
1 109
new file mode 100755
... ...
@@ -0,0 +1,80 @@
1
+/* ========================================================
2
+ * bootstrap-tabs.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#tabs
4
+ * ========================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ======================================================== */
19
+
20
+
21
+!function( $ ){
22
+
23
+  "use strict"
24
+
25
+  function activate ( element, container ) {
26
+    container
27
+      .find('> .active')
28
+      .removeClass('active')
29
+      .find('> .dropdown-menu > .active')
30
+      .removeClass('active')
31
+
32
+    element.addClass('active')
33
+
34
+    if ( element.parent('.dropdown-menu') ) {
35
+      element.closest('li.dropdown').addClass('active')
36
+    }
37
+  }
38
+
39
+  function tab( e ) {
40
+    var $this = $(this)
41
+      , $ul = $this.closest('ul:not(.dropdown-menu)')
42
+      , href = $this.attr('href')
43
+      , previous
44
+      , $href
45
+
46
+    if ( /^#\w+/.test(href) ) {
47
+      e.preventDefault()
48
+
49
+      if ( $this.parent('li').hasClass('active') ) {
50
+        return
51
+      }
52
+
53
+      previous = $ul.find('.active a').last()[0]
54
+      $href = $(href)
55
+
56
+      activate($this.parent('li'), $ul)
57
+      activate($href, $href.parent())
58
+
59
+      $this.trigger({
60
+        type: 'change'
61
+      , relatedTarget: previous
62
+      })
63
+    }
64
+  }
65
+
66
+
67
+ /* TABS/PILLS PLUGIN DEFINITION
68
+  * ============================ */
69
+
70
+  $.fn.tabs = $.fn.pills = function ( selector ) {
71
+    return this.each(function () {
72
+      $(this).delegate(selector || '.tabs li > a, .pills > li > a', 'click', tab)
73
+    })
74
+  }
75
+
76
+  $(document).ready(function () {
77
+    $('body').tabs('ul[data-tabs] li > a, ul[data-pills] > li > a')
78
+  })
79
+
80
+}( window.jQuery || window.ender );
0 81
new file mode 100755
... ...
@@ -0,0 +1,321 @@
1
+/* ==========================================================
2
+ * bootstrap-twipsy.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#twipsy
4
+ * Adapted from the original jQuery.tipsy by Jason Frame
5
+ * ==========================================================
6
+ * Copyright 2011 Twitter, Inc.
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ * ========================================================== */
20
+
21
+
22
+!function( $ ) {
23
+
24
+  "use strict"
25
+
26
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
27
+  * ======================================================= */
28
+
29
+  var transitionEnd
30
+
31
+  $(document).ready(function () {
32
+
33
+    $.support.transition = (function () {
34
+      var thisBody = document.body || document.documentElement
35
+        , thisStyle = thisBody.style
36
+        , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
37
+      return support
38
+    })()
39
+
40
+    // set CSS transition event type
41
+    if ( $.support.transition ) {
42
+      transitionEnd = "TransitionEnd"
43
+      if ( $.browser.webkit ) {
44
+      	transitionEnd = "webkitTransitionEnd"
45
+      } else if ( $.browser.mozilla ) {
46
+      	transitionEnd = "transitionend"
47
+      } else if ( $.browser.opera ) {
48
+      	transitionEnd = "oTransitionEnd"
49
+      }
50
+    }
51
+
52
+  })
53
+
54
+
55
+ /* TWIPSY PUBLIC CLASS DEFINITION
56
+  * ============================== */
57
+
58
+  var Twipsy = function ( element, options ) {
59
+    this.$element = $(element)
60
+    this.options = options
61
+    this.enabled = true
62
+    this.fixTitle()
63
+  }
64
+
65
+  Twipsy.prototype = {
66
+
67
+    show: function() {
68
+      var pos
69
+        , actualWidth
70
+        , actualHeight
71
+        , placement
72
+        , $tip
73
+        , tp
74
+
75
+      if (this.hasContent() && this.enabled) {
76
+        $tip = this.tip()
77
+        this.setContent()
78
+
79
+        if (this.options.animate) {
80
+          $tip.addClass('fade')
81
+        }
82
+
83
+        $tip
84
+          .remove()
85
+          .css({ top: 0, left: 0, display: 'block' })
86
+          .prependTo(document.body)
87
+
88
+        pos = $.extend({}, this.$element.offset(), {
89
+          width: this.$element[0].offsetWidth
90
+        , height: this.$element[0].offsetHeight
91
+        })
92
+
93
+        actualWidth = $tip[0].offsetWidth
94
+        actualHeight = $tip[0].offsetHeight
95
+
96
+        placement = maybeCall(this.options.placement, this, [ $tip[0], this.$element[0] ])
97
+
98
+        switch (placement) {
99
+          case 'below':
100
+            tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
101
+            break
102
+          case 'above':
103
+            tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
104
+            break
105
+          case 'left':
106
+            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}
107
+            break
108
+          case 'right':
109
+            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}
110
+            break
111
+        }
112
+
113
+        $tip
114
+          .css(tp)
115
+          .addClass(placement)
116
+          .addClass('in')
117
+      }
118
+    }
119
+
120
+  , setContent: function () {
121
+      var $tip = this.tip()
122
+      $tip.find('.twipsy-inner')[this.options.html ? 'html' : 'text'](this.getTitle())
123
+      $tip[0].className = 'twipsy'
124
+    }
125
+
126
+  , hide: function() {
127
+      var that = this
128
+        , $tip = this.tip()
129
+
130
+      $tip.removeClass('in')
131
+
132
+      function removeElement () {
133
+        $tip.remove()
134
+      }
135
+
136
+      $.support.transition && this.$tip.hasClass('fade') ?
137
+        $tip.bind(transitionEnd, removeElement) :
138
+        removeElement()
139
+    }
140
+
141
+  , fixTitle: function() {
142
+      var $e = this.$element
143
+      if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
144
+        $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
145
+      }
146
+    }
147
+
148
+  , hasContent: function () {
149
+      return this.getTitle()
150
+    }
151
+
152
+  , getTitle: function() {
153
+      var title
154
+        , $e = this.$element
155
+        , o = this.options
156
+
157
+        this.fixTitle()
158
+
159
+        if (typeof o.title == 'string') {
160
+          title = $e.attr(o.title == 'title' ? 'data-original-title' : o.title)
161
+        } else if (typeof o.title == 'function') {
162
+          title = o.title.call($e[0])
163
+        }
164
+
165
+        title = ('' + title).replace(/(^\s*|\s*$)/, "")
166
+
167
+        return title || o.fallback
168
+    }
169
+
170
+  , tip: function() {
171
+      return this.$tip = this.$tip || $('<div class="twipsy" />').html(this.options.template)
172
+    }
173
+
174
+  , validate: function() {
175
+      if (!this.$element[0].parentNode) {
176
+        this.hide()
177
+        this.$element = null
178
+        this.options = null
179
+      }
180
+    }
181
+
182
+  , enable: function() {
183
+      this.enabled = true
184
+    }
185
+
186
+  , disable: function() {
187
+      this.enabled = false
188
+    }
189
+
190
+  , toggleEnabled: function() {
191
+      this.enabled = !this.enabled
192
+    }
193
+
194
+  , toggle: function () {
195
+      this[this.tip().hasClass('in') ? 'hide' : 'show']()
196
+    }
197
+
198
+  }
199
+
200
+
201
+ /* TWIPSY PRIVATE METHODS
202
+  * ====================== */
203
+
204
+   function maybeCall ( thing, ctx, args ) {
205
+     return typeof thing == 'function' ? thing.apply(ctx, args) : thing
206
+   }
207
+
208
+ /* TWIPSY PLUGIN DEFINITION
209
+  * ======================== */
210
+
211
+  $.fn.twipsy = function (options) {
212
+    $.fn.twipsy.initWith.call(this, options, Twipsy, 'twipsy')
213
+    return this
214
+  }
215
+
216
+  $.fn.twipsy.initWith = function (options, Constructor, name) {
217
+    var twipsy
218
+      , binder
219
+      , eventIn
220
+      , eventOut
221
+
222
+    if (options === true) {
223
+      return this.data(name)
224
+    } else if (typeof options == 'string') {
225
+      twipsy = this.data(name)
226
+      if (twipsy) {
227
+        twipsy[options]()
228
+      }
229
+      return this
230
+    }
231
+
232
+    options = $.extend({}, $.fn[name].defaults, options)
233
+
234
+    function get(ele) {
235
+      var twipsy = $.data(ele, name)
236
+
237
+      if (!twipsy) {
238
+        twipsy = new Constructor(ele, $.fn.twipsy.elementOptions(ele, options))
239
+        $.data(ele, name, twipsy)
240
+      }
241
+
242
+      return twipsy
243
+    }
244
+
245
+    function enter() {
246
+      var twipsy = get(this)
247
+      twipsy.hoverState = 'in'
248
+
249
+      if (options.delayIn == 0) {
250
+        twipsy.show()
251
+      } else {
252
+        twipsy.fixTitle()
253
+        setTimeout(function() {
254
+          if (twipsy.hoverState == 'in') {
255
+            twipsy.show()
256
+          }
257
+        }, options.delayIn)
258
+      }
259
+    }
260
+
261
+    function leave() {
262
+      var twipsy = get(this)
263
+      twipsy.hoverState = 'out'
264
+      if (options.delayOut == 0) {
265
+        twipsy.hide()
266
+      } else {
267
+        setTimeout(function() {
268
+          if (twipsy.hoverState == 'out') {
269
+            twipsy.hide()
270
+          }
271
+        }, options.delayOut)
272
+      }
273
+    }
274
+
275
+    if (!options.live) {
276
+      this.each(function() {
277
+        get(this)
278
+      })
279
+    }
280
+
281
+    if (options.trigger != 'manual') {
282
+      binder   = options.live ? 'live' : 'bind'
283
+      eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus'
284
+      eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'
285
+      this[binder](eventIn, enter)[binder](eventOut, leave)
286
+    }
287
+
288
+    return this
289
+  }
290
+
291
+  $.fn.twipsy.Twipsy = Twipsy
292
+
293
+  $.fn.twipsy.defaults = {
294
+    animate: true
295
+  , delayIn: 0
296
+  , delayOut: 0
297
+  , fallback: ''
298
+  , placement: 'above'
299
+  , html: false
300
+  , live: false
301
+  , offset: 0
302
+  , title: 'title'
303
+  , trigger: 'hover'
304
+  , template: '<div class="twipsy-arrow"></div><div class="twipsy-inner"></div>'
305
+  }
306
+
307
+  $.fn.twipsy.rejectAttrOptions = [ 'title' ]
308
+
309
+  $.fn.twipsy.elementOptions = function(ele, options) {
310
+    var data = $(ele).data()
311
+      , rejects = $.fn.twipsy.rejectAttrOptions
312
+      , i = rejects.length
313
+
314
+    while (i--) {
315
+      delete data[rejects[i]]
316
+    }
317
+
318
+    return $.extend({}, options, data)
319
+  }
320
+
321
+}( window.jQuery || window.ender );
0 322
\ No newline at end of file
1 323
new file mode 100755
... ...
@@ -0,0 +1,16 @@
1
+//
2
+// LESS - Leaner CSS v1.1.5
3
+// http://lesscss.org
4
+// 
5
+// Copyright (c) 2009-2011, Alexis Sellier
6
+// Licensed under the Apache 2.0 License.
7
+//
8
+//
9
+// LESS - Leaner CSS v1.1.5
10
+// http://lesscss.org
11
+// 
12
+// Copyright (c) 2009-2011, Alexis Sellier
13
+// Licensed under the Apache 2.0 License.
14
+//
15
+(function(a,b){function c(b){return a.less[b.split("/")[1]]}function l(){var a=document.getElementsByTagName("style");for(var b=0;b<a.length;b++)a[b].type.match(j)&&(new d.Parser).parse(a[b].innerHTML||"",function(c,d){var e=d.toCSS(),f=a[b];try{f.innerHTML=e}catch(g){f.styleSheets.cssText=e}f.type="text/css"})}function m(a,b){for(var c=0;c<d.sheets.length;c++)n(d.sheets[c],a,b,d.sheets.length-(c+1))}function n(b,c,e,f){var h=a.location.href.replace(/[#?].*$/,""),i=b.href.replace(/\?.*$/,""),j=g&&g.getItem(i),k=g&&g.getItem(i+":timestamp"),l={css:j,timestamp:k};/^(https?|file):/.test(i)||(i.charAt(0)=="/"?i=a.location.protocol+"//"+a.location.host+i:i=h.slice(0,h.lastIndexOf("/")+1)+i),q(b.href,b.type,function(a,g){if(!e&&l&&g&&(new Date(g)).valueOf()===(new Date(l.timestamp)).valueOf())p(l.css,b),c(null,b,{local:!0,remaining:f});else try{(new d.Parser({optimization:d.optimization,paths:[i.replace(/[\w\.-]+$/,"")],mime:b.type})).parse(a,function(a,d){if(a)return u(a,i);try{c(d,b,{local:!1,lastModified:g,remaining:f}),s(document.getElementById("less-error-message:"+o(i)))}catch(a){u(a,i)}})}catch(h){u(h,i)}},function(a,b){throw new Error("Couldn't load "+b+" ("+a+")")})}function o(a){return a.replace(/^[a-z]+:\/\/?[^\/]+/,"").replace(/^\//,"").replace(/\?.*$/,"").replace(/\.[^\.\/]+$/,"").replace(/[^\.\w-]+/g,"-").replace(/\./g,":")}function p(a,b,c){var d,e=b.href?b.href.replace(/\?.*$/,""):"",f="less:"+(b.title||o(e));(d=document.getElementById(f))===null&&(d=document.createElement("style"),d.type="text/css",d.media=b.media||"screen",d.id=f,document.getElementsByTagName("head")[0].appendChild(d));if(d.styleSheet)try{d.styleSheet.cssText=a}catch(h){throw new Error("Couldn't reassign styleSheet.cssText.")}else(function(a){d.childNodes.length>0?d.firstChild.nodeValue!==a.nodeValue&&d.replaceChild(a,d.firstChild):d.appendChild(a)})(document.createTextNode(a));c&&g&&(t("saving "+e+" to cache."),g.setItem(e,a),g.setItem(e+":timestamp",c))}function q(a,b,c,e){function i(b,c,d){b.status>=200&&b.status<300?c(b.responseText,b.getResponseHeader("Last-Modified")):typeof d=="function"&&d(b.status,a)}var g=r(),h=f?!1:d.async;typeof g.overrideMimeType=="function"&&g.overrideMimeType("text/css"),g.open("GET",a,h),g.setRequestHeader("Accept",b||"text/x-less, text/css; q=0.9, */*; q=0.5"),g.send(null),f?g.status===0?c(g.responseText):e(g.status,a):h?g.onreadystatechange=function(){g.readyState==4&&i(g,c,e)}:i(g,c,e)}function r(){if(a.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(b){return t("browser doesn't support AJAX."),null}}function s(a){return a&&a.parentNode.removeChild(a)}function t(a){d.env=="development"&&typeof console!="undefined"&&console.log("less: "+a)}function u(a,b){var c="less-error-message:"+o(b),e=["<ul>",'<li><label>[-1]</label><pre class="ctx">{0}</pre></li>',"<li><label>[0]</label><pre>{current}</pre></li>",'<li><label>[1]</label><pre class="ctx">{2}</pre></li>',"</ul>"].join("\n"),f=document.createElement("div"),g,h;f.id=c,f.className="less-error-message",h="<h3>"+(a.message||"There is an error in your .less file")+"</h3>"+'<p><a href="'+b+'">'+b+"</a> ",a.extract&&(h+="on line "+a.line+", column "+(a.column+1)+":</p>"+e.replace(/\[(-?\d)\]/g,function(b,c){return parseInt(a.line)+parseInt(c)||""}).replace(/\{(\d)\}/g,function(b,c){return a.extract[parseInt(c)]||""}).replace(/\{current\}/,a.extract[1].slice(0,a.column)+'<span class="error">'+a.extract[1].slice(a.column)+"</span>")),f.innerHTML=h,p([".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #ee4444;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.ctx {","color: #dd4444;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),f.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),d.env=="development"&&(g=setInterval(function(){document.body&&(document.getElementById(c)?document.body.replaceChild(f,document.getElementById(c)):document.body.insertBefore(f,document.body.firstChild),clearInterval(g))},10))}Array.isArray||(Array.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"||a instanceof Array}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c=this.length>>>0;for(var d=0;d<c;d++)d in this&&a.call(b,this[d],d,this)}),Array.prototype.map||(Array.prototype.map=function(a){var b=this.length>>>0,c=new Array(b),d=arguments[1];for(var e=0;e<b;e++)e in this&&(c[e]=a.call(d,this[e],e,this));return c}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=[],c=arguments[1];for(var d=0;d<this.length;d++)a.call(c,this[d])&&b.push(this[d]);return b}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=this.length>>>0,c=0;if(b===0&&arguments.length===1)throw new TypeError;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}while(!0);for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=this.length,c=arguments[1]||0;if(!b)return-1;if(c>=b)return-1;c<0&&(c+=b);for(;c<b;c++){if(!Object.prototype.hasOwnProperty.call(this,c))continue;if(a===this[c])return c}return-1}),Object.keys||(Object.keys=function(a){var b=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b}),String.prototype.trim||(String.prototype.trim=function(){return String(this).replace(/^\s\s*/,"").replace(/\s\s*$/,"")});var d,e;typeof environment=="object"&&{}.toString.call(environment)==="[object Environment]"?(d={},e=d.tree={},d.mode="rhino"):typeof a=="undefined"?(d=exports,e=c("./tree"),d.mode="rhino"):(typeof a.less=="undefined"&&(a.less={}),d=a.less,e=a.less.tree={},d.mode="browser"),d.Parser=function(a){function p(){g=j[f],h=c,k=c}function q(){j[f]=g,c=h,k=c}function r(){c>k&&(j[f]=j[f].slice(c-k),k=c)}function s(a){var d,e,g,h,i,m,n,o;if(a instanceof Function)return a.call(l.parsers);if(typeof a=="string")d=b.charAt(c)===a?a:null,g=1,r();else{r();if(d=a.exec(j[f]))g=d[0].length;else return null}if(d){o=c+=g,m=c+j[f].length-g;while(c<m){h=b.charCodeAt(c);if(h!==32&&h!==10&&h!==9)break;c++}return j[f]=j[f].slice(g+(c-o)),k=c,j[f].length===0&&f<j.length-1&&f++,typeof d=="string"?d:d.length===1?d[0]:d}}function t(a){return typeof a=="string"?b.charAt(c)===a:a.test(j[f])?!0:!1}var b,c,f,g,h,i,j,k,l,m=this,n=function(){},o=this.imports={paths:a&&a.paths||[],queue:[],files:{},mime:a&&a.mime,push:function(b,c){var e=this;this.queue.push(b),d.Parser.importer(b,this.paths,function(a){e.queue.splice(e.queue.indexOf(b),1),e.files[b]=a,c(a),e.queue.length===0&&n()},a)}};return this.env=a=a||{},this.optimization="optimization"in this.env?this.env.optimization:1,this.env.filename=this.env.filename||null,l={imports:o,parse:function(d,g){var h,l,m,o,p,q,r=[],t,u=null;c=f=k=i=0,j=[],b=d.replace(/\r\n/g,"\n"),j=function(c){var d=0,e=/[^"'`\{\}\/\(\)]+/g,f=/\/\*(?:[^*]|\*+[^\/*])*\*+\/|\/\/.*/g,g=0,h,i=c[0],j,k;for(var l=0,m,n;l<b.length;l++){e.lastIndex=l,(h=e.exec(b))&&h.index===l&&(l+=h[0].length,i.push(h[0])),m=b.charAt(l),f.lastIndex=l,!k&&!j&&m==="/"&&(n=b.charAt(l+1),(n==="/"||n==="*")&&(h=f.exec(b))&&h.index===l&&(l+=h[0].length,i.push(h[0]),m=b.charAt(l)));if(m==="{"&&!k&&!j)g++,i.push(m);else if(m==="}"&&!k&&!j)g--,i.push(m),c[++d]=i=[];else if(m==="("&&!k&&!j)i.push(m),j=!0;else if(m===")"&&!k&&j)i.push(m),j=!1;else{if(m==='"'||m==="'"||m==="`")k?k=k===m?!1:k:k=m;i.push(m)}}if(g>0)throw{type:"Syntax",message:"Missing closing `}`",filename:a.filename};return c.map(function(a){return a.join("")})}([[]]),h=new e.Ruleset([],s(this.parsers.primary)),h.root=!0,h.toCSS=function(c){var d,f,g;return function(g,h){function n(a){return a?(b.slice(0,a).match(/\n/g)||"").length:null}var i=[];g=g||{},typeof h=="object"&&!Array.isArray(h)&&(h=Object.keys(h).map(function(a){var b=h[a];return b instanceof e.Value||(b instanceof e.Expression||(b=new e.Expression([b])),b=new e.Value([b])),new e.Rule("@"+a,b,!1,0)}),i=[new e.Ruleset(null,h)]);try{var j=c.call(this,{frames:i}).toCSS([],{compress:g.compress||!1})}catch(k){f=b.split("\n"),d=n(k.index);for(var l=k.index,m=-1;l>=0&&b.charAt(l)!=="\n";l--)m++;throw{type:k.type,message:k.message,filename:a.filename,index:k.index,line:typeof d=="number"?d+1:null,callLine:k.call&&n(k.call)+1,callExtract:f[n(k.call)],stack:k.stack,column:m,extract:[f[d-1],f[d],f[d+1]]}}return g.compress?j.replace(/(\s)+/g,"$1"):j}}(h.eval);if(c<b.length-1){c=i,q=b.split("\n"),p=(b.slice(0,c).match(/\n/g)||"").length+1;for(var v=c,w=-1;v>=0&&b.charAt(v)!=="\n";v--)w++;u={name:"ParseError",message:"Syntax Error on line "+p,index:c,filename:a.filename,line:p,column:w,extract:[q[p-2],q[p-1],q[p]]}}this.imports.queue.length>0?n=function(){g(u,h)}:g(u,h)},parsers:{primary:function(){var a,b=[];while((a=s(this.mixin.definition)||s(this.rule)||s(this.ruleset)||s(this.mixin.call)||s(this.comment)||s(this.directive))||s(/^[\s\n]+/))a&&b.push(a);return b},comment:function(){var a;if(b.charAt(c)!=="/")return;if(b.charAt(c+1)==="/")return new e.Comment(s(/^\/\/.*/),!0);if(a=s(/^\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/))return new e.Comment(a)},entities:{quoted:function(){var a,d=c,f;b.charAt(d)==="~"&&(d++,f=!0);if(b.charAt(d)!=='"'&&b.charAt(d)!=="'")return;f&&s("~");if(a=s(/^"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'/))return new e.Quoted(a[0],a[1]||a[2],f)},keyword:function(){var a;if(a=s(/^[_A-Za-z-][_A-Za-z0-9-]*/))return new e.Keyword(a)},call:function(){var a,b,d=c;if(!(a=/^([\w-]+|%)\(/.exec(j[f])))return;a=a[1].toLowerCase();if(a==="url")return null;c+=a.length;if(a==="alpha")return s(this.alpha);s("("),b=s(this.entities.arguments);if(!s(")"))return;if(a)return new e.Call(a,b,d)},arguments:function(){var a=[],b;while(b=s(this.expression)){a.push(b);if(!s(","))break}return a},literal:function(){return s(this.entities.dimension)||s(this.entities.color)||s(this.entities.quoted)},url:function(){var a;if(b.charAt(c)!=="u"||!s(/^url\(/))return;a=s(this.entities.quoted)||s(this.entities.variable)||s(this.entities.dataURI)||s(/^[-\w%@$\/.&=:;#+?~]+/)||"";if(!s(")"))throw new Error("missing closing ) for url()");return new e.URL(a.value||a.data||a instanceof e.Variable?a:new e.Anonymous(a),o.paths)},dataURI:function(){var a;if(s(/^data:/)){a={},a.mime=s(/^[^\/]+\/[^,;)]+/)||"",a.charset=s(/^;\s*charset=[^,;)]+/)||"",a.base64=s(/^;\s*base64/)||"",a.data=s(/^,\s*[^)]+/);if(a.data)return a}},variable:function(){var a,d=c;if(b.charAt(c)==="@"&&(a=s(/^@@?[\w-]+/)))return new e.Variable(a,d)},color:function(){var a;if(b.charAt(c)==="#"&&(a=s(/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})/)))return new e.Color(a[1])},dimension:function(){var a,d=b.charCodeAt(c);if(d>57||d<45||d===47)return;if(a=s(/^(-?\d*\.?\d+)(px|%|em|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn)?/))return new e.Dimension(a[1],a[2])},javascript:function(){var a,d=c,f;b.charAt(d)==="~"&&(d++,f=!0);if(b.charAt(d)!=="`")return;f&&s("~");if(a=s(/^`([^`]*)`/))return new e.JavaScript(a[1],c,f)}},variable:function(){var a;if(b.charAt(c)==="@"&&(a=s(/^(@[\w-]+)\s*:/)))return a[1]},shorthand:function(){var a,b;if(!t(/^[@\w.%-]+\/[@\w.-]+/))return;if((a=s(this.entity))&&s("/")&&(b=s(this.entity)))return new e.Shorthand(a,b)},mixin:{call:function(){var a=[],d,f,g,h=c,i=b.charAt(c);if(i!=="."&&i!=="#")return;while(d=s(/^[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/))a.push(new e.Element(f,d,c)),f=s(">");s("(")&&(g=s(this.entities.arguments))&&s(")");if(a.length>0&&(s(";")||t("}")))return new e.mixin.Call(a,g,h)},definition:function(){var a,d=[],f,g,h,i;if(b.charAt(c)!=="."&&b.charAt(c)!=="#"||t(/^[^{]*(;|})/))return;if(f=s(/^([#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+)\s*\(/)){a=f[1];while(h=s(this.entities.variable)||s(this.entities.literal)||s(this.entities.keyword)){if(h instanceof e.Variable)if(s(":"))if(i=s(this.expression))d.push({name:h.name,value:i});else throw new Error("Expected value");else d.push({name:h.name});else d.push({value:h});if(!s(","))break}if(!s(")"))throw new Error("Expected )");g=s(this.block);if(g)return new e.mixin.Definition(a,d,g)}}},entity:function(){return s(this.entities.literal)||s(this.entities.variable)||s(this.entities.url)||s(this.entities.call)||s(this.entities.keyword)||s(this.entities.javascript)||s(this.comment)},end:function(){return s(";")||t("}")},alpha:function(){var a;if(!s(/^\(opacity=/i))return;if(a=s(/^\d+/)||s(this.entities.variable)){if(!s(")"))throw new Error("missing closing ) for alpha()");return new e.Alpha(a)}},element:function(){var a,b,d;d=s(this.combinator),a=s(/^(?:\d+\.\d+|\d+)%/)||s(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)||s("*")||s(this.attribute)||s(/^\([^)@]+\)/);if(a)return new e.Element(d,a,c);if(d.value&&d.value.charAt(0)==="&")return new e.Element(d,null,c)},combinator:function(){var a,d=b.charAt(c);if(d===">"||d==="+"||d==="~"){c++;while(b.charAt(c)===" ")c++;return new e.Combinator(d)}if(d==="&"){a="&",c++,b.charAt(c)===" "&&(a="& ");while(b.charAt(c)===" ")c++;return new e.Combinator(a)}if(d===":"&&b.charAt(c+1)===":"){c+=2;while(b.charAt(c)===" ")c++;return new e.Combinator("::")}return b.charAt(c-1)===" "?new e.Combinator(" "):new e.Combinator(null)},selector:function(){var a,d,f=[],g,h;while(d=s(this.element)){g=b.charAt(c),f.push(d);if(g==="{"||g==="}"||g===";"||g===",")break}if(f.length>0)return new e.Selector(f)},tag:function(){return s(/^[a-zA-Z][a-zA-Z-]*[0-9]?/)||s("*")},attribute:function(){var a="",b,c,d;if(!s("["))return;if(b=s(/^[a-zA-Z-]+/)||s(this.entities.quoted))(d=s(/^[|~*$^]?=/))&&(c=s(this.entities.quoted)||s(/^[\w-]+/))?a=[b,d,c.toCSS?c.toCSS():c].join(""):a=b;if(!s("]"))return;if(a)return"["+a+"]"},block:function(){var a;if(s("{")&&(a=s(this.primary))&&s("}"))return a},ruleset:function(){var a=[],b,d,f;p();while(b=s(this.selector)){a.push(b),s(this.comment);if(!s(","))break;s(this.comment)}if(a.length>0&&(d=s(this.block)))return new e.Ruleset(a,d);i=c,q()},rule:function(){var a,d,g=b.charAt(c),k,l;p();if(g==="."||g==="#"||g==="&")return;if(a=s(this.variable)||s(this.property)){a.charAt(0)!="@"&&(l=/^([^@+\/'"*`(;{}-]*);/.exec(j[f]))?(c+=l[0].length-1,d=new e.Anonymous(l[1])):a==="font"?d=s(this.font):d=s(this.value),k=s(this.important);if(d&&s(this.end))return new e.Rule(a,d,k,h);i=c,q()}},"import":function(){var a;if(s(/^@import\s+/)&&(a=s(this.entities.quoted)||s(this.entities.url))&&s(";"))return new e.Import(a,o)},directive:function(){var a,d,f,g;if(b.charAt(c)!=="@")return;if(d=s(this["import"]))return d;if(a=s(/^@media|@page/)||s(/^@(?:-webkit-|-moz-)?keyframes/)){g=(s(/^[^{]+/)||"").trim();if(f=s(this.block))return new e.Directive(a+" "+g,f)}else if(a=s(/^@[-a-z]+/))if(a==="@font-face"){if(f=s(this.block))return new e.Directive(a,f)}else if((d=s(this.entity))&&s(";"))return new e.Directive(a,d)},font:function(){var a=[],b=[],c,d,f,g;while(g=s(this.shorthand)||s(this.entity))b.push(g);a.push(new e.Expression(b));if(s(","))while(g=s(this.expression)){a.push(g);if(!s(","))break}return new e.Value(a)},value:function(){var a,b=[],c;while(a=s(this.expression)){b.push(a);if(!s(","))break}if(b.length>0)return new e.Value(b)},important:function(){if(b.charAt(c)==="!")return s(/^! *important/)},sub:function(){var a;if(s("(")&&(a=s(this.expression))&&s(")"))return a},multiplication:function(){var a,b,c,d;if(a=s(this.operand)){while((c=s("/")||s("*"))&&(b=s(this.operand)))d=new e.Operation(c,[d||a,b]);return d||a}},addition:function(){var a,d,f,g;if(a=s(this.multiplication)){while((f=s(/^[-+]\s+/)||b.charAt(c-1)!=" "&&(s("+")||s("-")))&&(d=s(this.multiplication)))g=new e.Operation(f,[g||a,d]);return g||a}},operand:function(){var a,d=b.charAt(c+1);b.charAt(c)==="-"&&(d==="@"||d==="(")&&(a=s("-"));var f=s(this.sub)||s(this.entities.dimension)||s(this.entities.color)||s(this.entities.variable)||s(this.entities.call);return a?new e.Operation("*",[new e.Dimension(-1),f]):f},expression:function(){var a,b,c=[],d;while(a=s(this.addition)||s(this.entity))c.push(a);if(c.length>0)return new e.Expression(c)},property:function(){var a;if(a=s(/^(\*?-?[-a-z_0-9]+)\s*:/))return a[1]}}}};if(d.mode==="browser"||d.mode==="rhino")d.Parser.importer=function(a,b,c,d){a.charAt(0)!=="/"&&b.length>0&&(a=b[0]+a),n({href:a,title:a,type:d.mime},c,!0)};(function(a){function b(b){return a.functions.hsla(b.h,b.s,b.l,b.a)}function c(b){if(b instanceof a.Dimension)return parseFloat(b.unit=="%"?b.value/100:b.value);if(typeof b=="number")return b;throw{error:"RuntimeError",message:"color functions take numbers as parameters"}}function d(a){return Math.min(1,Math.max(0,a))}a.functions={rgb:function(a,b,c){return this.rgba(a,b,c,1)},rgba:function(b,d,e,f){var g=[b,d,e].map(function(a){return c(a)}),f=c(f);return new a.Color(g,f)},hsl:function(a,b,c){return this.hsla(a,b,c,1)},hsla:function(a,b,d,e){function h(a){return a=a<0?a+1:a>1?a-1:a,a*6<1?g+(f-g)*a*6:a*2<1?f:a*3<2?g+(f-g)*(2/3-a)*6:g}a=c(a)%360/360,b=c(b),d=c(d),e=c(e);var f=d<=.5?d*(b+1):d+b-d*b,g=d*2-f;return this.rgba(h(a+1/3)*255,h(a)*255,h(a-1/3)*255,e)},hue:function(b){return new a.Dimension(Math.round(b.toHSL().h))},saturation:function(b){return new a.Dimension(Math.round(b.toHSL().s*100),"%")},lightness:function(b){return new a.Dimension(Math.round(b.toHSL().l*100),"%")},alpha:function(b){return new a.Dimension(b.toHSL().a)},saturate:function(a,c){var e=a.toHSL();return e.s+=c.value/100,e.s=d(e.s),b(e)},desaturate:function(a,c){var e=a.toHSL();return e.s-=c.value/100,e.s=d(e.s),b(e)},lighten:function(a,c){var e=a.toHSL();return e.l+=c.value/100,e.l=d(e.l),b(e)},darken:function(a,c){var e=a.toHSL();return e.l-=c.value/100,e.l=d(e.l),b(e)},fadein:function(a,c){var e=a.toHSL();return e.a+=c.value/100,e.a=d(e.a),b(e)},fadeout:function(a,c){var e=a.toHSL();return e.a-=c.value/100,e.a=d(e.a),b(e)},fade:function(a,c){var e=a.toHSL();return e.a=c.value/100,e.a=d(e.a),b(e)},spin:function(a,c){var d=a.toHSL(),e=(d.h+c.value)%360;return d.h=e<0?360+e:e,b(d)},mix:function(b,c,d){var e=d.value/100,f=e*2-1,g=b.toHSL().a-c.toHSL().a,h=((f*g==-1?f:(f+g)/(1+f*g))+1)/2,i=1-h,j=[b.rgb[0]*h+c.rgb[0]*i,b.rgb[1]*h+c.rgb[1]*i,b.rgb[2]*h+c.rgb[2]*i],k=b.alpha*e+c.alpha*(1-e);return new a.Color(j,k)},greyscale:function(b){return this.desaturate(b,new a.Dimension(100))},e:function(b){return new a.Anonymous(b instanceof a.JavaScript?b.evaluated:b)},escape:function(b){return new a.Anonymous(encodeURI(b.value).replace(/=/g,"%3D").replace(/:/g,"%3A").replace(/#/g,"%23").replace(/;/g,"%3B").replace(/\(/g,"%28").replace(/\)/g,"%29"))},"%":function(b){var c=Array.prototype.slice.call(arguments,1),d=b.value;for(var e=0;e<c.length;e++)d=d.replace(/%[sda]/i,function(a){var b=a.match(/s/i)?c[e].value:c[e].toCSS();return a.match(/[A-Z]$/)?encodeURIComponent(b):b});return d=d.replace(/%%/g,"%"),new a.Quoted('"'+d+'"',d)},round:function(b){if(b instanceof a.Dimension)return new a.Dimension(Math.round(c(b)),b.unit);if(typeof b=="number")return Math.round(b);throw{error:"RuntimeError",message:"math functions take numbers as parameters"}},argb:function(b){return new a.Anonymous(b.toARGB())}}})(c("./tree")),function(a){a.Alpha=function(a){this.value=a},a.Alpha.prototype={toCSS:function(){return"alpha(opacity="+(this.value.toCSS?this.value.toCSS():this.value)+")"},eval:function(a){return this.value.eval&&(this.value=this.value.eval(a)),this}}}(c("../tree")),function(a){a.Anonymous=function(a){this.value=a.value||a},a.Anonymous.prototype={toCSS:function(){return this.value},eval:function(){return this}}}(c("../tree")),function(a){a.Call=function(a,b,c){this.name=a,this.args=b,this.index=c},a.Call.prototype={eval:function(b){var c=this.args.map(function(a){return a.eval(b)});if(!(this.name in a.functions))return new a.Anonymous(this.name+"("+c.map(function(a){return a.toCSS()}).join(", ")+")");try{return a.functions[this.name].apply(a.functions,c)}catch(d){throw{message:"error evaluating function `"+this.name+"`",index:this.index}}},toCSS:function(a){return this.eval(a).toCSS()}}}(c("../tree")),function(a){a.Color=function(a,b){Array.isArray(a)?this.rgb=a:a.length==6?this.rgb=a.match(/.{2}/g).map(function(a){return parseInt(a,16)}):this.rgb=a.split("").map(function(a){return parseInt(a+a,16)}),this.alpha=typeof b=="number"?b:1},a.Color.prototype={eval:function(){return this},toCSS:function(){return this.alpha<1?"rgba("+this.rgb.map(function(a){return Math.round(a)}).concat(this.alpha).join(", ")+")":"#"+this.rgb.map(function(a){return a=Math.round(a),a=(a>255?255:a<0?0:a).toString(16),a.length===1?"0"+a:a}).join("")},operate:function(b,c){var d=[];c instanceof a.Color||(c=c.toColor());for(var e=0;e<3;e++)d[e]=a.operate(b,this.rgb[e],c.rgb[e]);return new a.Color(d,this.alpha+c.alpha)},toHSL:function(){var a=this.rgb[0]/255,b=this.rgb[1]/255,c=this.rgb[2]/255,d=this.alpha,e=Math.max(a,b,c),f=Math.min(a,b,c),g,h,i=(e+f)/2,j=e-f;if(e===f)g=h=0;else{h=i>.5?j/(2-e-f):j/(e+f);switch(e){case a:g=(b-c)/j+(b<c?6:0);break;case b:g=(c-a)/j+2;break;case c:g=(a-b)/j+4}g/=6}return{h:g*360,s:h,l:i,a:d}},toARGB:function(){var a=[Math.round(this.alpha*255)].concat(this.rgb);return"#"+a.map(function(a){return a=Math.round(a),a=(a>255?255:a<0?0:a).toString(16),a.length===1?"0"+a:a}).join("")}}}(c("../tree")),function(a){a.Comment=function(a,b){this.value=a,this.silent=!!b},a.Comment.prototype={toCSS:function(a){return a.compress?"":this.value},eval:function(){return this}}}(c("../tree")),function(a){a.Dimension=function(a,b){this.value=parseFloat(a),this.unit=b||null},a.Dimension.prototype={eval:function(){return this},toColor:function(){return new a.Color([this.value,this.value,this.value])},toCSS:function(){var a=this.value+this.unit;return a},operate:function(b,c){return new a.Dimension(a.operate(b,this.value,c.value),this.unit||c.unit)}}}(c("../tree")),function(a){a.Directive=function(b,c){this.name=b,Array.isArray(c)?this.ruleset=new a.Ruleset([],c):this.value=c},a.Directive.prototype={toCSS:function(a,b){return this.ruleset?(this.ruleset.root=!0,this.name+(b.compress?"{":" {\n  ")+this.ruleset.toCSS(a,b).trim().replace(/\n/g,"\n  ")+(b.compress?"}":"\n}\n")):this.name+" "+this.value.toCSS()+";\n"},eval:function(a){return a.frames.unshift(this),this.ruleset=this.ruleset&&this.ruleset.eval(a),a.frames.shift(),this},variable:function(b){return a.Ruleset.prototype.variable.call(this.ruleset,b)},find:function(){return a.Ruleset.prototype.find.apply(this.ruleset,arguments)},rulesets:function(){return a.Ruleset.prototype.rulesets.apply(this.ruleset)}}}(c("../tree")),function(a){a.Element=function(b,c,d){this.combinator=b instanceof a.Combinator?b:new a.Combinator(b),this.value=c?c.trim():"",this.index=d},a.Element.prototype.toCSS=function(a){return this.combinator.toCSS(a||{})+this.value},a.Combinator=function(a){a===" "?this.value=" ":a==="& "?this.value="& ":this.value=a?a.trim():""},a.Combinator.prototype.toCSS=function(a){return{"":""," ":" ","&":"","& ":" ",":":" :","::":"::","+":a.compress?"+":" + ","~":a.compress?"~":" ~ ",">":a.compress?">":" > "}[this.value]}}(c("../tree")),function(a){a.Expression=function(a){this.value=a},a.Expression.prototype={eval:function(b){return this.value.length>1?new a.Expression(this.value.map(function(a){return a.eval(b)})):this.value.length===1?this.value[0].eval(b):this},toCSS:function(a){return this.value.map(function(b){return b.toCSS(a)}).join(" ")}}}(c("../tree")),function(a){a.Import=function(b,c){var d=this;this._path=b,b instanceof a.Quoted?this.path=/\.(le?|c)ss(\?.*)?$/.test(b.value)?b.value:b.value+".less":this.path=b.value.value||b.value,this.css=/css(\?.*)?$/.test(this.path),this.css||c.push(this.path,function(a){if(!a)throw new Error("Error parsing "+d.path);d.root=a})},a.Import.prototype={toCSS:function(){return this.css?"@import "+this._path.toCSS()+";\n":""},eval:function(b){var c;if(this.css)return this;c=new a.Ruleset(null,this.root.rules.slice(0));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.Import&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));return c.rules}}}(c("../tree")),function(a){a.JavaScript=function(a,b,c){this.escaped=c,this.expression=a,this.index=b},a.JavaScript.prototype={eval:function(b){var c,d=this,e={},f=this.expression.replace(/@\{([\w-]+)\}/g,function(c,e){return a.jsify((new a.Variable("@"+e,d.index)).eval(b))});try{f=new Function("return ("+f+")")}catch(g){throw{message:"JavaScript evaluation error: `"+f+"`",index:this.index}}for(var h in b.frames[0].variables())e[h.slice(1)]={value:b.frames[0].variables()[h].value,toJS:function(){return this.value.eval(b).toCSS()}};try{c=f.call(e)}catch(g){throw{message:"JavaScript evaluation error: '"+g.name+": "+g.message+"'",index:this.index}}return typeof c=="string"?new a.Quoted('"'+c+'"',c,this.escaped,this.index):Array.isArray(c)?new a.Anonymous(c.join(", ")):new a.Anonymous(c)}}}(c("../tree")),function(a){a.Keyword=function(a){this.value=a},a.Keyword.prototype={eval:function(){return this},toCSS:function(){return this.value}}}(c("../tree")),function(a){a.mixin={},a.mixin.Call=function(b,c,d){this.selector=new a.Selector(b),this.arguments=c,this.index=d},a.mixin.Call.prototype={eval:function(a){var b,c,d=[],e=!1;for(var f=0;f<a.frames.length;f++)if((b=a.frames[f].find(this.selector)).length>0){c=this.arguments&&this.arguments.map(function(b){return b.eval(a)});for(var g=0;g<b.length;g++)if(b[g].match(c,a))try{Array.prototype.push.apply(d,b[g].eval(a,this.arguments).rules),e=!0}catch(h){throw{message:h.message,index:h.index,stack:h.stack,call:this.index}}if(e)return d;throw{message:"No matching definition was found for `"+this.selector.toCSS().trim()+"("+this.arguments.map(function(a){return a.toCSS()}).join(", ")+")`",index:this.index}}throw{message:this.selector.toCSS().trim()+" is undefined",index:this.index}}},a.mixin.Definition=function(b,c,d){this.name=b,this.selectors=[new a.Selector([new a.Element(null,b)])],this.params=c,this.arity=c.length,this.rules=d,this._lookups={},this.required=c.reduce(function(a,b){return!b.name||b.name&&!b.value?a+1:a},0),this.parent=a.Ruleset.prototype,this.frames=[]},a.mixin.Definition.prototype={toCSS:function(){return""},variable:function(a){return this.parent.variable.call(this,a)},variables:function(){return this.parent.variables.call(this)},find:function(){return this.parent.find.apply(this,arguments)},rulesets:function(){return this.parent.rulesets.apply(this)},eval:function(b,c){var d=new a.Ruleset(null,[]),e,f=[];for(var g=0,h;g<this.params.length;g++)if(this.params[g].name)if(h=c&&c[g]||this.params[g].value)d.rules.unshift(new a.Rule(this.params[g].name,h.eval(b)));else throw{message:"wrong number of arguments for "+this.name+" ("+c.length+" for "+this.arity+")"};for(var g=0;g<Math.max(this.params.length,c&&c.length);g++)f.push(c[g]||this.params[g].value);return d.rules.unshift(new a.Rule("@arguments",(new a.Expression(f)).eval(b))),(new a.Ruleset(null,this.rules.slice(0))).eval({frames:[this,d].concat(this.frames,b.frames)})},match:function(a,b){var c=a&&a.length||0,d;if(c<this.required)return!1;if(this.required>0&&c>this.params.length)return!1;d=Math.min(c,this.arity);for(var e=0;e<d;e++)if(!this.params[e].name&&a[e].eval(b).toCSS()!=this.params[e].value.eval(b).toCSS())return!1;return!0}}}(c("../tree")),function(a){a.Operation=function(a,b){this.op=a.trim(),this.operands=b},a.Operation.prototype.eval=function(b){var c=this.operands[0].eval(b),d=this.operands[1].eval(b),e;if(c instanceof a.Dimension&&d instanceof a.Color)if(this.op==="*"||this.op==="+")e=d,d=c,c=e;else throw{name:"OperationError",message:"Can't substract or divide a color from a number"};return c.operate(this.op,d)},a.operate=function(a,b,c){switch(a){case"+":return b+c;case"-":return b-c;case"*":return b*c;case"/":return b/c}}}(c("../tree")),function(a){a.Quoted=function(a,b,c,d){this.escaped=c,this.value=b||"",this.quote=a.charAt(0),this.index=d},a.Quoted.prototype={toCSS:function(){return this.escaped?this.value:this.quote+this.value+this.quote},eval:function(b){var c=this,d=this.value.replace(/`([^`]+)`/g,function(d,e){return(new a.JavaScript(e,c.index,!0)).eval(b).value}).replace(/@\{([\w-]+)\}/g,function(d,e){var f=(new a.Variable("@"+e,c.index)).eval(b);return f.value||f.toCSS()});return new a.Quoted(this.quote+d+this.quote,d,this.escaped,this.index)}}}(c("../tree")),function(a){a.Rule=function(b,c,d,e){this.name=b,this.value=c instanceof a.Value?c:new a.Value([c]),this.important=d?" "+d.trim():"",this.index=e,b.charAt(0)==="@"?this.variable=!0:this.variable=!1},a.Rule.prototype.toCSS=function(a){return this.variable?"":this.name+(a.compress?":":": ")+this.value.toCSS(a)+this.important+";"},a.Rule.prototype.eval=function(b){return new a.Rule(this.name,this.value.eval(b),this.important,this.index)},a.Shorthand=function(a,b){this.a=a,this.b=b},a.Shorthand.prototype={toCSS:function(a){return this.a.toCSS(a)+"/"+this.b.toCSS(a)},eval:function(){return this}}}(c("../tree")),function(a){a.Ruleset=function(a,b){this.selectors=a,this.rules=b,this._lookups={}},a.Ruleset.prototype={eval:function(b){var c=new a.Ruleset(this.selectors,this.rules.slice(0));c.root=this.root,b.frames.unshift(c);if(c.root)for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.Import&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.mixin.Definition&&(c.rules[d].frames=b.frames.slice(0));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.mixin.Call&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));for(var d=0,e;d<c.rules.length;d++)e=c.rules[d],e instanceof a.mixin.Definition||(c.rules[d]=e.eval?e.eval(b):e);return b.frames.shift(),c},match:function(a){return!a||a.length===0},variables:function(){return this._variables?this._variables:this._variables=this.rules.reduce(function(b,c){return c instanceof a.Rule&&c.variable===!0&&(b[c.name]=c),b},{})},variable:function(a){return this.variables()[a]},rulesets:function(){return this._rulesets?this._rulesets:this._rulesets=this.rules.filter(function(b){return b instanceof a.Ruleset||b instanceof a.mixin.Definition})},find:function(b,c){c=c||this;var d=[],e,f,g=b.toCSS();return g in this._lookups?this._lookups[g]:(this.rulesets().forEach(function(e){if(e!==c)for(var g=0;g<e.selectors.length;g++)if(f=b.match(e.selectors[g])){b.elements.length>e.selectors[g].elements.length?Array.prototype.push.apply(d,e.find(new a.Selector(b.elements.slice(1)),c)):d.push(e);break}}),this._lookups[g]=d)},toCSS:function(b,c){var d=[],e=[],f=[],g=[],h,i;this.root||(b.length===0?g=this.selectors.map(function(a){return[a]}):this.joinSelectors(g,b,this.selectors));for(var j=0;j<this.rules.length;j++)i=this.rules[j],i.rules||i instanceof a.Directive?f.push(i.toCSS(g,c)):i instanceof a.Comment?i.silent||(this.root?f.push(i.toCSS(c)):e.push(i.toCSS(c))):i.toCSS&&!i.variable?e.push(i.toCSS(c)):i.value&&!i.variable&&e.push(i.value.toString());return f=f.join(""),this.root?d.push(e.join(c.compress?"":"\n")):e.length>0&&(h=g.map(function(a){return a.map(function(a){return a.toCSS(c)}).join("").trim()}).join(c.compress?",":g.length>3?",\n":", "),d.push(h,(c.compress?"{":" {\n  ")+e.join(c.compress?"":"\n  ")+(c.compress?"}":"\n}\n"))),d.push(f),d.join("")+(c.compress?"\n":"")},joinSelectors:function(a,b,c){for(var d=0;d<c.length;d++)this.joinSelector(a,b,c[d])},joinSelector:function(b,c,d){var e=[],f=[],g=[],h=[],i=!1,j;for(var k=0;k<d.elements.length;k++)j=d.elements[k],j.combinator.value.charAt(0)==="&"&&(i=!0),i?h.push(j):g.push(j);i||(h=g,g=[]),g.length>0&&e.push(new a.Selector(g)),h.length>0&&f.push(new a.Selector(h));for(var l=0;l<c.length;l++)b.push(e.concat(c[l]).concat(f))}}}(c("../tree")),function(a){a.Selector=function(a){this.elements=a,this.elements[0].combinator.value===""&&(this.elements[0].combinator.value=" ")},a.Selector.prototype.match=function(a){var b=this.elements.length,c=a.elements.length,d=Math.min(b,c);if(b<c)return!1;for(var e=0;e<d;e++)if(this.elements[e].value!==a.elements[e].value)return!1
16
+;return!0},a.Selector.prototype.toCSS=function(a){return this._css?this._css:this._css=this.elements.map(function(b){return typeof b=="string"?" "+b.trim():b.toCSS(a)}).join("")}}(c("../tree")),function(b){b.URL=function(b,c){b.data?this.attrs=b:(!/^(?:https?:\/\/|file:\/\/|data:)?/.test(b.value)&&c.length>0&&typeof a!="undefined"&&(b.value=c[0]+(b.value.charAt(0)==="/"?b.value.slice(1):b.value)),this.value=b,this.paths=c)},b.URL.prototype={toCSS:function(){return"url("+(this.attrs?"data:"+this.attrs.mime+this.attrs.charset+this.attrs.base64+this.attrs.data:this.value.toCSS())+")"},eval:function(a){return this.attrs?this:new b.URL(this.value.eval(a),this.paths)}}}(c("../tree")),function(a){a.Value=function(a){this.value=a,this.is="value"},a.Value.prototype={eval:function(b){return this.value.length===1?this.value[0].eval(b):new a.Value(this.value.map(function(a){return a.eval(b)}))},toCSS:function(a){return this.value.map(function(b){return b.toCSS(a)}).join(a.compress?",":", ")}}}(c("../tree")),function(a){a.Variable=function(a,b){this.name=a,this.index=b},a.Variable.prototype={eval:function(b){var c,d,e=this.name;e.indexOf("@@")==0&&(e="@"+(new a.Variable(e.slice(1))).eval(b).value);if(c=a.find(b.frames,function(a){if(d=a.variable(e))return d.value.eval(b)}))return c;throw{message:"variable "+e+" is undefined",index:this.index}}}}(c("../tree")),c("./tree").find=function(a,b){for(var c=0,d;c<a.length;c++)if(d=b.call(a,a[c]))return d;return null},c("./tree").jsify=function(a){return Array.isArray(a.value)&&a.value.length>1?"["+a.value.map(function(a){return a.toCSS(!1)}).join(", ")+"]":a.toCSS(!1)};var f=location.protocol==="file:"||location.protocol==="chrome:"||location.protocol==="chrome-extension:"||location.protocol==="resource:";d.env=d.env||(location.hostname=="127.0.0.1"||location.hostname=="0.0.0.0"||location.hostname=="localhost"||location.port.length>0||f?"development":"production"),d.async=!1,d.poll=d.poll||(f?1e3:1500),d.watch=function(){return this.watchMode=!0},d.unwatch=function(){return this.watchMode=!1},d.env==="development"?(d.optimization=0,/!watch/.test(location.hash)&&d.watch(),d.watchTimer=setInterval(function(){d.watchMode&&m(function(a,b,c){a&&p(a.toCSS(),b,c.lastModified)})},d.poll)):d.optimization=3;var g;try{g=typeof a.localStorage=="undefined"?null:a.localStorage}catch(h){g=null}var i=document.getElementsByTagName("link"),j=/^text\/(x-)?less$/;d.sheets=[];for(var k=0;k<i.length;k++)(i[k].rel==="stylesheet/less"||i[k].rel.match(/stylesheet/)&&i[k].type.match(j))&&d.sheets.push(i[k]);d.refresh=function(a){var b,c;b=c=new Date,m(function(a,d,e){e.local?t("loading "+d.href+" from cache."):(t("parsed "+d.href+" successfully."),p(a.toCSS(),d,e.lastModified)),t("css for "+d.href+" generated in "+(new Date-c)+"ms"),e.remaining===0&&t("css generated in "+(new Date-b)+"ms"),c=new Date},a),l()},d.refreshStyles=l,d.refresh(d.env==="development")})(window);
0 17
\ No newline at end of file
1 18
new file mode 100755
... ...
@@ -0,0 +1,9266 @@
1
+/*!
2
+ * jQuery JavaScript Library v1.7.1
3
+ * http://jquery.com/
4
+ *
5
+ * Copyright 2011, John Resig
6
+ * Dual licensed under the MIT or GPL Version 2 licenses.
7
+ * http://jquery.org/license
8
+ *
9
+ * Includes Sizzle.js
10
+ * http://sizzlejs.com/
11
+ * Copyright 2011, The Dojo Foundation
12
+ * Released under the MIT, BSD, and GPL Licenses.
13
+ *
14
+ * Date: Mon Nov 21 21:11:03 2011 -0500
15
+ */
16
+(function( window, undefined ) {
17
+
18
+// Use the correct document accordingly with window argument (sandbox)
19
+var document = window.document,
20
+	navigator = window.navigator,
21
+	location = window.location;
22
+var jQuery = (function() {
23
+
24
+// Define a local copy of jQuery
25
+var jQuery = function( selector, context ) {
26
+		// The jQuery object is actually just the init constructor 'enhanced'
27
+		return new jQuery.fn.init( selector, context, rootjQuery );
28
+	},
29
+
30
+	// Map over jQuery in case of overwrite
31
+	_jQuery = window.jQuery,
32
+
33
+	// Map over the $ in case of overwrite
34
+	_$ = window.$,
35
+
36
+	// A central reference to the root jQuery(document)
37
+	rootjQuery,
38
+
39
+	// A simple way to check for HTML strings or ID strings
40
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
41
+	quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
42
+
43
+	// Check if a string has a non-whitespace character in it
44
+	rnotwhite = /\S/,
45
+
46
+	// Used for trimming whitespace
47
+	trimLeft = /^\s+/,
48
+	trimRight = /\s+$/,
49
+
50
+	// Match a standalone tag
51
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
52
+
53
+	// JSON RegExp
54
+	rvalidchars = /^[\],:{}\s]*$/,
55
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
56
+	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
57
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
58
+
59
+	// Useragent RegExp
60
+	rwebkit = /(webkit)[ \/]([\w.]+)/,
61
+	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
62
+	rmsie = /(msie) ([\w.]+)/,
63
+	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
64
+
65
+	// Matches dashed string for camelizing
66
+	rdashAlpha = /-([a-z]|[0-9])/ig,
67
+	rmsPrefix = /^-ms-/,
68
+
69
+	// Used by jQuery.camelCase as callback to replace()
70
+	fcamelCase = function( all, letter ) {
71
+		return ( letter + "" ).toUpperCase();
72
+	},
73
+
74
+	// Keep a UserAgent string for use with jQuery.browser
75
+	userAgent = navigator.userAgent,
76
+
77
+	// For matching the engine and version of the browser
78
+	browserMatch,
79
+
80
+	// The deferred used on DOM ready
81
+	readyList,
82
+
83
+	// The ready event handler
84
+	DOMContentLoaded,
85
+
86
+	// Save a reference to some core methods
87
+	toString = Object.prototype.toString,
88
+	hasOwn = Object.prototype.hasOwnProperty,
89
+	push = Array.prototype.push,
90
+	slice = Array.prototype.slice,
91
+	trim = String.prototype.trim,
92
+	indexOf = Array.prototype.indexOf,
93
+
94
+	// [[Class]] -> type pairs
95
+	class2type = {};
96
+
97
+jQuery.fn = jQuery.prototype = {
98
+	constructor: jQuery,
99
+	init: function( selector, context, rootjQuery ) {
100
+		var match, elem, ret, doc;
101
+
102
+		// Handle $(""), $(null), or $(undefined)
103
+		if ( !selector ) {
104
+			return this;
105
+		}
106
+
107
+		// Handle $(DOMElement)
108
+		if ( selector.nodeType ) {
109
+			this.context = this[0] = selector;
110
+			this.length = 1;
111
+			return this;
112
+		}
113
+
114
+		// The body element only exists once, optimize finding it
115
+		if ( selector === "body" && !context && document.body ) {
116
+			this.context = document;
117
+			this[0] = document.body;
118
+			this.selector = selector;
119
+			this.length = 1;
120
+			return this;
121
+		}
122
+
123
+		// Handle HTML strings
124
+		if ( typeof selector === "string" ) {
125
+			// Are we dealing with HTML string or an ID?
126
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
127
+				// Assume that strings that start and end with <> are HTML and skip the regex check
128
+				match = [ null, selector, null ];
129
+
130
+			} else {
131
+				match = quickExpr.exec( selector );
132
+			}
133
+
134
+			// Verify a match, and that no context was specified for #id
135
+			if ( match && (match[1] || !context) ) {
136
+
137
+				// HANDLE: $(html) -> $(array)
138
+				if ( match[1] ) {
139
+					context = context instanceof jQuery ? context[0] : context;
140
+					doc = ( context ? context.ownerDocument || context : document );
141
+
142
+					// If a single string is passed in and it's a single tag
143
+					// just do a createElement and skip the rest
144
+					ret = rsingleTag.exec( selector );
145
+
146
+					if ( ret ) {
147
+						if ( jQuery.isPlainObject( context ) ) {
148
+							selector = [ document.createElement( ret[1] ) ];
149
+							jQuery.fn.attr.call( selector, context, true );
150
+
151
+						} else {
152
+							selector = [ doc.createElement( ret[1] ) ];
153
+						}
154
+
155
+					} else {
156
+						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
157
+						selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
158
+					}
159
+
160
+					return jQuery.merge( this, selector );
161
+
162
+				// HANDLE: $("#id")
163
+				} else {
164
+					elem = document.getElementById( match[2] );
165
+
166
+					// Check parentNode to catch when Blackberry 4.6 returns
167
+					// nodes that are no longer in the document #6963
168
+					if ( elem && elem.parentNode ) {
169
+						// Handle the case where IE and Opera return items
170
+						// by name instead of ID
171
+						if ( elem.id !== match[2] ) {
172
+							return rootjQuery.find( selector );
173
+						}
174
+
175
+						// Otherwise, we inject the element directly into the jQuery object
176
+						this.length = 1;
177
+						this[0] = elem;
178
+					}
179
+
180
+					this.context = document;
181
+					this.selector = selector;
182
+					return this;
183
+				}
184
+
185
+			// HANDLE: $(expr, $(...))
186
+			} else if ( !context || context.jquery ) {
187
+				return ( context || rootjQuery ).find( selector );
188
+
189
+			// HANDLE: $(expr, context)
190
+			// (which is just equivalent to: $(context).find(expr)
191
+			} else {
192
+				return this.constructor( context ).find( selector );
193
+			}
194
+
195
+		// HANDLE: $(function)
196
+		// Shortcut for document ready
197
+		} else if ( jQuery.isFunction( selector ) ) {
198
+			return rootjQuery.ready( selector );
199
+		}
200
+
201
+		if ( selector.selector !== undefined ) {
202
+			this.selector = selector.selector;
203
+			this.context = selector.context;
204
+		}
205
+
206
+		return jQuery.makeArray( selector, this );
207
+	},
208
+
209
+	// Start with an empty selector
210
+	selector: "",
211
+
212
+	// The current version of jQuery being used
213
+	jquery: "1.7.1",
214
+
215
+	// The default length of a jQuery object is 0
216
+	length: 0,
217
+
218
+	// The number of elements contained in the matched element set
219
+	size: function() {
220
+		return this.length;
221
+	},
222
+
223
+	toArray: function() {
224
+		return slice.call( this, 0 );
225
+	},
226
+
227
+	// Get the Nth element in the matched element set OR
228
+	// Get the whole matched element set as a clean array
229
+	get: function( num ) {
230
+		return num == null ?
231
+
232
+			// Return a 'clean' array
233
+			this.toArray() :
234
+
235
+			// Return just the object
236
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
237
+	},
238
+
239
+	// Take an array of elements and push it onto the stack
240
+	// (returning the new matched element set)
241
+	pushStack: function( elems, name, selector ) {
242
+		// Build a new jQuery matched element set
243
+		var ret = this.constructor();
244
+
245
+		if ( jQuery.isArray( elems ) ) {
246
+			push.apply( ret, elems );
247
+
248
+		} else {
249
+			jQuery.merge( ret, elems );
250
+		}
251
+
252
+		// Add the old object onto the stack (as a reference)
253
+		ret.prevObject = this;
254
+
255
+		ret.context = this.context;
256
+
257
+		if ( name === "find" ) {
258
+			ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
259
+		} else if ( name ) {
260
+			ret.selector = this.selector + "." + name + "(" + selector + ")";
261
+		}
262
+
263
+		// Return the newly-formed element set
264
+		return ret;
265
+	},
266
+
267
+	// Execute a callback for every element in the matched set.
268
+	// (You can seed the arguments with an array of args, but this is
269
+	// only used internally.)
270
+	each: function( callback, args ) {
271
+		return jQuery.each( this, callback, args );
272
+	},
273
+
274
+	ready: function( fn ) {
275
+		// Attach the listeners
276
+		jQuery.bindReady();
277
+
278
+		// Add the callback
279
+		readyList.add( fn );
280
+
281
+		return this;
282
+	},
283
+
284
+	eq: function( i ) {
285
+		i = +i;
286
+		return i === -1 ?
287
+			this.slice( i ) :
288
+			this.slice( i, i + 1 );
289
+	},
290
+
291
+	first: function() {
292
+		return this.eq( 0 );
293
+	},
294
+
295
+	last: function() {
296
+		return this.eq( -1 );
297
+	},
298
+
299
+	slice: function() {
300
+		return this.pushStack( slice.apply( this, arguments ),
301
+			"slice", slice.call(arguments).join(",") );
302
+	},
303
+
304
+	map: function( callback ) {
305
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
306
+			return callback.call( elem, i, elem );
307
+		}));
308
+	},
309
+
310
+	end: function() {
311
+		return this.prevObject || this.constructor(null);
312
+	},
313
+
314
+	// For internal use only.
315
+	// Behaves like an Array's method, not like a jQuery method.
316
+	push: push,
317
+	sort: [].sort,
318
+	splice: [].splice
319
+};
320
+
321
+// Give the init function the jQuery prototype for later instantiation
322
+jQuery.fn.init.prototype = jQuery.fn;
323
+
324
+jQuery.extend = jQuery.fn.extend = function() {
325
+	var options, name, src, copy, copyIsArray, clone,
326
+		target = arguments[0] || {},
327
+		i = 1,
328
+		length = arguments.length,
329
+		deep = false;
330
+
331
+	// Handle a deep copy situation
332
+	if ( typeof target === "boolean" ) {
333
+		deep = target;
334
+		target = arguments[1] || {};
335
+		// skip the boolean and the target
336
+		i = 2;
337
+	}
338
+
339
+	// Handle case when target is a string or something (possible in deep copy)
340
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
341
+		target = {};
342
+	}
343
+
344
+	// extend jQuery itself if only one argument is passed
345
+	if ( length === i ) {
346
+		target = this;
347
+		--i;
348
+	}
349
+
350
+	for ( ; i < length; i++ ) {
351
+		// Only deal with non-null/undefined values
352
+		if ( (options = arguments[ i ]) != null ) {
353
+			// Extend the base object
354
+			for ( name in options ) {
355
+				src = target[ name ];
356
+				copy = options[ name ];
357
+
358
+				// Prevent never-ending loop
359
+				if ( target === copy ) {
360
+					continue;
361
+				}
362
+
363
+				// Recurse if we're merging plain objects or arrays
364
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
365
+					if ( copyIsArray ) {
366
+						copyIsArray = false;
367
+						clone = src && jQuery.isArray(src) ? src : [];
368
+
369
+					} else {
370
+						clone = src && jQuery.isPlainObject(src) ? src : {};
371
+					}
372
+
373
+					// Never move original objects, clone them
374
+					target[ name ] = jQuery.extend( deep, clone, copy );
375
+
376
+				// Don't bring in undefined values
377
+				} else if ( copy !== undefined ) {
378
+					target[ name ] = copy;
379
+				}
380
+			}
381
+		}
382
+	}
383
+
384
+	// Return the modified object
385
+	return target;
386
+};
387
+
388
+jQuery.extend({
389
+	noConflict: function( deep ) {
390
+		if ( window.$ === jQuery ) {
391
+			window.$ = _$;
392
+		}
393
+
394
+		if ( deep && window.jQuery === jQuery ) {
395
+			window.jQuery = _jQuery;
396
+		}
397
+
398
+		return jQuery;
399
+	},
400
+
401
+	// Is the DOM ready to be used? Set to true once it occurs.
402
+	isReady: false,
403
+
404
+	// A counter to track how many items to wait for before
405
+	// the ready event fires. See #6781
406
+	readyWait: 1,
407
+
408
+	// Hold (or release) the ready event
409
+	holdReady: function( hold ) {
410
+		if ( hold ) {
411
+			jQuery.readyWait++;
412
+		} else {
413
+			jQuery.ready( true );
414
+		}
415
+	},
416
+
417
+	// Handle when the DOM is ready
418
+	ready: function( wait ) {
419
+		// Either a released hold or an DOMready/load event and not yet ready
420
+		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
421
+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
422
+			if ( !document.body ) {
423
+				return setTimeout( jQuery.ready, 1 );
424
+			}
425
+
426
+			// Remember that the DOM is ready
427
+			jQuery.isReady = true;
428
+
429
+			// If a normal DOM Ready event fired, decrement, and wait if need be
430
+			if ( wait !== true && --jQuery.readyWait > 0 ) {
431
+				return;
432
+			}
433
+
434
+			// If there are functions bound, to execute
435
+			readyList.fireWith( document, [ jQuery ] );
436
+
437
+			// Trigger any bound ready events
438
+			if ( jQuery.fn.trigger ) {
439
+				jQuery( document ).trigger( "ready" ).off( "ready" );
440
+			}
441
+		}
442
+	},
443
+
444
+	bindReady: function() {
445
+		if ( readyList ) {
446
+			return;
447
+		}
448
+
449
+		readyList = jQuery.Callbacks( "once memory" );
450
+
451
+		// Catch cases where $(document).ready() is called after the
452
+		// browser event has already occurred.
453
+		if ( document.readyState === "complete" ) {
454
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
455
+			return setTimeout( jQuery.ready, 1 );
456
+		}
457
+
458
+		// Mozilla, Opera and webkit nightlies currently support this event
459
+		if ( document.addEventListener ) {
460
+			// Use the handy event callback
461
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
462
+
463
+			// A fallback to window.onload, that will always work
464
+			window.addEventListener( "load", jQuery.ready, false );
465
+
466
+		// If IE event model is used
467
+		} else if ( document.attachEvent ) {
468
+			// ensure firing before onload,
469
+			// maybe late but safe also for iframes
470
+			document.attachEvent( "onreadystatechange", DOMContentLoaded );
471
+
472
+			// A fallback to window.onload, that will always work
473
+			window.attachEvent( "onload", jQuery.ready );
474
+
475
+			// If IE and not a frame
476
+			// continually check to see if the document is ready
477
+			var toplevel = false;
478
+
479
+			try {
480
+				toplevel = window.frameElement == null;
481
+			} catch(e) {}
482
+
483
+			if ( document.documentElement.doScroll && toplevel ) {
484
+				doScrollCheck();
485
+			}
486
+		}
487
+	},
488
+
489
+	// See test/unit/core.js for details concerning isFunction.
490
+	// Since version 1.3, DOM methods and functions like alert
491
+	// aren't supported. They return false on IE (#2968).
492
+	isFunction: function( obj ) {
493
+		return jQuery.type(obj) === "function";
494
+	},
495
+
496
+	isArray: Array.isArray || function( obj ) {
497
+		return jQuery.type(obj) === "array";
498
+	},
499
+
500
+	// A crude way of determining if an object is a window
501
+	isWindow: function( obj ) {
502
+		return obj && typeof obj === "object" && "setInterval" in obj;
503
+	},
504
+
505
+	isNumeric: function( obj ) {
506
+		return !isNaN( parseFloat(obj) ) && isFinite( obj );
507
+	},
508
+
509
+	type: function( obj ) {
510
+		return obj == null ?
511
+			String( obj ) :
512
+			class2type[ toString.call(obj) ] || "object";
513
+	},
514
+
515
+	isPlainObject: function( obj ) {
516
+		// Must be an Object.
517
+		// Because of IE, we also have to check the presence of the constructor property.
518
+		// Make sure that DOM nodes and window objects don't pass through, as well
519
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
520
+			return false;
521
+		}
522
+
523
+		try {
524
+			// Not own constructor property must be Object
525
+			if ( obj.constructor &&
526
+				!hasOwn.call(obj, "constructor") &&
527
+				!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
528
+				return false;
529
+			}
530
+		} catch ( e ) {
531
+			// IE8,9 Will throw exceptions on certain host objects #9897
532
+			return false;
533
+		}
534
+
535
+		// Own properties are enumerated firstly, so to speed up,
536
+		// if last one is own, then all properties are own.
537
+
538
+		var key;
539
+		for ( key in obj ) {}
540
+
541
+		return key === undefined || hasOwn.call( obj, key );
542
+	},
543
+
544
+	isEmptyObject: function( obj ) {
545
+		for ( var name in obj ) {
546
+			return false;
547
+		}
548
+		return true;
549
+	},
550
+
551
+	error: function( msg ) {
552
+		throw new Error( msg );
553
+	},
554
+
555
+	parseJSON: function( data ) {
556
+		if ( typeof data !== "string" || !data ) {
557
+			return null;
558
+		}
559
+
560
+		// Make sure leading/trailing whitespace is removed (IE can't handle it)
561
+		data = jQuery.trim( data );
562
+
563
+		// Attempt to parse using the native JSON parser first
564
+		if ( window.JSON && window.JSON.parse ) {
565
+			return window.JSON.parse( data );
566
+		}
567
+
568
+		// Make sure the incoming data is actual JSON
569
+		// Logic borrowed from http://json.org/json2.js
570
+		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
571
+			.replace( rvalidtokens, "]" )
572
+			.replace( rvalidbraces, "")) ) {
573
+
574
+			return ( new Function( "return " + data ) )();
575
+
576
+		}
577
+		jQuery.error( "Invalid JSON: " + data );
578
+	},
579
+
580
+	// Cross-browser xml parsing
581
+	parseXML: function( data ) {
582
+		var xml, tmp;
583
+		try {
584
+			if ( window.DOMParser ) { // Standard
585
+				tmp = new DOMParser();
586
+				xml = tmp.parseFromString( data , "text/xml" );
587
+			} else { // IE
588
+				xml = new ActiveXObject( "Microsoft.XMLDOM" );
589
+				xml.async = "false";
590
+				xml.loadXML( data );
591
+			}
592
+		} catch( e ) {
593
+			xml = undefined;
594
+		}
595
+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
596
+			jQuery.error( "Invalid XML: " + data );
597
+		}
598
+		return xml;
599
+	},
600
+
601
+	noop: function() {},
602
+
603
+	// Evaluates a script in a global context
604
+	// Workarounds based on findings by Jim Driscoll
605
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
606
+	globalEval: function( data ) {
607
+		if ( data && rnotwhite.test( data ) ) {
608
+			// We use execScript on Internet Explorer
609
+			// We use an anonymous function so that context is window
610
+			// rather than jQuery in Firefox
611
+			( window.execScript || function( data ) {
612
+				window[ "eval" ].call( window, data );
613
+			} )( data );
614
+		}
615
+	},
616
+
617
+	// Convert dashed to camelCase; used by the css and data modules
618
+	// Microsoft forgot to hump their vendor prefix (#9572)
619
+	camelCase: function( string ) {
620
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
621
+	},
622
+
623
+	nodeName: function( elem, name ) {
624
+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
625
+	},
626
+
627
+	// args is for internal usage only
628
+	each: function( object, callback, args ) {
629
+		var name, i = 0,
630
+			length = object.length,
631
+			isObj = length === undefined || jQuery.isFunction( object );
632
+
633
+		if ( args ) {
634
+			if ( isObj ) {
635
+				for ( name in object ) {
636
+					if ( callback.apply( object[ name ], args ) === false ) {
637
+						break;
638
+					}
639
+				}
640
+			} else {
641
+				for ( ; i < length; ) {
642
+					if ( callback.apply( object[ i++ ], args ) === false ) {
643
+						break;
644
+					}
645
+				}
646
+			}
647
+
648
+		// A special, fast, case for the most common use of each
649
+		} else {
650
+			if ( isObj ) {
651
+				for ( name in object ) {
652
+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
653
+						break;
654
+					}
655
+				}
656
+			} else {
657
+				for ( ; i < length; ) {
658
+					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
659
+						break;
660
+					}
661
+				}
662
+			}
663
+		}
664
+
665
+		return object;
666
+	},
667
+
668
+	// Use native String.trim function wherever possible
669
+	trim: trim ?
670
+		function( text ) {
671
+			return text == null ?
672
+				"" :
673
+				trim.call( text );
674
+		} :
675
+
676
+		// Otherwise use our own trimming functionality
677
+		function( text ) {
678
+			return text == null ?
679
+				"" :
680
+				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
681
+		},
682
+
683
+	// results is for internal usage only
684
+	makeArray: function( array, results ) {
685
+		var ret = results || [];
686
+
687
+		if ( array != null ) {
688
+			// The window, strings (and functions) also have 'length'
689
+			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
690
+			var type = jQuery.type( array );
691
+
692
+			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
693
+				push.call( ret, array );
694
+			} else {
695
+				jQuery.merge( ret, array );
696
+			}
697
+		}
698
+
699
+		return ret;
700
+	},
701
+
702
+	inArray: function( elem, array, i ) {
703
+		var len;
704
+
705
+		if ( array ) {
706
+			if ( indexOf ) {
707
+				return indexOf.call( array, elem, i );
708
+			}
709
+
710
+			len = array.length;
711
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
712
+
713
+			for ( ; i < len; i++ ) {
714
+				// Skip accessing in sparse arrays
715
+				if ( i in array && array[ i ] === elem ) {
716
+					return i;
717
+				}
718
+			}
719
+		}
720
+
721
+		return -1;
722
+	},
723
+
724
+	merge: function( first, second ) {
725
+		var i = first.length,
726
+			j = 0;
727
+
728
+		if ( typeof second.length === "number" ) {
729
+			for ( var l = second.length; j < l; j++ ) {
730
+				first[ i++ ] = second[ j ];
731
+			}
732
+
733
+		} else {
734
+			while ( second[j] !== undefined ) {
735
+				first[ i++ ] = second[ j++ ];
736
+			}
737
+		}
738
+
739
+		first.length = i;
740
+
741
+		return first;
742
+	},
743
+
744
+	grep: function( elems, callback, inv ) {
745
+		var ret = [], retVal;
746
+		inv = !!inv;
747
+
748
+		// Go through the array, only saving the items
749
+		// that pass the validator function
750
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
751
+			retVal = !!callback( elems[ i ], i );
752
+			if ( inv !== retVal ) {
753
+				ret.push( elems[ i ] );
754
+			}
755
+		}
756
+
757
+		return ret;
758
+	},
759
+
760
+	// arg is for internal usage only
761
+	map: function( elems, callback, arg ) {
762
+		var value, key, ret = [],
763
+			i = 0,
764
+			length = elems.length,
765
+			// jquery objects are treated as arrays
766
+			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
767
+
768
+		// Go through the array, translating each of the items to their
769
+		if ( isArray ) {
770
+			for ( ; i < length; i++ ) {
771
+				value = callback( elems[ i ], i, arg );
772
+
773
+				if ( value != null ) {
774
+					ret[ ret.length ] = value;
775
+				}
776
+			}
777
+
778
+		// Go through every key on the object,
779
+		} else {
780
+			for ( key in elems ) {
781
+				value = callback( elems[ key ], key, arg );
782
+
783
+				if ( value != null ) {
784
+					ret[ ret.length ] = value;
785
+				}
786
+			}
787
+		}
788
+
789
+		// Flatten any nested arrays
790
+		return ret.concat.apply( [], ret );
791
+	},
792
+
793
+	// A global GUID counter for objects
794
+	guid: 1,
795
+
796
+	// Bind a function to a context, optionally partially applying any
797
+	// arguments.
798
+	proxy: function( fn, context ) {
799
+		if ( typeof context === "string" ) {
800
+			var tmp = fn[ context ];
801
+			context = fn;
802
+			fn = tmp;
803
+		}
804
+
805
+		// Quick check to determine if target is callable, in the spec
806
+		// this throws a TypeError, but we will just return undefined.
807
+		if ( !jQuery.isFunction( fn ) ) {
808
+			return undefined;
809
+		}
810
+
811
+		// Simulated bind
812
+		var args = slice.call( arguments, 2 ),
813
+			proxy = function() {
814
+				return fn.apply( context, args.concat( slice.call( arguments ) ) );
815
+			};
816
+
817
+		// Set the guid of unique handler to the same of original handler, so it can be removed
818
+		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
819
+
820
+		return proxy;
821
+	},
822
+
823
+	// Mutifunctional method to get and set values to a collection
824
+	// The value/s can optionally be executed if it's a function
825
+	access: function( elems, key, value, exec, fn, pass ) {
826
+		var length = elems.length;
827
+
828
+		// Setting many attributes
829
+		if ( typeof key === "object" ) {
830
+			for ( var k in key ) {
831
+				jQuery.access( elems, k, key[k], exec, fn, value );
832
+			}
833
+			return elems;
834
+		}
835
+
836
+		// Setting one attribute
837
+		if ( value !== undefined ) {
838
+			// Optionally, function values get executed if exec is true
839
+			exec = !pass && exec && jQuery.isFunction(value);
840
+
841
+			for ( var i = 0; i < length; i++ ) {
842
+				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
843
+			}
844
+
845
+			return elems;
846
+		}
847
+
848
+		// Getting an attribute
849
+		return length ? fn( elems[0], key ) : undefined;
850
+	},
851
+
852
+	now: function() {
853
+		return ( new Date() ).getTime();
854
+	},
855
+
856
+	// Use of jQuery.browser is frowned upon.
857
+	// More details: http://docs.jquery.com/Utilities/jQuery.browser
858
+	uaMatch: function( ua ) {
859
+		ua = ua.toLowerCase();
860
+
861
+		var match = rwebkit.exec( ua ) ||
862
+			ropera.exec( ua ) ||
863
+			rmsie.exec( ua ) ||
864
+			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
865
+			[];
866
+
867
+		return { browser: match[1] || "", version: match[2] || "0" };
868
+	},
869
+
870
+	sub: function() {
871
+		function jQuerySub( selector, context ) {
872
+			return new jQuerySub.fn.init( selector, context );
873
+		}
874
+		jQuery.extend( true, jQuerySub, this );
875
+		jQuerySub.superclass = this;
876
+		jQuerySub.fn = jQuerySub.prototype = this();
877
+		jQuerySub.fn.constructor = jQuerySub;
878
+		jQuerySub.sub = this.sub;
879
+		jQuerySub.fn.init = function init( selector, context ) {
880
+			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
881
+				context = jQuerySub( context );
882
+			}
883
+
884
+			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
885
+		};
886
+		jQuerySub.fn.init.prototype = jQuerySub.fn;
887
+		var rootjQuerySub = jQuerySub(document);
888
+		return jQuerySub;
889
+	},
890
+
891
+	browser: {}
892
+});
893
+
894
+// Populate the class2type map
895
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
896
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
897
+});
898
+
899
+browserMatch = jQuery.uaMatch( userAgent );
900
+if ( browserMatch.browser ) {
901
+	jQuery.browser[ browserMatch.browser ] = true;
902
+	jQuery.browser.version = browserMatch.version;
903
+}
904
+
905
+// Deprecated, use jQuery.browser.webkit instead
906
+if ( jQuery.browser.webkit ) {
907
+	jQuery.browser.safari = true;
908
+}
909
+
910
+// IE doesn't match non-breaking spaces with \s
911
+if ( rnotwhite.test( "\xA0" ) ) {
912
+	trimLeft = /^[\s\xA0]+/;
913
+	trimRight = /[\s\xA0]+$/;
914
+}
915
+
916
+// All jQuery objects should point back to these
917
+rootjQuery = jQuery(document);
918
+
919
+// Cleanup functions for the document ready method
920
+if ( document.addEventListener ) {
921
+	DOMContentLoaded = function() {
922
+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
923
+		jQuery.ready();
924
+	};
925
+
926
+} else if ( document.attachEvent ) {
927
+	DOMContentLoaded = function() {
928
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
929
+		if ( document.readyState === "complete" ) {
930
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
931
+			jQuery.ready();
932
+		}
933
+	};
934
+}
935
+
936
+// The DOM ready check for Internet Explorer
937
+function doScrollCheck() {
938
+	if ( jQuery.isReady ) {
939
+		return;
940
+	}
941
+
942
+	try {
943
+		// If IE is used, use the trick by Diego Perini
944
+		// http://javascript.nwbox.com/IEContentLoaded/
945
+		document.documentElement.doScroll("left");
946
+	} catch(e) {
947
+		setTimeout( doScrollCheck, 1 );
948
+		return;
949
+	}
950
+
951
+	// and execute any waiting functions
952
+	jQuery.ready();
953
+}
954
+
955
+return jQuery;
956
+
957
+})();
958
+
959
+
960
+// String to Object flags format cache
961
+var flagsCache = {};
962
+
963
+// Convert String-formatted flags into Object-formatted ones and store in cache
964
+function createFlags( flags ) {
965
+	var object = flagsCache[ flags ] = {},
966
+		i, length;
967
+	flags = flags.split( /\s+/ );
968
+	for ( i = 0, length = flags.length; i < length; i++ ) {
969
+		object[ flags[i] ] = true;
970
+	}
971
+	return object;
972
+}
973
+
974
+/*
975
+ * Create a callback list using the following parameters:
976
+ *
977
+ *	flags:	an optional list of space-separated flags that will change how
978
+ *			the callback list behaves
979
+ *
980
+ * By default a callback list will act like an event callback list and can be
981
+ * "fired" multiple times.
982
+ *
983
+ * Possible flags:
984
+ *
985
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
986
+ *
987
+ *	memory:			will keep track of previous values and will call any callback added
988
+ *					after the list has been fired right away with the latest "memorized"
989
+ *					values (like a Deferred)
990
+ *
991
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
992
+ *
993
+ *	stopOnFalse:	interrupt callings when a callback returns false
994
+ *
995
+ */
996
+jQuery.Callbacks = function( flags ) {
997
+
998
+	// Convert flags from String-formatted to Object-formatted
999
+	// (we check in cache first)
1000
+	flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
1001
+
1002
+	var // Actual callback list
1003
+		list = [],
1004
+		// Stack of fire calls for repeatable lists
1005
+		stack = [],
1006
+		// Last fire value (for non-forgettable lists)
1007
+		memory,
1008
+		// Flag to know if list is currently firing
1009
+		firing,
1010
+		// First callback to fire (used internally by add and fireWith)
1011
+		firingStart,
1012
+		// End of the loop when firing
1013
+		firingLength,
1014
+		// Index of currently firing callback (modified by remove if needed)
1015
+		firingIndex,
1016
+		// Add one or several callbacks to the list
1017
+		add = function( args ) {
1018
+			var i,
1019
+				length,
1020
+				elem,
1021
+				type,
1022
+				actual;
1023
+			for ( i = 0, length = args.length; i < length; i++ ) {
1024
+				elem = args[ i ];
1025
+				type = jQuery.type( elem );
1026
+				if ( type === "array" ) {
1027
+					// Inspect recursively
1028
+					add( elem );
1029
+				} else if ( type === "function" ) {
1030
+					// Add if not in unique mode and callback is not in
1031
+					if ( !flags.unique || !self.has( elem ) ) {
1032
+						list.push( elem );
1033
+					}
1034
+				}
1035
+			}
1036
+		},
1037
+		// Fire callbacks
1038
+		fire = function( context, args ) {
1039
+			args = args || [];
1040
+			memory = !flags.memory || [ context, args ];
1041
+			firing = true;
1042
+			firingIndex = firingStart || 0;
1043
+			firingStart = 0;
1044
+			firingLength = list.length;
1045
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
1046
+				if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
1047
+					memory = true; // Mark as halted
1048
+					break;
1049
+				}
1050
+			}
1051
+			firing = false;
1052
+			if ( list ) {
1053
+				if ( !flags.once ) {
1054
+					if ( stack && stack.length ) {
1055
+						memory = stack.shift();
1056
+						self.fireWith( memory[ 0 ], memory[ 1 ] );
1057
+					}
1058
+				} else if ( memory === true ) {
1059
+					self.disable();
1060
+				} else {
1061
+					list = [];
1062
+				}
1063
+			}
1064
+		},
1065
+		// Actual Callbacks object
1066
+		self = {
1067
+			// Add a callback or a collection of callbacks to the list
1068
+			add: function() {
1069
+				if ( list ) {
1070
+					var length = list.length;
1071
+					add( arguments );
1072
+					// Do we need to add the callbacks to the
1073
+					// current firing batch?
1074
+					if ( firing ) {
1075
+						firingLength = list.length;
1076
+					// With memory, if we're not firing then
1077
+					// we should call right away, unless previous
1078
+					// firing was halted (stopOnFalse)
1079
+					} else if ( memory && memory !== true ) {
1080
+						firingStart = length;
1081
+						fire( memory[ 0 ], memory[ 1 ] );
1082
+					}
1083
+				}
1084
+				return this;
1085
+			},
1086
+			// Remove a callback from the list
1087
+			remove: function() {
1088
+				if ( list ) {
1089
+					var args = arguments,
1090
+						argIndex = 0,
1091
+						argLength = args.length;
1092
+					for ( ; argIndex < argLength ; argIndex++ ) {
1093
+						for ( var i = 0; i < list.length; i++ ) {
1094
+							if ( args[ argIndex ] === list[ i ] ) {
1095
+								// Handle firingIndex and firingLength
1096
+								if ( firing ) {
1097
+									if ( i <= firingLength ) {
1098
+										firingLength--;
1099
+										if ( i <= firingIndex ) {
1100
+											firingIndex--;
1101
+										}
1102
+									}
1103
+								}
1104
+								// Remove the element
1105
+								list.splice( i--, 1 );
1106
+								// If we have some unicity property then
1107
+								// we only need to do this once
1108
+								if ( flags.unique ) {
1109
+									break;
1110
+								}
1111
+							}
1112
+						}
1113
+					}
1114
+				}
1115
+				return this;
1116
+			},
1117
+			// Control if a given callback is in the list
1118
+			has: function( fn ) {
1119
+				if ( list ) {
1120
+					var i = 0,
1121
+						length = list.length;
1122
+					for ( ; i < length; i++ ) {
1123
+						if ( fn === list[ i ] ) {
1124
+							return true;
1125
+						}
1126
+					}
1127
+				}
1128
+				return false;
1129
+			},
1130
+			// Remove all callbacks from the list
1131
+			empty: function() {
1132
+				list = [];
1133
+				return this;
1134
+			},
1135
+			// Have the list do nothing anymore
1136
+			disable: function() {
1137
+				list = stack = memory = undefined;
1138
+				return this;
1139
+			},
1140
+			// Is it disabled?
1141
+			disabled: function() {
1142
+				return !list;
1143
+			},
1144
+			// Lock the list in its current state
1145
+			lock: function() {
1146
+				stack = undefined;
1147
+				if ( !memory || memory === true ) {
1148
+					self.disable();
1149
+				}
1150
+				return this;
1151
+			},
1152
+			// Is it locked?
1153
+			locked: function() {
1154
+				return !stack;
1155
+			},
1156
+			// Call all callbacks with the given context and arguments
1157
+			fireWith: function( context, args ) {
1158
+				if ( stack ) {
1159
+					if ( firing ) {
1160
+						if ( !flags.once ) {
1161
+							stack.push( [ context, args ] );
1162
+						}
1163
+					} else if ( !( flags.once && memory ) ) {
1164
+						fire( context, args );
1165
+					}
1166
+				}
1167
+				return this;
1168
+			},
1169
+			// Call all the callbacks with the given arguments
1170
+			fire: function() {
1171
+				self.fireWith( this, arguments );
1172
+				return this;
1173
+			},
1174
+			// To know if the callbacks have already been called at least once
1175
+			fired: function() {
1176
+				return !!memory;
1177
+			}
1178
+		};
1179
+
1180
+	return self;
1181
+};
1182
+
1183
+
1184
+
1185
+
1186
+var // Static reference to slice
1187
+	sliceDeferred = [].slice;
1188
+
1189
+jQuery.extend({
1190
+
1191
+	Deferred: function( func ) {
1192
+		var doneList = jQuery.Callbacks( "once memory" ),
1193
+			failList = jQuery.Callbacks( "once memory" ),
1194
+			progressList = jQuery.Callbacks( "memory" ),
1195
+			state = "pending",
1196
+			lists = {
1197
+				resolve: doneList,
1198
+				reject: failList,
1199
+				notify: progressList
1200
+			},
1201
+			promise = {
1202
+				done: doneList.add,
1203
+				fail: failList.add,
1204
+				progress: progressList.add,
1205
+
1206
+				state: function() {
1207
+					return state;
1208
+				},
1209
+
1210
+				// Deprecated
1211
+				isResolved: doneList.fired,
1212
+				isRejected: failList.fired,
1213
+
1214
+				then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
1215
+					deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
1216
+					return this;
1217
+				},
1218
+				always: function() {
1219
+					deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
1220
+					return this;
1221
+				},
1222
+				pipe: function( fnDone, fnFail, fnProgress ) {
1223
+					return jQuery.Deferred(function( newDefer ) {
1224
+						jQuery.each( {
1225
+							done: [ fnDone, "resolve" ],
1226
+							fail: [ fnFail, "reject" ],
1227
+							progress: [ fnProgress, "notify" ]
1228
+						}, function( handler, data ) {
1229
+							var fn = data[ 0 ],
1230
+								action = data[ 1 ],
1231
+								returned;
1232
+							if ( jQuery.isFunction( fn ) ) {
1233
+								deferred[ handler ](function() {
1234
+									returned = fn.apply( this, arguments );
1235
+									if ( returned && jQuery.isFunction( returned.promise ) ) {
1236
+										returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
1237
+									} else {
1238
+										newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
1239
+									}
1240
+								});
1241
+							} else {
1242
+								deferred[ handler ]( newDefer[ action ] );
1243
+							}
1244
+						});
1245
+					}).promise();
1246
+				},
1247
+				// Get a promise for this deferred
1248
+				// If obj is provided, the promise aspect is added to the object
1249
+				promise: function( obj ) {
1250
+					if ( obj == null ) {
1251
+						obj = promise;
1252
+					} else {
1253
+						for ( var key in promise ) {
1254
+							obj[ key ] = promise[ key ];
1255
+						}
1256
+					}
1257
+					return obj;
1258
+				}
1259
+			},
1260
+			deferred = promise.promise({}),
1261
+			key;
1262
+
1263
+		for ( key in lists ) {
1264
+			deferred[ key ] = lists[ key ].fire;
1265
+			deferred[ key + "With" ] = lists[ key ].fireWith;
1266
+		}
1267
+
1268
+		// Handle state
1269
+		deferred.done( function() {
1270
+			state = "resolved";
1271
+		}, failList.disable, progressList.lock ).fail( function() {
1272
+			state = "rejected";
1273
+		}, doneList.disable, progressList.lock );
1274
+
1275
+		// Call given func if any
1276
+		if ( func ) {
1277
+			func.call( deferred, deferred );
1278
+		}
1279
+
1280
+		// All done!
1281
+		return deferred;
1282
+	},
1283
+
1284
+	// Deferred helper
1285
+	when: function( firstParam ) {
1286
+		var args = sliceDeferred.call( arguments, 0 ),
1287
+			i = 0,
1288
+			length = args.length,
1289
+			pValues = new Array( length ),
1290
+			count = length,
1291
+			pCount = length,
1292
+			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
1293
+				firstParam :
1294
+				jQuery.Deferred(),
1295
+			promise = deferred.promise();
1296
+		function resolveFunc( i ) {
1297
+			return function( value ) {
1298
+				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
1299
+				if ( !( --count ) ) {
1300
+					deferred.resolveWith( deferred, args );
1301
+				}
1302
+			};
1303
+		}
1304
+		function progressFunc( i ) {
1305
+			return function( value ) {
1306
+				pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
1307
+				deferred.notifyWith( promise, pValues );
1308
+			};
1309
+		}
1310
+		if ( length > 1 ) {
1311
+			for ( ; i < length; i++ ) {
1312
+				if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
1313
+					args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
1314
+				} else {
1315
+					--count;
1316
+				}
1317
+			}
1318
+			if ( !count ) {
1319
+				deferred.resolveWith( deferred, args );
1320
+			}
1321
+		} else if ( deferred !== firstParam ) {
1322
+			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
1323
+		}
1324
+		return promise;
1325
+	}
1326
+});
1327
+
1328
+
1329
+
1330
+
1331
+jQuery.support = (function() {
1332
+
1333
+	var support,
1334
+		all,
1335
+		a,
1336
+		select,
1337
+		opt,
1338
+		input,
1339
+		marginDiv,
1340
+		fragment,
1341
+		tds,
1342
+		events,
1343
+		eventName,
1344
+		i,
1345
+		isSupported,
1346
+		div = document.createElement( "div" ),
1347
+		documentElement = document.documentElement;
1348
+
1349
+	// Preliminary tests
1350
+	div.setAttribute("className", "t");
1351
+	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
1352
+
1353
+	all = div.getElementsByTagName( "*" );
1354
+	a = div.getElementsByTagName( "a" )[ 0 ];
1355
+
1356
+	// Can't get basic test support
1357
+	if ( !all || !all.length || !a ) {
1358
+		return {};
1359
+	}
1360
+
1361
+	// First batch of supports tests
1362
+	select = document.createElement( "select" );
1363
+	opt = select.appendChild( document.createElement("option") );
1364
+	input = div.getElementsByTagName( "input" )[ 0 ];
1365
+
1366
+	support = {
1367
+		// IE strips leading whitespace when .innerHTML is used
1368
+		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
1369
+
1370
+		// Make sure that tbody elements aren't automatically inserted
1371
+		// IE will insert them into empty tables
1372
+		tbody: !div.getElementsByTagName("tbody").length,
1373
+
1374
+		// Make sure that link elements get serialized correctly by innerHTML
1375
+		// This requires a wrapper element in IE
1376
+		htmlSerialize: !!div.getElementsByTagName("link").length,
1377
+
1378
+		// Get the style information from getAttribute
1379
+		// (IE uses .cssText instead)
1380
+		style: /top/.test( a.getAttribute("style") ),
1381
+
1382
+		// Make sure that URLs aren't manipulated
1383
+		// (IE normalizes it by default)
1384
+		hrefNormalized: ( a.getAttribute("href") === "/a" ),
1385
+
1386
+		// Make sure that element opacity exists
1387
+		// (IE uses filter instead)
1388
+		// Use a regex to work around a WebKit issue. See #5145
1389
+		opacity: /^0.55/.test( a.style.opacity ),
1390
+
1391
+		// Verify style float existence
1392
+		// (IE uses styleFloat instead of cssFloat)
1393
+		cssFloat: !!a.style.cssFloat,
1394
+
1395
+		// Make sure that if no value is specified for a checkbox
1396
+		// that it defaults to "on".
1397
+		// (WebKit defaults to "" instead)
1398
+		checkOn: ( input.value === "on" ),
1399
+
1400
+		// Make sure that a selected-by-default option has a working selected property.
1401
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
1402
+		optSelected: opt.selected,
1403
+
1404
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
1405
+		getSetAttribute: div.className !== "t",
1406
+
1407
+		// Tests for enctype support on a form(#6743)
1408
+		enctype: !!document.createElement("form").enctype,
1409
+
1410
+		// Makes sure cloning an html5 element does not cause problems
1411
+		// Where outerHTML is undefined, this still works
1412
+		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
1413
+
1414
+		// Will be defined later
1415
+		submitBubbles: true,
1416
+		changeBubbles: true,
1417
+		focusinBubbles: false,
1418
+		deleteExpando: true,
1419
+		noCloneEvent: true,
1420
+		inlineBlockNeedsLayout: false,
1421
+		shrinkWrapBlocks: false,
1422
+		reliableMarginRight: true
1423
+	};
1424
+
1425
+	// Make sure checked status is properly cloned
1426
+	input.checked = true;
1427
+	support.noCloneChecked = input.cloneNode( true ).checked;
1428
+
1429
+	// Make sure that the options inside disabled selects aren't marked as disabled
1430
+	// (WebKit marks them as disabled)
1431
+	select.disabled = true;
1432
+	support.optDisabled = !opt.disabled;
1433
+
1434
+	// Test to see if it's possible to delete an expando from an element
1435
+	// Fails in Internet Explorer
1436
+	try {
1437
+		delete div.test;
1438
+	} catch( e ) {
1439
+		support.deleteExpando = false;
1440
+	}
1441
+
1442
+	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
1443
+		div.attachEvent( "onclick", function() {
1444
+			// Cloning a node shouldn't copy over any
1445
+			// bound event handlers (IE does this)
1446
+			support.noCloneEvent = false;
1447
+		});
1448
+		div.cloneNode( true ).fireEvent( "onclick" );
1449
+	}
1450
+
1451
+	// Check if a radio maintains its value
1452
+	// after being appended to the DOM
1453
+	input = document.createElement("input");
1454
+	input.value = "t";
1455
+	input.setAttribute("type", "radio");
1456
+	support.radioValue = input.value === "t";
1457
+
1458
+	input.setAttribute("checked", "checked");
1459
+	div.appendChild( input );
1460
+	fragment = document.createDocumentFragment();
1461
+	fragment.appendChild( div.lastChild );
1462
+
1463
+	// WebKit doesn't clone checked state correctly in fragments
1464
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
1465
+
1466
+	// Check if a disconnected checkbox will retain its checked
1467
+	// value of true after appended to the DOM (IE6/7)
1468
+	support.appendChecked = input.checked;
1469
+
1470
+	fragment.removeChild( input );
1471
+	fragment.appendChild( div );
1472
+
1473
+	div.innerHTML = "";
1474
+
1475
+	// Check if div with explicit width and no margin-right incorrectly
1476
+	// gets computed margin-right based on width of container. For more
1477
+	// info see bug #3333
1478
+	// Fails in WebKit before Feb 2011 nightlies
1479
+	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
1480
+	if ( window.getComputedStyle ) {
1481
+		marginDiv = document.createElement( "div" );
1482
+		marginDiv.style.width = "0";
1483
+		marginDiv.style.marginRight = "0";
1484
+		div.style.width = "2px";
1485
+		div.appendChild( marginDiv );
1486
+		support.reliableMarginRight =
1487
+			( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
1488
+	}
1489
+
1490
+	// Technique from Juriy Zaytsev
1491
+	// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
1492
+	// We only care about the case where non-standard event systems
1493
+	// are used, namely in IE. Short-circuiting here helps us to
1494
+	// avoid an eval call (in setAttribute) which can cause CSP
1495
+	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
1496
+	if ( div.attachEvent ) {
1497
+		for( i in {
1498
+			submit: 1,
1499
+			change: 1,
1500
+			focusin: 1
1501
+		}) {
1502
+			eventName = "on" + i;
1503
+			isSupported = ( eventName in div );
1504
+			if ( !isSupported ) {
1505
+				div.setAttribute( eventName, "return;" );
1506
+				isSupported = ( typeof div[ eventName ] === "function" );
1507
+			}
1508
+			support[ i + "Bubbles" ] = isSupported;
1509
+		}
1510
+	}
1511
+
1512
+	fragment.removeChild( div );
1513
+
1514
+	// Null elements to avoid leaks in IE
1515
+	fragment = select = opt = marginDiv = div = input = null;
1516
+
1517
+	// Run tests that need a body at doc ready
1518
+	jQuery(function() {
1519
+		var container, outer, inner, table, td, offsetSupport,
1520
+			conMarginTop, ptlm, vb, style, html,
1521
+			body = document.getElementsByTagName("body")[0];
1522
+
1523
+		if ( !body ) {
1524
+			// Return for frameset docs that don't have a body
1525
+			return;
1526
+		}
1527
+
1528
+		conMarginTop = 1;
1529
+		ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";
1530
+		vb = "visibility:hidden;border:0;";
1531
+		style = "style='" + ptlm + "border:5px solid #000;padding:0;'";
1532
+		html = "<div " + style + "><div></div></div>" +
1533
+			"<table " + style + " cellpadding='0' cellspacing='0'>" +
1534
+			"<tr><td></td></tr></table>";
1535
+
1536
+		container = document.createElement("div");
1537
+		container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
1538
+		body.insertBefore( container, body.firstChild );
1539
+
1540
+		// Construct the test element
1541
+		div = document.createElement("div");
1542
+		container.appendChild( div );
1543
+
1544
+		// Check if table cells still have offsetWidth/Height when they are set
1545
+		// to display:none and there are still other visible table cells in a
1546
+		// table row; if so, offsetWidth/Height are not reliable for use when
1547
+		// determining if an element has been hidden directly using
1548
+		// display:none (it is still safe to use offsets if a parent element is
1549
+		// hidden; don safety goggles and see bug #4512 for more information).
1550
+		// (only IE 8 fails this test)
1551
+		div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
1552
+		tds = div.getElementsByTagName( "td" );
1553
+		isSupported = ( tds[ 0 ].offsetHeight === 0 );
1554
+
1555
+		tds[ 0 ].style.display = "";
1556
+		tds[ 1 ].style.display = "none";
1557
+
1558
+		// Check if empty table cells still have offsetWidth/Height
1559
+		// (IE <= 8 fail this test)
1560
+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
1561
+
1562
+		// Figure out if the W3C box model works as expected
1563
+		div.innerHTML = "";
1564
+		div.style.width = div.style.paddingLeft = "1px";
1565
+		jQuery.boxModel = support.boxModel = div.offsetWidth === 2;
1566
+
1567
+		if ( typeof div.style.zoom !== "undefined" ) {
1568
+			// Check if natively block-level elements act like inline-block
1569
+			// elements when setting their display to 'inline' and giving
1570
+			// them layout
1571
+			// (IE < 8 does this)
1572
+			div.style.display = "inline";
1573
+			div.style.zoom = 1;
1574
+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
1575
+
1576
+			// Check if elements with layout shrink-wrap their children
1577
+			// (IE 6 does this)
1578
+			div.style.display = "";
1579
+			div.innerHTML = "<div style='width:4px;'></div>";
1580
+			support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
1581
+		}
1582
+
1583
+		div.style.cssText = ptlm + vb;
1584
+		div.innerHTML = html;
1585
+
1586
+		outer = div.firstChild;
1587
+		inner = outer.firstChild;
1588
+		td = outer.nextSibling.firstChild.firstChild;
1589
+
1590
+		offsetSupport = {
1591
+			doesNotAddBorder: ( inner.offsetTop !== 5 ),
1592
+			doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
1593
+		};
1594
+
1595
+		inner.style.position = "fixed";
1596
+		inner.style.top = "20px";
1597
+
1598
+		// safari subtracts parent border width here which is 5px
1599
+		offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
1600
+		inner.style.position = inner.style.top = "";
1601
+
1602
+		outer.style.overflow = "hidden";
1603
+		outer.style.position = "relative";
1604
+
1605
+		offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
1606
+		offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
1607
+
1608
+		body.removeChild( container );
1609
+		div  = container = null;
1610
+
1611
+		jQuery.extend( support, offsetSupport );
1612
+	});
1613
+
1614
+	return support;
1615
+})();
1616
+
1617
+
1618
+
1619
+
1620
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
1621
+	rmultiDash = /([A-Z])/g;
1622
+
1623
+jQuery.extend({
1624
+	cache: {},
1625
+
1626
+	// Please use with caution
1627
+	uuid: 0,
1628
+
1629
+	// Unique for each copy of jQuery on the page
1630
+	// Non-digits removed to match rinlinejQuery
1631
+	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
1632
+
1633
+	// The following elements throw uncatchable exceptions if you
1634
+	// attempt to add expando properties to them.
1635
+	noData: {
1636
+		"embed": true,
1637
+		// Ban all objects except for Flash (which handle expandos)
1638
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
1639
+		"applet": true
1640
+	},
1641
+
1642
+	hasData: function( elem ) {
1643
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
1644
+		return !!elem && !isEmptyDataObject( elem );
1645
+	},
1646
+
1647
+	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
1648
+		if ( !jQuery.acceptData( elem ) ) {
1649
+			return;
1650
+		}
1651
+
1652
+		var privateCache, thisCache, ret,
1653
+			internalKey = jQuery.expando,
1654
+			getByName = typeof name === "string",
1655
+
1656
+			// We have to handle DOM nodes and JS objects differently because IE6-7
1657
+			// can't GC object references properly across the DOM-JS boundary
1658
+			isNode = elem.nodeType,
1659
+
1660
+			// Only DOM nodes need the global jQuery cache; JS object data is
1661
+			// attached directly to the object so GC can occur automatically
1662
+			cache = isNode ? jQuery.cache : elem,
1663
+
1664
+			// Only defining an ID for JS objects if its cache already exists allows
1665
+			// the code to shortcut on the same path as a DOM node with no cache
1666
+			id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
1667
+			isEvents = name === "events";
1668
+
1669
+		// Avoid doing any more work than we need to when trying to get data on an
1670
+		// object that has no data at all
1671
+		if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
1672
+			return;
1673
+		}
1674
+
1675
+		if ( !id ) {
1676
+			// Only DOM nodes need a new unique ID for each element since their data
1677
+			// ends up in the global cache
1678
+			if ( isNode ) {
1679
+				elem[ internalKey ] = id = ++jQuery.uuid;
1680
+			} else {
1681
+				id = internalKey;
1682
+			}
1683
+		}
1684
+
1685
+		if ( !cache[ id ] ) {
1686
+			cache[ id ] = {};
1687
+
1688
+			// Avoids exposing jQuery metadata on plain JS objects when the object
1689
+			// is serialized using JSON.stringify
1690
+			if ( !isNode ) {
1691
+				cache[ id ].toJSON = jQuery.noop;
1692
+			}
1693
+		}
1694
+
1695
+		// An object can be passed to jQuery.data instead of a key/value pair; this gets
1696
+		// shallow copied over onto the existing cache
1697
+		if ( typeof name === "object" || typeof name === "function" ) {
1698
+			if ( pvt ) {
1699
+				cache[ id ] = jQuery.extend( cache[ id ], name );
1700
+			} else {
1701
+				cache[ id ].data = jQuery.extend( cache[ id ].data, name );
1702
+			}
1703
+		}
1704
+
1705
+		privateCache = thisCache = cache[ id ];
1706
+
1707
+		// jQuery data() is stored in a separate object inside the object's internal data
1708
+		// cache in order to avoid key collisions between internal data and user-defined
1709
+		// data.
1710
+		if ( !pvt ) {
1711
+			if ( !thisCache.data ) {
1712
+				thisCache.data = {};
1713
+			}
1714
+
1715
+			thisCache = thisCache.data;
1716
+		}
1717
+
1718
+		if ( data !== undefined ) {
1719
+			thisCache[ jQuery.camelCase( name ) ] = data;
1720
+		}
1721
+
1722
+		// Users should not attempt to inspect the internal events object using jQuery.data,
1723
+		// it is undocumented and subject to change. But does anyone listen? No.
1724
+		if ( isEvents && !thisCache[ name ] ) {
1725
+			return privateCache.events;
1726
+		}
1727
+
1728
+		// Check for both converted-to-camel and non-converted data property names
1729
+		// If a data property was specified
1730
+		if ( getByName ) {
1731
+
1732
+			// First Try to find as-is property data
1733
+			ret = thisCache[ name ];
1734
+
1735
+			// Test for null|undefined property data
1736
+			if ( ret == null ) {
1737
+
1738
+				// Try to find the camelCased property
1739
+				ret = thisCache[ jQuery.camelCase( name ) ];
1740
+			}
1741
+		} else {
1742
+			ret = thisCache;
1743
+		}
1744
+
1745
+		return ret;
1746
+	},
1747
+
1748
+	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
1749
+		if ( !jQuery.acceptData( elem ) ) {
1750
+			return;
1751
+		}
1752
+
1753
+		var thisCache, i, l,
1754
+
1755
+			// Reference to internal data cache key
1756
+			internalKey = jQuery.expando,
1757
+
1758
+			isNode = elem.nodeType,
1759
+
1760
+			// See jQuery.data for more information
1761
+			cache = isNode ? jQuery.cache : elem,
1762
+
1763
+			// See jQuery.data for more information
1764
+			id = isNode ? elem[ internalKey ] : internalKey;
1765
+
1766
+		// If there is already no cache entry for this object, there is no
1767
+		// purpose in continuing
1768
+		if ( !cache[ id ] ) {
1769
+			return;
1770
+		}
1771
+
1772
+		if ( name ) {
1773
+
1774
+			thisCache = pvt ? cache[ id ] : cache[ id ].data;
1775
+
1776
+			if ( thisCache ) {
1777
+
1778
+				// Support array or space separated string names for data keys
1779
+				if ( !jQuery.isArray( name ) ) {
1780
+
1781
+					// try the string as a key before any manipulation
1782
+					if ( name in thisCache ) {
1783
+						name = [ name ];
1784
+					} else {
1785
+
1786
+						// split the camel cased version by spaces unless a key with the spaces exists
1787
+						name = jQuery.camelCase( name );
1788
+						if ( name in thisCache ) {
1789
+							name = [ name ];
1790
+						} else {
1791
+							name = name.split( " " );
1792
+						}
1793
+					}
1794
+				}
1795
+
1796
+				for ( i = 0, l = name.length; i < l; i++ ) {
1797
+					delete thisCache[ name[i] ];
1798
+				}
1799
+
1800
+				// If there is no data left in the cache, we want to continue
1801
+				// and let the cache object itself get destroyed
1802
+				if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
1803
+					return;
1804
+				}
1805
+			}
1806
+		}
1807
+
1808
+		// See jQuery.data for more information
1809
+		if ( !pvt ) {
1810
+			delete cache[ id ].data;
1811
+
1812
+			// Don't destroy the parent cache unless the internal data object
1813
+			// had been the only thing left in it
1814
+			if ( !isEmptyDataObject(cache[ id ]) ) {
1815
+				return;
1816
+			}
1817
+		}
1818
+
1819
+		// Browsers that fail expando deletion also refuse to delete expandos on
1820
+		// the window, but it will allow it on all other JS objects; other browsers
1821
+		// don't care
1822
+		// Ensure that `cache` is not a window object #10080
1823
+		if ( jQuery.support.deleteExpando || !cache.setInterval ) {
1824
+			delete cache[ id ];
1825
+		} else {
1826
+			cache[ id ] = null;
1827
+		}
1828
+
1829
+		// We destroyed the cache and need to eliminate the expando on the node to avoid
1830
+		// false lookups in the cache for entries that no longer exist
1831
+		if ( isNode ) {
1832
+			// IE does not allow us to delete expando properties from nodes,
1833
+			// nor does it have a removeAttribute function on Document nodes;
1834
+			// we must handle all of these cases
1835
+			if ( jQuery.support.deleteExpando ) {
1836
+				delete elem[ internalKey ];
1837
+			} else if ( elem.removeAttribute ) {
1838
+				elem.removeAttribute( internalKey );
1839
+			} else {
1840
+				elem[ internalKey ] = null;
1841
+			}
1842
+		}
1843
+	},
1844
+
1845
+	// For internal use only.
1846
+	_data: function( elem, name, data ) {
1847
+		return jQuery.data( elem, name, data, true );
1848
+	},
1849
+
1850
+	// A method for determining if a DOM node can handle the data expando
1851
+	acceptData: function( elem ) {
1852
+		if ( elem.nodeName ) {
1853
+			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
1854
+
1855
+			if ( match ) {
1856
+				return !(match === true || elem.getAttribute("classid") !== match);
1857
+			}
1858
+		}
1859
+
1860
+		return true;
1861
+	}
1862
+});
1863
+
1864
+jQuery.fn.extend({
1865
+	data: function( key, value ) {
1866
+		var parts, attr, name,
1867
+			data = null;
1868
+
1869
+		if ( typeof key === "undefined" ) {
1870
+			if ( this.length ) {
1871
+				data = jQuery.data( this[0] );
1872
+
1873
+				if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
1874
+					attr = this[0].attributes;
1875
+					for ( var i = 0, l = attr.length; i < l; i++ ) {
1876
+						name = attr[i].name;
1877
+
1878
+						if ( name.indexOf( "data-" ) === 0 ) {
1879
+							name = jQuery.camelCase( name.substring(5) );
1880
+
1881
+							dataAttr( this[0], name, data[ name ] );
1882
+						}
1883
+					}
1884
+					jQuery._data( this[0], "parsedAttrs", true );
1885
+				}
1886
+			}
1887
+
1888
+			return data;
1889
+
1890
+		} else if ( typeof key === "object" ) {
1891
+			return this.each(function() {
1892
+				jQuery.data( this, key );
1893
+			});
1894
+		}
1895
+
1896
+		parts = key.split(".");
1897
+		parts[1] = parts[1] ? "." + parts[1] : "";
1898
+
1899
+		if ( value === undefined ) {
1900
+			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
1901
+
1902
+			// Try to fetch any internally stored data first
1903
+			if ( data === undefined && this.length ) {
1904
+				data = jQuery.data( this[0], key );
1905
+				data = dataAttr( this[0], key, data );
1906
+			}
1907
+
1908
+			return data === undefined && parts[1] ?
1909
+				this.data( parts[0] ) :
1910
+				data;
1911
+
1912
+		} else {
1913
+			return this.each(function() {
1914
+				var self = jQuery( this ),
1915
+					args = [ parts[0], value ];
1916
+
1917
+				self.triggerHandler( "setData" + parts[1] + "!", args );
1918
+				jQuery.data( this, key, value );
1919
+				self.triggerHandler( "changeData" + parts[1] + "!", args );
1920
+			});
1921
+		}
1922
+	},
1923
+
1924
+	removeData: function( key ) {
1925
+		return this.each(function() {
1926
+			jQuery.removeData( this, key );
1927
+		});
1928
+	}
1929
+});
1930
+
1931
+function dataAttr( elem, key, data ) {
1932
+	// If nothing was found internally, try to fetch any
1933
+	// data from the HTML5 data-* attribute
1934
+	if ( data === undefined && elem.nodeType === 1 ) {
1935
+
1936
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
1937
+
1938
+		data = elem.getAttribute( name );
1939
+
1940
+		if ( typeof data === "string" ) {
1941
+			try {
1942
+				data = data === "true" ? true :
1943
+				data === "false" ? false :
1944
+				data === "null" ? null :
1945
+				jQuery.isNumeric( data ) ? parseFloat( data ) :
1946
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
1947
+					data;
1948
+			} catch( e ) {}
1949
+
1950
+			// Make sure we set the data so it isn't changed later
1951
+			jQuery.data( elem, key, data );
1952
+
1953
+		} else {
1954
+			data = undefined;
1955
+		}
1956
+	}
1957
+
1958
+	return data;
1959
+}
1960
+
1961
+// checks a cache object for emptiness
1962
+function isEmptyDataObject( obj ) {
1963
+	for ( var name in obj ) {
1964
+
1965
+		// if the public data object is empty, the private is still empty
1966
+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
1967
+			continue;
1968
+		}
1969
+		if ( name !== "toJSON" ) {
1970
+			return false;
1971
+		}
1972
+	}
1973
+
1974
+	return true;
1975
+}
1976
+
1977
+
1978
+
1979
+
1980
+function handleQueueMarkDefer( elem, type, src ) {
1981
+	var deferDataKey = type + "defer",
1982
+		queueDataKey = type + "queue",
1983
+		markDataKey = type + "mark",
1984
+		defer = jQuery._data( elem, deferDataKey );
1985
+	if ( defer &&
1986
+		( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
1987
+		( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
1988
+		// Give room for hard-coded callbacks to fire first
1989
+		// and eventually mark/queue something else on the element
1990
+		setTimeout( function() {
1991
+			if ( !jQuery._data( elem, queueDataKey ) &&
1992
+				!jQuery._data( elem, markDataKey ) ) {
1993
+				jQuery.removeData( elem, deferDataKey, true );
1994
+				defer.fire();
1995
+			}
1996
+		}, 0 );
1997
+	}
1998
+}
1999
+
2000
+jQuery.extend({
2001
+
2002
+	_mark: function( elem, type ) {
2003
+		if ( elem ) {
2004
+			type = ( type || "fx" ) + "mark";
2005
+			jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
2006
+		}
2007
+	},
2008
+
2009
+	_unmark: function( force, elem, type ) {
2010
+		if ( force !== true ) {
2011
+			type = elem;
2012
+			elem = force;
2013
+			force = false;
2014
+		}
2015
+		if ( elem ) {
2016
+			type = type || "fx";
2017
+			var key = type + "mark",
2018
+				count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
2019
+			if ( count ) {
2020
+				jQuery._data( elem, key, count );
2021
+			} else {
2022
+				jQuery.removeData( elem, key, true );
2023
+				handleQueueMarkDefer( elem, type, "mark" );
2024
+			}
2025
+		}
2026
+	},
2027
+
2028
+	queue: function( elem, type, data ) {
2029
+		var q;
2030
+		if ( elem ) {
2031
+			type = ( type || "fx" ) + "queue";
2032
+			q = jQuery._data( elem, type );
2033
+
2034
+			// Speed up dequeue by getting out quickly if this is just a lookup
2035
+			if ( data ) {
2036
+				if ( !q || jQuery.isArray(data) ) {
2037
+					q = jQuery._data( elem, type, jQuery.makeArray(data) );
2038
+				} else {
2039
+					q.push( data );
2040
+				}
2041
+			}
2042
+			return q || [];
2043
+		}
2044
+	},
2045
+
2046
+	dequeue: function( elem, type ) {
2047
+		type = type || "fx";
2048
+
2049
+		var queue = jQuery.queue( elem, type ),
2050
+			fn = queue.shift(),
2051
+			hooks = {};
2052
+
2053
+		// If the fx queue is dequeued, always remove the progress sentinel
2054
+		if ( fn === "inprogress" ) {
2055
+			fn = queue.shift();
2056
+		}
2057
+
2058
+		if ( fn ) {
2059
+			// Add a progress sentinel to prevent the fx queue from being
2060
+			// automatically dequeued
2061
+			if ( type === "fx" ) {
2062
+				queue.unshift( "inprogress" );
2063
+			}
2064
+
2065
+			jQuery._data( elem, type + ".run", hooks );
2066
+			fn.call( elem, function() {
2067
+				jQuery.dequeue( elem, type );
2068
+			}, hooks );
2069
+		}
2070
+
2071
+		if ( !queue.length ) {
2072
+			jQuery.removeData( elem, type + "queue " + type + ".run", true );
2073
+			handleQueueMarkDefer( elem, type, "queue" );
2074
+		}
2075
+	}
2076
+});
2077
+
2078
+jQuery.fn.extend({
2079
+	queue: function( type, data ) {
2080
+		if ( typeof type !== "string" ) {
2081
+			data = type;
2082
+			type = "fx";
2083
+		}
2084
+
2085
+		if ( data === undefined ) {
2086
+			return jQuery.queue( this[0], type );
2087
+		}
2088
+		return this.each(function() {
2089
+			var queue = jQuery.queue( this, type, data );
2090
+
2091
+			if ( type === "fx" && queue[0] !== "inprogress" ) {
2092
+				jQuery.dequeue( this, type );
2093
+			}
2094
+		});
2095
+	},
2096
+	dequeue: function( type ) {
2097
+		return this.each(function() {
2098
+			jQuery.dequeue( this, type );
2099
+		});
2100
+	},
2101
+	// Based off of the plugin by Clint Helfers, with permission.
2102
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
2103
+	delay: function( time, type ) {
2104
+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
2105
+		type = type || "fx";
2106
+
2107
+		return this.queue( type, function( next, hooks ) {
2108
+			var timeout = setTimeout( next, time );
2109
+			hooks.stop = function() {
2110
+				clearTimeout( timeout );
2111
+			};
2112
+		});
2113
+	},
2114
+	clearQueue: function( type ) {
2115
+		return this.queue( type || "fx", [] );
2116
+	},
2117
+	// Get a promise resolved when queues of a certain type
2118
+	// are emptied (fx is the type by default)
2119
+	promise: function( type, object ) {
2120
+		if ( typeof type !== "string" ) {
2121
+			object = type;
2122
+			type = undefined;
2123
+		}
2124
+		type = type || "fx";
2125
+		var defer = jQuery.Deferred(),
2126
+			elements = this,
2127
+			i = elements.length,
2128
+			count = 1,
2129
+			deferDataKey = type + "defer",
2130
+			queueDataKey = type + "queue",
2131
+			markDataKey = type + "mark",
2132
+			tmp;
2133
+		function resolve() {
2134
+			if ( !( --count ) ) {
2135
+				defer.resolveWith( elements, [ elements ] );
2136
+			}
2137
+		}
2138
+		while( i-- ) {
2139
+			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
2140
+					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
2141
+						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
2142
+					jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
2143
+				count++;
2144
+				tmp.add( resolve );
2145
+			}
2146
+		}
2147
+		resolve();
2148
+		return defer.promise();
2149
+	}
2150
+});
2151
+
2152
+
2153
+
2154
+
2155
+var rclass = /[\n\t\r]/g,
2156
+	rspace = /\s+/,
2157
+	rreturn = /\r/g,
2158
+	rtype = /^(?:button|input)$/i,
2159
+	rfocusable = /^(?:button|input|object|select|textarea)$/i,
2160
+	rclickable = /^a(?:rea)?$/i,
2161
+	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
2162
+	getSetAttribute = jQuery.support.getSetAttribute,
2163
+	nodeHook, boolHook, fixSpecified;
2164
+
2165
+jQuery.fn.extend({
2166
+	attr: function( name, value ) {
2167
+		return jQuery.access( this, name, value, true, jQuery.attr );
2168
+	},
2169
+
2170
+	removeAttr: function( name ) {
2171
+		return this.each(function() {
2172
+			jQuery.removeAttr( this, name );
2173
+		});
2174
+	},
2175
+
2176
+	prop: function( name, value ) {
2177
+		return jQuery.access( this, name, value, true, jQuery.prop );
2178
+	},
2179
+
2180
+	removeProp: function( name ) {
2181
+		name = jQuery.propFix[ name ] || name;
2182
+		return this.each(function() {
2183
+			// try/catch handles cases where IE balks (such as removing a property on window)
2184
+			try {
2185
+				this[ name ] = undefined;
2186
+				delete this[ name ];
2187
+			} catch( e ) {}
2188
+		});
2189
+	},
2190
+
2191
+	addClass: function( value ) {
2192
+		var classNames, i, l, elem,
2193
+			setClass, c, cl;
2194
+
2195
+		if ( jQuery.isFunction( value ) ) {
2196
+			return this.each(function( j ) {
2197
+				jQuery( this ).addClass( value.call(this, j, this.className) );
2198
+			});
2199
+		}
2200
+
2201
+		if ( value && typeof value === "string" ) {
2202
+			classNames = value.split( rspace );
2203
+
2204
+			for ( i = 0, l = this.length; i < l; i++ ) {
2205
+				elem = this[ i ];
2206
+
2207
+				if ( elem.nodeType === 1 ) {
2208
+					if ( !elem.className && classNames.length === 1 ) {
2209
+						elem.className = value;
2210
+
2211
+					} else {
2212
+						setClass = " " + elem.className + " ";
2213
+
2214
+						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
2215
+							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
2216
+								setClass += classNames[ c ] + " ";
2217
+							}
2218
+						}
2219
+						elem.className = jQuery.trim( setClass );
2220
+					}
2221
+				}
2222
+			}
2223
+		}
2224
+
2225
+		return this;
2226
+	},
2227
+
2228
+	removeClass: function( value ) {
2229
+		var classNames, i, l, elem, className, c, cl;
2230
+
2231
+		if ( jQuery.isFunction( value ) ) {
2232
+			return this.each(function( j ) {
2233
+				jQuery( this ).removeClass( value.call(this, j, this.className) );
2234
+			});
2235
+		}
2236
+
2237
+		if ( (value && typeof value === "string") || value === undefined ) {
2238
+			classNames = ( value || "" ).split( rspace );
2239
+
2240
+			for ( i = 0, l = this.length; i < l; i++ ) {
2241
+				elem = this[ i ];
2242
+
2243
+				if ( elem.nodeType === 1 && elem.className ) {
2244
+					if ( value ) {
2245
+						className = (" " + elem.className + " ").replace( rclass, " " );
2246
+						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
2247
+							className = className.replace(" " + classNames[ c ] + " ", " ");
2248
+						}
2249
+						elem.className = jQuery.trim( className );
2250
+
2251
+					} else {
2252
+						elem.className = "";
2253
+					}
2254
+				}
2255
+			}
2256
+		}
2257
+
2258
+		return this;
2259
+	},
2260
+
2261
+	toggleClass: function( value, stateVal ) {
2262
+		var type = typeof value,
2263
+			isBool = typeof stateVal === "boolean";
2264
+
2265
+		if ( jQuery.isFunction( value ) ) {
2266
+			return this.each(function( i ) {
2267
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
2268
+			});
2269
+		}
2270
+
2271
+		return this.each(function() {
2272
+			if ( type === "string" ) {
2273
+				// toggle individual class names
2274
+				var className,
2275
+					i = 0,
2276
+					self = jQuery( this ),
2277
+					state = stateVal,
2278
+					classNames = value.split( rspace );
2279
+
2280
+				while ( (className = classNames[ i++ ]) ) {
2281
+					// check each className given, space seperated list
2282
+					state = isBool ? state : !self.hasClass( className );
2283
+					self[ state ? "addClass" : "removeClass" ]( className );
2284
+				}
2285
+
2286
+			} else if ( type === "undefined" || type === "boolean" ) {
2287
+				if ( this.className ) {
2288
+					// store className if set
2289
+					jQuery._data( this, "__className__", this.className );
2290
+				}
2291
+
2292
+				// toggle whole className
2293
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
2294
+			}
2295
+		});
2296
+	},
2297
+
2298
+	hasClass: function( selector ) {
2299
+		var className = " " + selector + " ",
2300
+			i = 0,
2301
+			l = this.length;
2302
+		for ( ; i < l; i++ ) {
2303
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
2304
+				return true;
2305
+			}
2306
+		}
2307
+
2308
+		return false;
2309
+	},
2310
+
2311
+	val: function( value ) {
2312
+		var hooks, ret, isFunction,
2313
+			elem = this[0];
2314
+
2315
+		if ( !arguments.length ) {
2316
+			if ( elem ) {
2317
+				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
2318
+
2319
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
2320
+					return ret;
2321
+				}
2322
+
2323
+				ret = elem.value;
2324
+
2325
+				return typeof ret === "string" ?
2326
+					// handle most common string cases
2327
+					ret.replace(rreturn, "") :
2328
+					// handle cases where value is null/undef or number
2329
+					ret == null ? "" : ret;
2330
+			}
2331
+
2332
+			return;
2333
+		}
2334
+
2335
+		isFunction = jQuery.isFunction( value );
2336
+
2337
+		return this.each(function( i ) {
2338
+			var self = jQuery(this), val;
2339
+
2340
+			if ( this.nodeType !== 1 ) {
2341
+				return;
2342
+			}
2343
+
2344
+			if ( isFunction ) {
2345
+				val = value.call( this, i, self.val() );
2346
+			} else {
2347
+				val = value;
2348
+			}
2349
+
2350
+			// Treat null/undefined as ""; convert numbers to string
2351
+			if ( val == null ) {
2352
+				val = "";
2353
+			} else if ( typeof val === "number" ) {
2354
+				val += "";
2355
+			} else if ( jQuery.isArray( val ) ) {
2356
+				val = jQuery.map(val, function ( value ) {
2357
+					return value == null ? "" : value + "";
2358
+				});
2359
+			}
2360
+
2361
+			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
2362
+
2363
+			// If set returns undefined, fall back to normal setting
2364
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
2365
+				this.value = val;
2366
+			}
2367
+		});
2368
+	}
2369
+});
2370
+
2371
+jQuery.extend({
2372
+	valHooks: {
2373
+		option: {
2374
+			get: function( elem ) {
2375
+				// attributes.value is undefined in Blackberry 4.7 but
2376
+				// uses .value. See #6932
2377
+				var val = elem.attributes.value;
2378
+				return !val || val.specified ? elem.value : elem.text;
2379
+			}
2380
+		},
2381
+		select: {
2382
+			get: function( elem ) {
2383
+				var value, i, max, option,
2384
+					index = elem.selectedIndex,
2385
+					values = [],
2386
+					options = elem.options,
2387
+					one = elem.type === "select-one";
2388
+
2389
+				// Nothing was selected
2390
+				if ( index < 0 ) {
2391
+					return null;
2392
+				}
2393
+
2394
+				// Loop through all the selected options
2395
+				i = one ? index : 0;
2396
+				max = one ? index + 1 : options.length;
2397
+				for ( ; i < max; i++ ) {
2398
+					option = options[ i ];
2399
+
2400
+					// Don't return options that are disabled or in a disabled optgroup
2401
+					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
2402
+							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
2403
+
2404
+						// Get the specific value for the option
2405
+						value = jQuery( option ).val();
2406
+
2407
+						// We don't need an array for one selects
2408
+						if ( one ) {
2409
+							return value;
2410
+						}
2411
+
2412
+						// Multi-Selects return an array
2413
+						values.push( value );
2414
+					}
2415
+				}
2416
+
2417
+				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
2418
+				if ( one && !values.length && options.length ) {
2419
+					return jQuery( options[ index ] ).val();
2420
+				}
2421
+
2422
+				return values;
2423
+			},
2424
+
2425
+			set: function( elem, value ) {
2426
+				var values = jQuery.makeArray( value );
2427
+
2428
+				jQuery(elem).find("option").each(function() {
2429
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
2430
+				});
2431
+
2432
+				if ( !values.length ) {
2433
+					elem.selectedIndex = -1;
2434
+				}
2435
+				return values;
2436
+			}
2437
+		}
2438
+	},
2439
+
2440
+	attrFn: {
2441
+		val: true,
2442
+		css: true,
2443
+		html: true,
2444
+		text: true,
2445
+		data: true,
2446
+		width: true,
2447
+		height: true,
2448
+		offset: true
2449
+	},
2450
+
2451
+	attr: function( elem, name, value, pass ) {
2452
+		var ret, hooks, notxml,
2453
+			nType = elem.nodeType;
2454
+
2455
+		// don't get/set attributes on text, comment and attribute nodes
2456
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
2457
+			return;
2458
+		}
2459
+
2460
+		if ( pass && name in jQuery.attrFn ) {
2461
+			return jQuery( elem )[ name ]( value );
2462
+		}
2463
+
2464
+		// Fallback to prop when attributes are not supported
2465
+		if ( typeof elem.getAttribute === "undefined" ) {
2466
+			return jQuery.prop( elem, name, value );
2467
+		}
2468
+
2469
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
2470
+
2471
+		// All attributes are lowercase
2472
+		// Grab necessary hook if one is defined
2473
+		if ( notxml ) {
2474
+			name = name.toLowerCase();
2475
+			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
2476
+		}
2477
+
2478
+		if ( value !== undefined ) {
2479
+
2480
+			if ( value === null ) {
2481
+				jQuery.removeAttr( elem, name );
2482
+				return;
2483
+
2484
+			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
2485
+				return ret;
2486
+
2487
+			} else {
2488
+				elem.setAttribute( name, "" + value );
2489
+				return value;
2490
+			}
2491
+
2492
+		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
2493
+			return ret;
2494
+
2495
+		} else {
2496
+
2497
+			ret = elem.getAttribute( name );
2498
+
2499
+			// Non-existent attributes return null, we normalize to undefined
2500
+			return ret === null ?
2501
+				undefined :
2502
+				ret;
2503
+		}
2504
+	},
2505
+
2506
+	removeAttr: function( elem, value ) {
2507
+		var propName, attrNames, name, l,
2508
+			i = 0;
2509
+
2510
+		if ( value && elem.nodeType === 1 ) {
2511
+			attrNames = value.toLowerCase().split( rspace );
2512
+			l = attrNames.length;
2513
+
2514
+			for ( ; i < l; i++ ) {
2515
+				name = attrNames[ i ];
2516
+
2517
+				if ( name ) {
2518
+					propName = jQuery.propFix[ name ] || name;
2519
+
2520
+					// See #9699 for explanation of this approach (setting first, then removal)
2521
+					jQuery.attr( elem, name, "" );
2522
+					elem.removeAttribute( getSetAttribute ? name : propName );
2523
+
2524
+					// Set corresponding property to false for boolean attributes
2525
+					if ( rboolean.test( name ) && propName in elem ) {
2526
+						elem[ propName ] = false;
2527
+					}
2528
+				}
2529
+			}
2530
+		}
2531
+	},
2532
+
2533
+	attrHooks: {
2534
+		type: {
2535
+			set: function( elem, value ) {
2536
+				// We can't allow the type property to be changed (since it causes problems in IE)
2537
+				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
2538
+					jQuery.error( "type property can't be changed" );
2539
+				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
2540
+					// Setting the type on a radio button after the value resets the value in IE6-9
2541
+					// Reset value to it's default in case type is set after value
2542
+					// This is for element creation
2543
+					var val = elem.value;
2544
+					elem.setAttribute( "type", value );
2545
+					if ( val ) {
2546
+						elem.value = val;
2547
+					}
2548
+					return value;
2549
+				}
2550
+			}
2551
+		},
2552
+		// Use the value property for back compat
2553
+		// Use the nodeHook for button elements in IE6/7 (#1954)
2554
+		value: {
2555
+			get: function( elem, name ) {
2556
+				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
2557
+					return nodeHook.get( elem, name );
2558
+				}
2559
+				return name in elem ?
2560
+					elem.value :
2561
+					null;
2562
+			},
2563
+			set: function( elem, value, name ) {
2564
+				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
2565
+					return nodeHook.set( elem, value, name );
2566
+				}
2567
+				// Does not return so that setAttribute is also used
2568
+				elem.value = value;
2569
+			}
2570
+		}
2571
+	},
2572
+
2573
+	propFix: {
2574
+		tabindex: "tabIndex",
2575
+		readonly: "readOnly",
2576
+		"for": "htmlFor",
2577
+		"class": "className",
2578
+		maxlength: "maxLength",
2579
+		cellspacing: "cellSpacing",
2580
+		cellpadding: "cellPadding",
2581
+		rowspan: "rowSpan",
2582
+		colspan: "colSpan",
2583
+		usemap: "useMap",
2584
+		frameborder: "frameBorder",
2585
+		contenteditable: "contentEditable"
2586
+	},
2587
+
2588
+	prop: function( elem, name, value ) {
2589
+		var ret, hooks, notxml,
2590
+			nType = elem.nodeType;
2591
+
2592
+		// don't get/set properties on text, comment and attribute nodes
2593
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
2594
+			return;
2595
+		}
2596
+
2597
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
2598
+
2599
+		if ( notxml ) {
2600
+			// Fix name and attach hooks
2601
+			name = jQuery.propFix[ name ] || name;
2602
+			hooks = jQuery.propHooks[ name ];
2603
+		}
2604
+
2605
+		if ( value !== undefined ) {
2606
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
2607
+				return ret;
2608
+
2609
+			} else {
2610
+				return ( elem[ name ] = value );
2611
+			}
2612
+
2613
+		} else {
2614
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
2615
+				return ret;
2616
+
2617
+			} else {
2618
+				return elem[ name ];
2619
+			}
2620
+		}
2621
+	},
2622
+
2623
+	propHooks: {
2624
+		tabIndex: {
2625
+			get: function( elem ) {
2626
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
2627
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
2628
+				var attributeNode = elem.getAttributeNode("tabindex");
2629
+
2630
+				return attributeNode && attributeNode.specified ?
2631
+					parseInt( attributeNode.value, 10 ) :
2632
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
2633
+						0 :
2634
+						undefined;
2635
+			}
2636
+		}
2637
+	}
2638
+});
2639
+
2640
+// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
2641
+jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
2642
+
2643
+// Hook for boolean attributes
2644
+boolHook = {
2645
+	get: function( elem, name ) {
2646
+		// Align boolean attributes with corresponding properties
2647
+		// Fall back to attribute presence where some booleans are not supported
2648
+		var attrNode,
2649
+			property = jQuery.prop( elem, name );
2650
+		return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
2651
+			name.toLowerCase() :
2652
+			undefined;
2653
+	},
2654
+	set: function( elem, value, name ) {
2655
+		var propName;
2656
+		if ( value === false ) {
2657
+			// Remove boolean attributes when set to false
2658
+			jQuery.removeAttr( elem, name );
2659
+		} else {
2660
+			// value is true since we know at this point it's type boolean and not false
2661
+			// Set boolean attributes to the same name and set the DOM property
2662
+			propName = jQuery.propFix[ name ] || name;
2663
+			if ( propName in elem ) {
2664
+				// Only set the IDL specifically if it already exists on the element
2665
+				elem[ propName ] = true;
2666
+			}
2667
+
2668
+			elem.setAttribute( name, name.toLowerCase() );
2669
+		}
2670
+		return name;
2671
+	}
2672
+};
2673
+
2674
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
2675
+if ( !getSetAttribute ) {
2676
+
2677
+	fixSpecified = {
2678
+		name: true,
2679
+		id: true
2680
+	};
2681
+
2682
+	// Use this for any attribute in IE6/7
2683
+	// This fixes almost every IE6/7 issue
2684
+	nodeHook = jQuery.valHooks.button = {
2685
+		get: function( elem, name ) {
2686
+			var ret;
2687
+			ret = elem.getAttributeNode( name );
2688
+			return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
2689
+				ret.nodeValue :
2690
+				undefined;
2691
+		},
2692
+		set: function( elem, value, name ) {
2693
+			// Set the existing or create a new attribute node
2694
+			var ret = elem.getAttributeNode( name );
2695
+			if ( !ret ) {
2696
+				ret = document.createAttribute( name );
2697
+				elem.setAttributeNode( ret );
2698
+			}
2699
+			return ( ret.nodeValue = value + "" );
2700
+		}
2701
+	};
2702
+
2703
+	// Apply the nodeHook to tabindex
2704
+	jQuery.attrHooks.tabindex.set = nodeHook.set;
2705
+
2706
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
2707
+	// This is for removals
2708
+	jQuery.each([ "width", "height" ], function( i, name ) {
2709
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
2710
+			set: function( elem, value ) {
2711
+				if ( value === "" ) {
2712
+					elem.setAttribute( name, "auto" );
2713
+					return value;
2714
+				}
2715
+			}
2716
+		});
2717
+	});
2718
+
2719
+	// Set contenteditable to false on removals(#10429)
2720
+	// Setting to empty string throws an error as an invalid value
2721
+	jQuery.attrHooks.contenteditable = {
2722
+		get: nodeHook.get,
2723
+		set: function( elem, value, name ) {
2724
+			if ( value === "" ) {
2725
+				value = "false";
2726
+			}
2727
+			nodeHook.set( elem, value, name );
2728
+		}
2729
+	};
2730
+}
2731
+
2732
+
2733
+// Some attributes require a special call on IE
2734
+if ( !jQuery.support.hrefNormalized ) {
2735
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
2736
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
2737
+			get: function( elem ) {
2738
+				var ret = elem.getAttribute( name, 2 );
2739
+				return ret === null ? undefined : ret;
2740
+			}
2741
+		});
2742
+	});
2743
+}
2744
+
2745
+if ( !jQuery.support.style ) {
2746
+	jQuery.attrHooks.style = {
2747
+		get: function( elem ) {
2748
+			// Return undefined in the case of empty string
2749
+			// Normalize to lowercase since IE uppercases css property names
2750
+			return elem.style.cssText.toLowerCase() || undefined;
2751
+		},
2752
+		set: function( elem, value ) {
2753
+			return ( elem.style.cssText = "" + value );
2754
+		}
2755
+	};
2756
+}
2757
+
2758
+// Safari mis-reports the default selected property of an option
2759
+// Accessing the parent's selectedIndex property fixes it
2760
+if ( !jQuery.support.optSelected ) {
2761
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
2762
+		get: function( elem ) {
2763
+			var parent = elem.parentNode;
2764
+
2765
+			if ( parent ) {
2766
+				parent.selectedIndex;
2767
+
2768
+				// Make sure that it also works with optgroups, see #5701
2769
+				if ( parent.parentNode ) {
2770
+					parent.parentNode.selectedIndex;
2771
+				}
2772
+			}
2773
+			return null;
2774
+		}
2775
+	});
2776
+}
2777
+
2778
+// IE6/7 call enctype encoding
2779
+if ( !jQuery.support.enctype ) {
2780
+	jQuery.propFix.enctype = "encoding";
2781
+}
2782
+
2783
+// Radios and checkboxes getter/setter
2784
+if ( !jQuery.support.checkOn ) {
2785
+	jQuery.each([ "radio", "checkbox" ], function() {
2786
+		jQuery.valHooks[ this ] = {
2787
+			get: function( elem ) {
2788
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
2789
+				return elem.getAttribute("value") === null ? "on" : elem.value;
2790
+			}
2791
+		};
2792
+	});
2793
+}
2794
+jQuery.each([ "radio", "checkbox" ], function() {
2795
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
2796
+		set: function( elem, value ) {
2797
+			if ( jQuery.isArray( value ) ) {
2798
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
2799
+			}
2800
+		}
2801
+	});
2802
+});
2803
+
2804
+
2805
+
2806
+
2807
+var rformElems = /^(?:textarea|input|select)$/i,
2808
+	rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
2809
+	rhoverHack = /\bhover(\.\S+)?\b/,
2810
+	rkeyEvent = /^key/,
2811
+	rmouseEvent = /^(?:mouse|contextmenu)|click/,
2812
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
2813
+	rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
2814
+	quickParse = function( selector ) {
2815
+		var quick = rquickIs.exec( selector );
2816
+		if ( quick ) {
2817
+			//   0  1    2   3
2818
+			// [ _, tag, id, class ]
2819
+			quick[1] = ( quick[1] || "" ).toLowerCase();
2820
+			quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
2821
+		}
2822
+		return quick;
2823
+	},
2824
+	quickIs = function( elem, m ) {
2825
+		var attrs = elem.attributes || {};
2826
+		return (
2827
+			(!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
2828
+			(!m[2] || (attrs.id || {}).value === m[2]) &&
2829
+			(!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
2830
+		);
2831
+	},
2832
+	hoverHack = function( events ) {
2833
+		return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
2834
+	};
2835
+
2836
+/*
2837
+ * Helper functions for managing events -- not part of the public interface.
2838
+ * Props to Dean Edwards' addEvent library for many of the ideas.
2839
+ */
2840
+jQuery.event = {
2841
+
2842
+	add: function( elem, types, handler, data, selector ) {
2843
+
2844
+		var elemData, eventHandle, events,
2845
+			t, tns, type, namespaces, handleObj,
2846
+			handleObjIn, quick, handlers, special;
2847
+
2848
+		// Don't attach events to noData or text/comment nodes (allow plain objects tho)
2849
+		if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
2850
+			return;
2851
+		}
2852
+
2853
+		// Caller can pass in an object of custom data in lieu of the handler
2854
+		if ( handler.handler ) {
2855
+			handleObjIn = handler;
2856
+			handler = handleObjIn.handler;
2857
+		}
2858
+
2859
+		// Make sure that the handler has a unique ID, used to find/remove it later
2860
+		if ( !handler.guid ) {
2861
+			handler.guid = jQuery.guid++;
2862
+		}
2863
+
2864
+		// Init the element's event structure and main handler, if this is the first
2865
+		events = elemData.events;
2866
+		if ( !events ) {
2867
+			elemData.events = events = {};
2868
+		}
2869
+		eventHandle = elemData.handle;
2870
+		if ( !eventHandle ) {
2871
+			elemData.handle = eventHandle = function( e ) {
2872
+				// Discard the second event of a jQuery.event.trigger() and
2873
+				// when an event is called after a page has unloaded
2874
+				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
2875
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
2876
+					undefined;
2877
+			};
2878
+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
2879
+			eventHandle.elem = elem;
2880
+		}
2881
+
2882
+		// Handle multiple events separated by a space
2883
+		// jQuery(...).bind("mouseover mouseout", fn);
2884
+		types = jQuery.trim( hoverHack(types) ).split( " " );
2885
+		for ( t = 0; t < types.length; t++ ) {
2886
+
2887
+			tns = rtypenamespace.exec( types[t] ) || [];
2888
+			type = tns[1];
2889
+			namespaces = ( tns[2] || "" ).split( "." ).sort();
2890
+
2891
+			// If event changes its type, use the special event handlers for the changed type
2892
+			special = jQuery.event.special[ type ] || {};
2893
+
2894
+			// If selector defined, determine special event api type, otherwise given type
2895
+			type = ( selector ? special.delegateType : special.bindType ) || type;
2896
+
2897
+			// Update special based on newly reset type
2898
+			special = jQuery.event.special[ type ] || {};
2899
+
2900
+			// handleObj is passed to all event handlers
2901
+			handleObj = jQuery.extend({
2902
+				type: type,
2903
+				origType: tns[1],
2904
+				data: data,
2905
+				handler: handler,
2906
+				guid: handler.guid,
2907
+				selector: selector,
2908
+				quick: quickParse( selector ),
2909
+				namespace: namespaces.join(".")
2910
+			}, handleObjIn );
2911
+
2912
+			// Init the event handler queue if we're the first
2913
+			handlers = events[ type ];
2914
+			if ( !handlers ) {
2915
+				handlers = events[ type ] = [];
2916
+				handlers.delegateCount = 0;
2917
+
2918
+				// Only use addEventListener/attachEvent if the special events handler returns false
2919
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
2920
+					// Bind the global event handler to the element
2921
+					if ( elem.addEventListener ) {
2922
+						elem.addEventListener( type, eventHandle, false );
2923
+
2924
+					} else if ( elem.attachEvent ) {
2925
+						elem.attachEvent( "on" + type, eventHandle );
2926
+					}
2927
+				}
2928
+			}
2929
+
2930
+			if ( special.add ) {
2931
+				special.add.call( elem, handleObj );
2932
+
2933
+				if ( !handleObj.handler.guid ) {
2934
+					handleObj.handler.guid = handler.guid;
2935
+				}
2936
+			}
2937
+
2938
+			// Add to the element's handler list, delegates in front
2939
+			if ( selector ) {
2940
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
2941
+			} else {
2942
+				handlers.push( handleObj );
2943
+			}
2944
+
2945
+			// Keep track of which events have ever been used, for event optimization
2946
+			jQuery.event.global[ type ] = true;
2947
+		}
2948
+
2949
+		// Nullify elem to prevent memory leaks in IE
2950
+		elem = null;
2951
+	},
2952
+
2953
+	global: {},
2954
+
2955
+	// Detach an event or set of events from an element
2956
+	remove: function( elem, types, handler, selector, mappedTypes ) {
2957
+
2958
+		var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
2959
+			t, tns, type, origType, namespaces, origCount,
2960
+			j, events, special, handle, eventType, handleObj;
2961
+
2962
+		if ( !elemData || !(events = elemData.events) ) {
2963
+			return;
2964
+		}
2965
+
2966
+		// Once for each type.namespace in types; type may be omitted
2967
+		types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
2968
+		for ( t = 0; t < types.length; t++ ) {
2969
+			tns = rtypenamespace.exec( types[t] ) || [];
2970
+			type = origType = tns[1];
2971
+			namespaces = tns[2];
2972
+
2973
+			// Unbind all events (on this namespace, if provided) for the element
2974
+			if ( !type ) {
2975
+				for ( type in events ) {
2976
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
2977
+				}
2978
+				continue;
2979
+			}
2980
+
2981
+			special = jQuery.event.special[ type ] || {};
2982
+			type = ( selector? special.delegateType : special.bindType ) || type;
2983
+			eventType = events[ type ] || [];
2984
+			origCount = eventType.length;
2985
+			namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
2986
+
2987
+			// Remove matching events
2988
+			for ( j = 0; j < eventType.length; j++ ) {
2989
+				handleObj = eventType[ j ];
2990
+
2991
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
2992
+					 ( !handler || handler.guid === handleObj.guid ) &&
2993
+					 ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
2994
+					 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
2995
+					eventType.splice( j--, 1 );
2996
+
2997
+					if ( handleObj.selector ) {
2998
+						eventType.delegateCount--;
2999
+					}
3000
+					if ( special.remove ) {
3001
+						special.remove.call( elem, handleObj );
3002
+					}
3003
+				}
3004
+			}
3005
+
3006
+			// Remove generic event handler if we removed something and no more handlers exist
3007
+			// (avoids potential for endless recursion during removal of special event handlers)
3008
+			if ( eventType.length === 0 && origCount !== eventType.length ) {
3009
+				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
3010
+					jQuery.removeEvent( elem, type, elemData.handle );
3011
+				}
3012
+
3013
+				delete events[ type ];
3014
+			}
3015
+		}
3016
+
3017
+		// Remove the expando if it's no longer used
3018
+		if ( jQuery.isEmptyObject( events ) ) {
3019
+			handle = elemData.handle;
3020
+			if ( handle ) {
3021
+				handle.elem = null;
3022
+			}
3023
+
3024
+			// removeData also checks for emptiness and clears the expando if empty
3025
+			// so use it instead of delete
3026
+			jQuery.removeData( elem, [ "events", "handle" ], true );
3027
+		}
3028
+	},
3029
+
3030
+	// Events that are safe to short-circuit if no handlers are attached.
3031
+	// Native DOM events should not be added, they may have inline handlers.
3032
+	customEvent: {
3033
+		"getData": true,
3034
+		"setData": true,
3035
+		"changeData": true
3036
+	},
3037
+
3038
+	trigger: function( event, data, elem, onlyHandlers ) {
3039
+		// Don't do events on text and comment nodes
3040
+		if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
3041
+			return;
3042
+		}
3043
+
3044
+		// Event object or event type
3045
+		var type = event.type || event,
3046
+			namespaces = [],
3047
+			cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
3048
+
3049
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
3050
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
3051
+			return;
3052
+		}
3053
+
3054
+		if ( type.indexOf( "!" ) >= 0 ) {
3055
+			// Exclusive events trigger only for the exact event (no namespaces)
3056
+			type = type.slice(0, -1);
3057
+			exclusive = true;
3058
+		}
3059
+
3060
+		if ( type.indexOf( "." ) >= 0 ) {
3061
+			// Namespaced trigger; create a regexp to match event type in handle()
3062
+			namespaces = type.split(".");
3063
+			type = namespaces.shift();
3064
+			namespaces.sort();
3065
+		}
3066
+
3067
+		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
3068
+			// No jQuery handlers for this event type, and it can't have inline handlers
3069
+			return;
3070
+		}
3071
+
3072
+		// Caller can pass in an Event, Object, or just an event type string
3073
+		event = typeof event === "object" ?
3074
+			// jQuery.Event object
3075
+			event[ jQuery.expando ] ? event :
3076
+			// Object literal
3077
+			new jQuery.Event( type, event ) :
3078
+			// Just the event type (string)
3079
+			new jQuery.Event( type );
3080
+
3081
+		event.type = type;
3082
+		event.isTrigger = true;
3083
+		event.exclusive = exclusive;
3084
+		event.namespace = namespaces.join( "." );
3085
+		event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
3086
+		ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
3087
+
3088
+		// Handle a global trigger
3089
+		if ( !elem ) {
3090
+
3091
+			// TODO: Stop taunting the data cache; remove global events and always attach to document
3092
+			cache = jQuery.cache;
3093
+			for ( i in cache ) {
3094
+				if ( cache[ i ].events && cache[ i ].events[ type ] ) {
3095
+					jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
3096
+				}
3097
+			}
3098
+			return;
3099
+		}
3100
+
3101
+		// Clean up the event in case it is being reused
3102
+		event.result = undefined;
3103
+		if ( !event.target ) {
3104
+			event.target = elem;
3105
+		}
3106
+
3107
+		// Clone any incoming data and prepend the event, creating the handler arg list
3108
+		data = data != null ? jQuery.makeArray( data ) : [];
3109
+		data.unshift( event );
3110
+
3111
+		// Allow special events to draw outside the lines
3112
+		special = jQuery.event.special[ type ] || {};
3113
+		if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
3114
+			return;
3115
+		}
3116
+
3117
+		// Determine event propagation path in advance, per W3C events spec (#9951)
3118
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
3119
+		eventPath = [[ elem, special.bindType || type ]];
3120
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
3121
+
3122
+			bubbleType = special.delegateType || type;
3123
+			cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
3124
+			old = null;
3125
+			for ( ; cur; cur = cur.parentNode ) {
3126
+				eventPath.push([ cur, bubbleType ]);
3127
+				old = cur;
3128
+			}
3129
+
3130
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
3131
+			if ( old && old === elem.ownerDocument ) {
3132
+				eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
3133
+			}
3134
+		}
3135
+
3136
+		// Fire handlers on the event path
3137
+		for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
3138
+
3139
+			cur = eventPath[i][0];
3140
+			event.type = eventPath[i][1];
3141
+
3142
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
3143
+			if ( handle ) {
3144
+				handle.apply( cur, data );
3145
+			}
3146
+			// Note that this is a bare JS function and not a jQuery handler
3147
+			handle = ontype && cur[ ontype ];
3148
+			if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
3149
+				event.preventDefault();
3150
+			}
3151
+		}
3152
+		event.type = type;
3153
+
3154
+		// If nobody prevented the default action, do it now
3155
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
3156
+
3157
+			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
3158
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
3159
+
3160
+				// Call a native DOM method on the target with the same name name as the event.
3161
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
3162
+				// Don't do default actions on window, that's where global variables be (#6170)
3163
+				// IE<9 dies on focus/blur to hidden element (#1486)
3164
+				if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
3165
+
3166
+					// Don't re-trigger an onFOO event when we call its FOO() method
3167
+					old = elem[ ontype ];
3168
+
3169
+					if ( old ) {
3170
+						elem[ ontype ] = null;
3171
+					}
3172
+
3173
+					// Prevent re-triggering of the same event, since we already bubbled it above
3174
+					jQuery.event.triggered = type;
3175
+					elem[ type ]();
3176
+					jQuery.event.triggered = undefined;
3177
+
3178
+					if ( old ) {
3179
+						elem[ ontype ] = old;
3180
+					}
3181
+				}
3182
+			}
3183
+		}
3184
+
3185
+		return event.result;
3186
+	},
3187
+
3188
+	dispatch: function( event ) {
3189
+
3190
+		// Make a writable jQuery.Event from the native event object
3191
+		event = jQuery.event.fix( event || window.event );
3192
+
3193
+		var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
3194
+			delegateCount = handlers.delegateCount,
3195
+			args = [].slice.call( arguments, 0 ),
3196
+			run_all = !event.exclusive && !event.namespace,
3197
+			handlerQueue = [],
3198
+			i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
3199
+
3200
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
3201
+		args[0] = event;
3202
+		event.delegateTarget = this;
3203
+
3204
+		// Determine handlers that should run if there are delegated events
3205
+		// Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
3206
+		if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
3207
+
3208
+			// Pregenerate a single jQuery object for reuse with .is()
3209
+			jqcur = jQuery(this);
3210
+			jqcur.context = this.ownerDocument || this;
3211
+
3212
+			for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
3213
+				selMatch = {};
3214
+				matches = [];
3215
+				jqcur[0] = cur;
3216
+				for ( i = 0; i < delegateCount; i++ ) {
3217
+					handleObj = handlers[ i ];
3218
+					sel = handleObj.selector;
3219
+
3220
+					if ( selMatch[ sel ] === undefined ) {
3221
+						selMatch[ sel ] = (
3222
+							handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
3223
+						);
3224
+					}
3225
+					if ( selMatch[ sel ] ) {
3226
+						matches.push( handleObj );
3227
+					}
3228
+				}
3229
+				if ( matches.length ) {
3230
+					handlerQueue.push({ elem: cur, matches: matches });
3231
+				}
3232
+			}
3233
+		}
3234
+
3235
+		// Add the remaining (directly-bound) handlers
3236
+		if ( handlers.length > delegateCount ) {
3237
+			handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
3238
+		}
3239
+
3240
+		// Run delegates first; they may want to stop propagation beneath us
3241
+		for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
3242
+			matched = handlerQueue[ i ];
3243
+			event.currentTarget = matched.elem;
3244
+
3245
+			for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
3246
+				handleObj = matched.matches[ j ];
3247
+
3248
+				// Triggered event must either 1) be non-exclusive and have no namespace, or
3249
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
3250
+				if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
3251
+
3252
+					event.data = handleObj.data;
3253
+					event.handleObj = handleObj;
3254
+
3255
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
3256
+							.apply( matched.elem, args );
3257
+
3258
+					if ( ret !== undefined ) {
3259
+						event.result = ret;
3260
+						if ( ret === false ) {
3261
+							event.preventDefault();
3262
+							event.stopPropagation();
3263
+						}
3264
+					}
3265
+				}
3266
+			}
3267
+		}
3268
+
3269
+		return event.result;
3270
+	},
3271
+
3272
+	// Includes some event props shared by KeyEvent and MouseEvent
3273
+	// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
3274
+	props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
3275
+
3276
+	fixHooks: {},
3277
+
3278
+	keyHooks: {
3279
+		props: "char charCode key keyCode".split(" "),
3280
+		filter: function( event, original ) {
3281
+
3282
+			// Add which for key events
3283
+			if ( event.which == null ) {
3284
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
3285
+			}
3286
+
3287
+			return event;
3288
+		}
3289
+	},
3290
+
3291
+	mouseHooks: {
3292
+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
3293
+		filter: function( event, original ) {
3294
+			var eventDoc, doc, body,
3295
+				button = original.button,
3296
+				fromElement = original.fromElement;
3297
+
3298
+			// Calculate pageX/Y if missing and clientX/Y available
3299
+			if ( event.pageX == null && original.clientX != null ) {
3300
+				eventDoc = event.target.ownerDocument || document;
3301
+				doc = eventDoc.documentElement;
3302
+				body = eventDoc.body;
3303
+
3304
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
3305
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
3306
+			}
3307
+
3308
+			// Add relatedTarget, if necessary
3309
+			if ( !event.relatedTarget && fromElement ) {
3310
+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
3311
+			}
3312
+
3313
+			// Add which for click: 1 === left; 2 === middle; 3 === right
3314
+			// Note: button is not normalized, so don't use it
3315
+			if ( !event.which && button !== undefined ) {
3316
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
3317
+			}
3318
+
3319
+			return event;
3320
+		}
3321
+	},
3322
+
3323
+	fix: function( event ) {
3324
+		if ( event[ jQuery.expando ] ) {
3325
+			return event;
3326
+		}
3327
+
3328
+		// Create a writable copy of the event object and normalize some properties
3329
+		var i, prop,
3330
+			originalEvent = event,
3331
+			fixHook = jQuery.event.fixHooks[ event.type ] || {},
3332
+			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
3333
+
3334
+		event = jQuery.Event( originalEvent );
3335
+
3336
+		for ( i = copy.length; i; ) {
3337
+			prop = copy[ --i ];
3338
+			event[ prop ] = originalEvent[ prop ];
3339
+		}
3340
+
3341
+		// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
3342
+		if ( !event.target ) {
3343
+			event.target = originalEvent.srcElement || document;
3344
+		}
3345
+
3346
+		// Target should not be a text node (#504, Safari)
3347
+		if ( event.target.nodeType === 3 ) {
3348
+			event.target = event.target.parentNode;
3349
+		}
3350
+
3351
+		// For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
3352
+		if ( event.metaKey === undefined ) {
3353
+			event.metaKey = event.ctrlKey;
3354
+		}
3355
+
3356
+		return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
3357
+	},
3358
+
3359
+	special: {
3360
+		ready: {
3361
+			// Make sure the ready event is setup
3362
+			setup: jQuery.bindReady
3363
+		},
3364
+
3365
+		load: {
3366
+			// Prevent triggered image.load events from bubbling to window.load
3367
+			noBubble: true
3368
+		},
3369
+
3370
+		focus: {
3371
+			delegateType: "focusin"
3372
+		},
3373
+		blur: {
3374
+			delegateType: "focusout"
3375
+		},
3376
+
3377
+		beforeunload: {
3378
+			setup: function( data, namespaces, eventHandle ) {
3379
+				// We only want to do this special case on windows
3380
+				if ( jQuery.isWindow( this ) ) {
3381
+					this.onbeforeunload = eventHandle;
3382
+				}
3383
+			},
3384
+
3385
+			teardown: function( namespaces, eventHandle ) {
3386
+				if ( this.onbeforeunload === eventHandle ) {
3387
+					this.onbeforeunload = null;
3388
+				}
3389
+			}
3390
+		}
3391
+	},
3392
+
3393
+	simulate: function( type, elem, event, bubble ) {
3394
+		// Piggyback on a donor event to simulate a different one.
3395
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
3396
+		// simulated event prevents default then we do the same on the donor.
3397
+		var e = jQuery.extend(
3398
+			new jQuery.Event(),
3399
+			event,
3400
+			{ type: type,
3401
+				isSimulated: true,
3402
+				originalEvent: {}
3403
+			}
3404
+		);
3405
+		if ( bubble ) {
3406
+			jQuery.event.trigger( e, null, elem );
3407
+		} else {
3408
+			jQuery.event.dispatch.call( elem, e );
3409
+		}
3410
+		if ( e.isDefaultPrevented() ) {
3411
+			event.preventDefault();
3412
+		}
3413
+	}
3414
+};
3415
+
3416
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
3417
+// The 1.7 special event interface should provide all the hooks needed now.
3418
+jQuery.event.handle = jQuery.event.dispatch;
3419
+
3420
+jQuery.removeEvent = document.removeEventListener ?
3421
+	function( elem, type, handle ) {
3422
+		if ( elem.removeEventListener ) {
3423
+			elem.removeEventListener( type, handle, false );
3424
+		}
3425
+	} :
3426
+	function( elem, type, handle ) {
3427
+		if ( elem.detachEvent ) {
3428
+			elem.detachEvent( "on" + type, handle );
3429
+		}
3430
+	};
3431
+
3432
+jQuery.Event = function( src, props ) {
3433
+	// Allow instantiation without the 'new' keyword
3434
+	if ( !(this instanceof jQuery.Event) ) {
3435
+		return new jQuery.Event( src, props );
3436
+	}
3437
+
3438
+	// Event object
3439
+	if ( src && src.type ) {
3440
+		this.originalEvent = src;
3441
+		this.type = src.type;
3442
+
3443
+		// Events bubbling up the document may have been marked as prevented
3444
+		// by a handler lower down the tree; reflect the correct value.
3445
+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
3446
+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
3447
+
3448
+	// Event type
3449
+	} else {
3450
+		this.type = src;
3451
+	}
3452
+
3453
+	// Put explicitly provided properties onto the event object
3454
+	if ( props ) {
3455
+		jQuery.extend( this, props );
3456
+	}
3457
+
3458
+	// Create a timestamp if incoming event doesn't have one
3459
+	this.timeStamp = src && src.timeStamp || jQuery.now();
3460
+
3461
+	// Mark it as fixed
3462
+	this[ jQuery.expando ] = true;
3463
+};
3464
+
3465
+function returnFalse() {
3466
+	return false;
3467
+}
3468
+function returnTrue() {
3469
+	return true;
3470
+}
3471
+
3472
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
3473
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
3474
+jQuery.Event.prototype = {
3475
+	preventDefault: function() {
3476
+		this.isDefaultPrevented = returnTrue;
3477
+
3478
+		var e = this.originalEvent;
3479
+		if ( !e ) {
3480
+			return;
3481
+		}
3482
+
3483
+		// if preventDefault exists run it on the original event
3484
+		if ( e.preventDefault ) {
3485
+			e.preventDefault();
3486
+
3487
+		// otherwise set the returnValue property of the original event to false (IE)
3488
+		} else {
3489
+			e.returnValue = false;
3490
+		}
3491
+	},
3492
+	stopPropagation: function() {
3493
+		this.isPropagationStopped = returnTrue;
3494
+
3495
+		var e = this.originalEvent;
3496
+		if ( !e ) {
3497
+			return;
3498
+		}
3499
+		// if stopPropagation exists run it on the original event
3500
+		if ( e.stopPropagation ) {
3501
+			e.stopPropagation();
3502
+		}
3503
+		// otherwise set the cancelBubble property of the original event to true (IE)
3504
+		e.cancelBubble = true;
3505
+	},
3506
+	stopImmediatePropagation: function() {
3507
+		this.isImmediatePropagationStopped = returnTrue;
3508
+		this.stopPropagation();
3509
+	},
3510
+	isDefaultPrevented: returnFalse,
3511
+	isPropagationStopped: returnFalse,
3512
+	isImmediatePropagationStopped: returnFalse
3513
+};
3514
+
3515
+// Create mouseenter/leave events using mouseover/out and event-time checks
3516
+jQuery.each({
3517
+	mouseenter: "mouseover",
3518
+	mouseleave: "mouseout"
3519
+}, function( orig, fix ) {
3520
+	jQuery.event.special[ orig ] = {
3521
+		delegateType: fix,
3522
+		bindType: fix,
3523
+
3524
+		handle: function( event ) {
3525
+			var target = this,
3526
+				related = event.relatedTarget,
3527
+				handleObj = event.handleObj,
3528
+				selector = handleObj.selector,
3529
+				ret;
3530
+
3531
+			// For mousenter/leave call the handler if related is outside the target.
3532
+			// NB: No relatedTarget if the mouse left/entered the browser window
3533
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
3534
+				event.type = handleObj.origType;
3535
+				ret = handleObj.handler.apply( this, arguments );
3536
+				event.type = fix;
3537
+			}
3538
+			return ret;
3539
+		}
3540
+	};
3541
+});
3542
+
3543
+// IE submit delegation
3544
+if ( !jQuery.support.submitBubbles ) {
3545
+
3546
+	jQuery.event.special.submit = {
3547
+		setup: function() {
3548
+			// Only need this for delegated form submit events
3549
+			if ( jQuery.nodeName( this, "form" ) ) {
3550
+				return false;
3551
+			}
3552
+
3553
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
3554
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
3555
+				// Node name check avoids a VML-related crash in IE (#9807)
3556
+				var elem = e.target,
3557
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
3558
+				if ( form && !form._submit_attached ) {
3559
+					jQuery.event.add( form, "submit._submit", function( event ) {
3560
+						// If form was submitted by the user, bubble the event up the tree
3561
+						if ( this.parentNode && !event.isTrigger ) {
3562
+							jQuery.event.simulate( "submit", this.parentNode, event, true );
3563
+						}
3564
+					});
3565
+					form._submit_attached = true;
3566
+				}
3567
+			});
3568
+			// return undefined since we don't need an event listener
3569
+		},
3570
+
3571
+		teardown: function() {
3572
+			// Only need this for delegated form submit events
3573
+			if ( jQuery.nodeName( this, "form" ) ) {
3574
+				return false;
3575
+			}
3576
+
3577
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
3578
+			jQuery.event.remove( this, "._submit" );
3579
+		}
3580
+	};
3581
+}
3582
+
3583
+// IE change delegation and checkbox/radio fix
3584
+if ( !jQuery.support.changeBubbles ) {
3585
+
3586
+	jQuery.event.special.change = {
3587
+
3588
+		setup: function() {
3589
+
3590
+			if ( rformElems.test( this.nodeName ) ) {
3591
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
3592
+				// after a propertychange. Eat the blur-change in special.change.handle.
3593
+				// This still fires onchange a second time for check/radio after blur.
3594
+				if ( this.type === "checkbox" || this.type === "radio" ) {
3595
+					jQuery.event.add( this, "propertychange._change", function( event ) {
3596
+						if ( event.originalEvent.propertyName === "checked" ) {
3597
+							this._just_changed = true;
3598
+						}
3599
+					});
3600
+					jQuery.event.add( this, "click._change", function( event ) {
3601
+						if ( this._just_changed && !event.isTrigger ) {
3602
+							this._just_changed = false;
3603
+							jQuery.event.simulate( "change", this, event, true );
3604
+						}
3605
+					});
3606
+				}
3607
+				return false;
3608
+			}
3609
+			// Delegated event; lazy-add a change handler on descendant inputs
3610
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
3611
+				var elem = e.target;
3612
+
3613
+				if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
3614
+					jQuery.event.add( elem, "change._change", function( event ) {
3615
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
3616
+							jQuery.event.simulate( "change", this.parentNode, event, true );
3617
+						}
3618
+					});
3619
+					elem._change_attached = true;
3620
+				}
3621
+			});
3622
+		},
3623
+
3624
+		handle: function( event ) {
3625
+			var elem = event.target;
3626
+
3627
+			// Swallow native change events from checkbox/radio, we already triggered them above
3628
+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
3629
+				return event.handleObj.handler.apply( this, arguments );
3630
+			}
3631
+		},
3632
+
3633
+		teardown: function() {
3634
+			jQuery.event.remove( this, "._change" );
3635
+
3636
+			return rformElems.test( this.nodeName );
3637
+		}
3638
+	};
3639
+}
3640
+
3641
+// Create "bubbling" focus and blur events
3642
+if ( !jQuery.support.focusinBubbles ) {
3643
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
3644
+
3645
+		// Attach a single capturing handler while someone wants focusin/focusout
3646
+		var attaches = 0,
3647
+			handler = function( event ) {
3648
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
3649
+			};
3650
+
3651
+		jQuery.event.special[ fix ] = {
3652
+			setup: function() {
3653
+				if ( attaches++ === 0 ) {
3654
+					document.addEventListener( orig, handler, true );
3655
+				}
3656
+			},
3657
+			teardown: function() {
3658
+				if ( --attaches === 0 ) {
3659
+					document.removeEventListener( orig, handler, true );
3660
+				}
3661
+			}
3662
+		};
3663
+	});
3664
+}
3665
+
3666
+jQuery.fn.extend({
3667
+
3668
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
3669
+		var origFn, type;
3670
+
3671
+		// Types can be a map of types/handlers
3672
+		if ( typeof types === "object" ) {
3673
+			// ( types-Object, selector, data )
3674
+			if ( typeof selector !== "string" ) {
3675
+				// ( types-Object, data )
3676
+				data = selector;
3677
+				selector = undefined;
3678
+			}
3679
+			for ( type in types ) {
3680
+				this.on( type, selector, data, types[ type ], one );
3681
+			}
3682
+			return this;
3683
+		}
3684
+
3685
+		if ( data == null && fn == null ) {
3686
+			// ( types, fn )
3687
+			fn = selector;
3688
+			data = selector = undefined;
3689
+		} else if ( fn == null ) {
3690
+			if ( typeof selector === "string" ) {
3691
+				// ( types, selector, fn )
3692
+				fn = data;
3693
+				data = undefined;
3694
+			} else {
3695
+				// ( types, data, fn )
3696
+				fn = data;
3697
+				data = selector;
3698
+				selector = undefined;
3699
+			}
3700
+		}
3701
+		if ( fn === false ) {
3702
+			fn = returnFalse;
3703
+		} else if ( !fn ) {
3704
+			return this;
3705
+		}
3706
+
3707
+		if ( one === 1 ) {
3708
+			origFn = fn;
3709
+			fn = function( event ) {
3710
+				// Can use an empty set, since event contains the info
3711
+				jQuery().off( event );
3712
+				return origFn.apply( this, arguments );
3713
+			};
3714
+			// Use same guid so caller can remove using origFn
3715
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
3716
+		}
3717
+		return this.each( function() {
3718
+			jQuery.event.add( this, types, fn, data, selector );
3719
+		});
3720
+	},
3721
+	one: function( types, selector, data, fn ) {
3722
+		return this.on.call( this, types, selector, data, fn, 1 );
3723
+	},
3724
+	off: function( types, selector, fn ) {
3725
+		if ( types && types.preventDefault && types.handleObj ) {
3726
+			// ( event )  dispatched jQuery.Event
3727
+			var handleObj = types.handleObj;
3728
+			jQuery( types.delegateTarget ).off(
3729
+				handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type,
3730
+				handleObj.selector,
3731
+				handleObj.handler
3732
+			);
3733
+			return this;
3734
+		}
3735
+		if ( typeof types === "object" ) {
3736
+			// ( types-object [, selector] )
3737
+			for ( var type in types ) {
3738
+				this.off( type, selector, types[ type ] );
3739
+			}
3740
+			return this;
3741
+		}
3742
+		if ( selector === false || typeof selector === "function" ) {
3743
+			// ( types [, fn] )
3744
+			fn = selector;
3745
+			selector = undefined;
3746
+		}
3747
+		if ( fn === false ) {
3748
+			fn = returnFalse;
3749
+		}
3750
+		return this.each(function() {
3751
+			jQuery.event.remove( this, types, fn, selector );
3752
+		});
3753
+	},
3754
+
3755
+	bind: function( types, data, fn ) {
3756
+		return this.on( types, null, data, fn );
3757
+	},
3758
+	unbind: function( types, fn ) {
3759
+		return this.off( types, null, fn );
3760
+	},
3761
+
3762
+	live: function( types, data, fn ) {
3763
+		jQuery( this.context ).on( types, this.selector, data, fn );
3764
+		return this;
3765
+	},
3766
+	die: function( types, fn ) {
3767
+		jQuery( this.context ).off( types, this.selector || "**", fn );
3768
+		return this;
3769
+	},
3770
+
3771
+	delegate: function( selector, types, data, fn ) {
3772
+		return this.on( types, selector, data, fn );
3773
+	},
3774
+	undelegate: function( selector, types, fn ) {
3775
+		// ( namespace ) or ( selector, types [, fn] )
3776
+		return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
3777
+	},
3778
+
3779
+	trigger: function( type, data ) {
3780
+		return this.each(function() {
3781
+			jQuery.event.trigger( type, data, this );
3782
+		});
3783
+	},
3784
+	triggerHandler: function( type, data ) {
3785
+		if ( this[0] ) {
3786
+			return jQuery.event.trigger( type, data, this[0], true );
3787
+		}
3788
+	},
3789
+
3790
+	toggle: function( fn ) {
3791
+		// Save reference to arguments for access in closure
3792
+		var args = arguments,
3793
+			guid = fn.guid || jQuery.guid++,
3794
+			i = 0,
3795
+			toggler = function( event ) {
3796
+				// Figure out which function to execute
3797
+				var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
3798
+				jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
3799
+
3800
+				// Make sure that clicks stop
3801
+				event.preventDefault();
3802
+
3803
+				// and execute the function
3804
+				return args[ lastToggle ].apply( this, arguments ) || false;
3805
+			};
3806
+
3807
+		// link all the functions, so any of them can unbind this click handler
3808
+		toggler.guid = guid;
3809
+		while ( i < args.length ) {
3810
+			args[ i++ ].guid = guid;
3811
+		}
3812
+
3813
+		return this.click( toggler );
3814
+	},
3815
+
3816
+	hover: function( fnOver, fnOut ) {
3817
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
3818
+	}
3819
+});
3820
+
3821
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
3822
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
3823
+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
3824
+
3825
+	// Handle event binding
3826
+	jQuery.fn[ name ] = function( data, fn ) {
3827
+		if ( fn == null ) {
3828
+			fn = data;
3829
+			data = null;
3830
+		}
3831
+
3832
+		return arguments.length > 0 ?
3833
+			this.on( name, null, data, fn ) :
3834
+			this.trigger( name );
3835
+	};
3836
+
3837
+	if ( jQuery.attrFn ) {
3838
+		jQuery.attrFn[ name ] = true;
3839
+	}
3840
+
3841
+	if ( rkeyEvent.test( name ) ) {
3842
+		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
3843
+	}
3844
+
3845
+	if ( rmouseEvent.test( name ) ) {
3846
+		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
3847
+	}
3848
+});
3849
+
3850
+
3851
+
3852
+/*!
3853
+ * Sizzle CSS Selector Engine
3854
+ *  Copyright 2011, The Dojo Foundation
3855
+ *  Released under the MIT, BSD, and GPL Licenses.
3856
+ *  More information: http://sizzlejs.com/
3857
+ */
3858
+(function(){
3859
+
3860
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
3861
+	expando = "sizcache" + (Math.random() + '').replace('.', ''),
3862
+	done = 0,
3863
+	toString = Object.prototype.toString,
3864
+	hasDuplicate = false,
3865
+	baseHasDuplicate = true,
3866
+	rBackslash = /\\/g,
3867
+	rReturn = /\r\n/g,
3868
+	rNonWord = /\W/;
3869
+
3870
+// Here we check if the JavaScript engine is using some sort of
3871
+// optimization where it does not always call our comparision
3872
+// function. If that is the case, discard the hasDuplicate value.
3873
+//   Thus far that includes Google Chrome.
3874
+[0, 0].sort(function() {
3875
+	baseHasDuplicate = false;
3876
+	return 0;
3877
+});
3878
+
3879
+var Sizzle = function( selector, context, results, seed ) {
3880
+	results = results || [];
3881
+	context = context || document;
3882
+
3883
+	var origContext = context;
3884
+
3885
+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
3886
+		return [];
3887
+	}
3888
+	
3889
+	if ( !selector || typeof selector !== "string" ) {
3890
+		return results;
3891
+	}
3892
+
3893
+	var m, set, checkSet, extra, ret, cur, pop, i,
3894
+		prune = true,
3895
+		contextXML = Sizzle.isXML( context ),
3896
+		parts = [],
3897
+		soFar = selector;
3898
+	
3899
+	// Reset the position of the chunker regexp (start from head)
3900
+	do {
3901
+		chunker.exec( "" );
3902
+		m = chunker.exec( soFar );
3903
+
3904
+		if ( m ) {
3905
+			soFar = m[3];
3906
+		
3907
+			parts.push( m[1] );
3908
+		
3909
+			if ( m[2] ) {
3910
+				extra = m[3];
3911
+				break;
3912
+			}
3913
+		}
3914
+	} while ( m );
3915
+
3916
+	if ( parts.length > 1 && origPOS.exec( selector ) ) {
3917
+
3918
+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
3919
+			set = posProcess( parts[0] + parts[1], context, seed );
3920
+
3921
+		} else {
3922
+			set = Expr.relative[ parts[0] ] ?
3923
+				[ context ] :
3924
+				Sizzle( parts.shift(), context );
3925
+
3926
+			while ( parts.length ) {
3927
+				selector = parts.shift();
3928
+
3929
+				if ( Expr.relative[ selector ] ) {
3930
+					selector += parts.shift();
3931
+				}
3932
+				
3933
+				set = posProcess( selector, set, seed );
3934
+			}
3935
+		}
3936
+
3937
+	} else {
3938
+		// Take a shortcut and set the context if the root selector is an ID
3939
+		// (but not if it'll be faster if the inner selector is an ID)
3940
+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
3941
+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
3942
+
3943
+			ret = Sizzle.find( parts.shift(), context, contextXML );
3944
+			context = ret.expr ?
3945
+				Sizzle.filter( ret.expr, ret.set )[0] :
3946
+				ret.set[0];
3947
+		}
3948
+
3949
+		if ( context ) {
3950
+			ret = seed ?
3951
+				{ expr: parts.pop(), set: makeArray(seed) } :
3952
+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
3953
+
3954
+			set = ret.expr ?
3955
+				Sizzle.filter( ret.expr, ret.set ) :
3956
+				ret.set;
3957
+
3958
+			if ( parts.length > 0 ) {
3959
+				checkSet = makeArray( set );
3960
+
3961
+			} else {
3962
+				prune = false;
3963
+			}
3964
+
3965
+			while ( parts.length ) {
3966
+				cur = parts.pop();
3967
+				pop = cur;
3968
+
3969
+				if ( !Expr.relative[ cur ] ) {
3970
+					cur = "";
3971
+				} else {
3972
+					pop = parts.pop();
3973
+				}
3974
+
3975
+				if ( pop == null ) {
3976
+					pop = context;
3977
+				}
3978
+
3979
+				Expr.relative[ cur ]( checkSet, pop, contextXML );
3980
+			}
3981
+
3982
+		} else {
3983
+			checkSet = parts = [];
3984
+		}
3985
+	}
3986
+
3987
+	if ( !checkSet ) {
3988
+		checkSet = set;
3989
+	}
3990
+
3991
+	if ( !checkSet ) {
3992
+		Sizzle.error( cur || selector );
3993
+	}
3994
+
3995
+	if ( toString.call(checkSet) === "[object Array]" ) {
3996
+		if ( !prune ) {
3997
+			results.push.apply( results, checkSet );
3998
+
3999
+		} else if ( context && context.nodeType === 1 ) {
4000
+			for ( i = 0; checkSet[i] != null; i++ ) {
4001
+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
4002
+					results.push( set[i] );
4003
+				}
4004
+			}
4005
+
4006
+		} else {
4007
+			for ( i = 0; checkSet[i] != null; i++ ) {
4008
+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
4009
+					results.push( set[i] );
4010
+				}
4011
+			}
4012
+		}
4013
+
4014
+	} else {
4015
+		makeArray( checkSet, results );
4016
+	}
4017
+
4018
+	if ( extra ) {
4019
+		Sizzle( extra, origContext, results, seed );
4020
+		Sizzle.uniqueSort( results );
4021
+	}
4022
+
4023
+	return results;
4024
+};
4025
+
4026
+Sizzle.uniqueSort = function( results ) {
4027
+	if ( sortOrder ) {
4028
+		hasDuplicate = baseHasDuplicate;
4029
+		results.sort( sortOrder );
4030
+
4031
+		if ( hasDuplicate ) {
4032
+			for ( var i = 1; i < results.length; i++ ) {
4033
+				if ( results[i] === results[ i - 1 ] ) {
4034
+					results.splice( i--, 1 );
4035
+				}
4036
+			}
4037
+		}
4038
+	}
4039
+
4040
+	return results;
4041
+};
4042
+
4043
+Sizzle.matches = function( expr, set ) {
4044
+	return Sizzle( expr, null, null, set );
4045
+};
4046
+
4047
+Sizzle.matchesSelector = function( node, expr ) {
4048
+	return Sizzle( expr, null, null, [node] ).length > 0;
4049
+};
4050
+
4051
+Sizzle.find = function( expr, context, isXML ) {
4052
+	var set, i, len, match, type, left;
4053
+
4054
+	if ( !expr ) {
4055
+		return [];
4056
+	}
4057
+
4058
+	for ( i = 0, len = Expr.order.length; i < len; i++ ) {
4059
+		type = Expr.order[i];
4060
+		
4061
+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
4062
+			left = match[1];
4063
+			match.splice( 1, 1 );
4064
+
4065
+			if ( left.substr( left.length - 1 ) !== "\\" ) {
4066
+				match[1] = (match[1] || "").replace( rBackslash, "" );
4067
+				set = Expr.find[ type ]( match, context, isXML );
4068
+
4069
+				if ( set != null ) {
4070
+					expr = expr.replace( Expr.match[ type ], "" );
4071
+					break;
4072
+				}
4073
+			}
4074
+		}
4075
+	}
4076
+
4077
+	if ( !set ) {
4078
+		set = typeof context.getElementsByTagName !== "undefined" ?
4079
+			context.getElementsByTagName( "*" ) :
4080
+			[];
4081
+	}
4082
+
4083
+	return { set: set, expr: expr };
4084
+};
4085
+
4086
+Sizzle.filter = function( expr, set, inplace, not ) {
4087
+	var match, anyFound,
4088
+		type, found, item, filter, left,
4089
+		i, pass,
4090
+		old = expr,
4091
+		result = [],
4092
+		curLoop = set,
4093
+		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
4094
+
4095
+	while ( expr && set.length ) {
4096
+		for ( type in Expr.filter ) {
4097
+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
4098
+				filter = Expr.filter[ type ];
4099
+				left = match[1];
4100
+
4101
+				anyFound = false;
4102
+
4103
+				match.splice(1,1);
4104
+
4105
+				if ( left.substr( left.length - 1 ) === "\\" ) {
4106
+					continue;
4107
+				}
4108
+
4109
+				if ( curLoop === result ) {
4110
+					result = [];
4111
+				}
4112
+
4113
+				if ( Expr.preFilter[ type ] ) {
4114
+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
4115
+
4116
+					if ( !match ) {
4117
+						anyFound = found = true;
4118
+
4119
+					} else if ( match === true ) {
4120
+						continue;
4121
+					}
4122
+				}
4123
+
4124
+				if ( match ) {
4125
+					for ( i = 0; (item = curLoop[i]) != null; i++ ) {
4126
+						if ( item ) {
4127
+							found = filter( item, match, i, curLoop );
4128
+							pass = not ^ found;
4129
+
4130
+							if ( inplace && found != null ) {
4131
+								if ( pass ) {
4132
+									anyFound = true;
4133
+
4134
+								} else {
4135
+									curLoop[i] = false;
4136
+								}
4137
+
4138
+							} else if ( pass ) {
4139
+								result.push( item );
4140
+								anyFound = true;
4141
+							}
4142
+						}
4143
+					}
4144
+				}
4145
+
4146
+				if ( found !== undefined ) {
4147
+					if ( !inplace ) {
4148
+						curLoop = result;
4149
+					}
4150
+
4151
+					expr = expr.replace( Expr.match[ type ], "" );
4152
+
4153
+					if ( !anyFound ) {
4154
+						return [];
4155
+					}
4156
+
4157
+					break;
4158
+				}
4159
+			}
4160
+		}
4161
+
4162
+		// Improper expression
4163
+		if ( expr === old ) {
4164
+			if ( anyFound == null ) {
4165
+				Sizzle.error( expr );
4166
+
4167
+			} else {
4168
+				break;
4169
+			}
4170
+		}
4171
+
4172
+		old = expr;
4173
+	}
4174
+
4175
+	return curLoop;
4176
+};
4177
+
4178
+Sizzle.error = function( msg ) {
4179
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
4180
+};
4181
+
4182
+/**
4183
+ * Utility function for retreiving the text value of an array of DOM nodes
4184
+ * @param {Array|Element} elem
4185
+ */
4186
+var getText = Sizzle.getText = function( elem ) {
4187
+    var i, node,
4188
+		nodeType = elem.nodeType,
4189
+		ret = "";
4190
+
4191
+	if ( nodeType ) {
4192
+		if ( nodeType === 1 || nodeType === 9 ) {
4193
+			// Use textContent || innerText for elements
4194
+			if ( typeof elem.textContent === 'string' ) {
4195
+				return elem.textContent;
4196
+			} else if ( typeof elem.innerText === 'string' ) {
4197
+				// Replace IE's carriage returns
4198
+				return elem.innerText.replace( rReturn, '' );
4199
+			} else {
4200
+				// Traverse it's children
4201
+				for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
4202
+					ret += getText( elem );
4203
+				}
4204
+			}
4205
+		} else if ( nodeType === 3 || nodeType === 4 ) {
4206
+			return elem.nodeValue;
4207
+		}
4208
+	} else {
4209
+
4210
+		// If no nodeType, this is expected to be an array
4211
+		for ( i = 0; (node = elem[i]); i++ ) {
4212
+			// Do not traverse comment nodes
4213
+			if ( node.nodeType !== 8 ) {
4214
+				ret += getText( node );
4215
+			}
4216
+		}
4217
+	}
4218
+	return ret;
4219
+};
4220
+
4221
+var Expr = Sizzle.selectors = {
4222
+	order: [ "ID", "NAME", "TAG" ],
4223
+
4224
+	match: {
4225
+		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
4226
+		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
4227
+		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
4228
+		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
4229
+		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
4230
+		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
4231
+		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
4232
+		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
4233
+	},
4234
+
4235
+	leftMatch: {},
4236
+
4237
+	attrMap: {
4238
+		"class": "className",
4239
+		"for": "htmlFor"
4240
+	},
4241
+
4242
+	attrHandle: {
4243
+		href: function( elem ) {
4244
+			return elem.getAttribute( "href" );
4245
+		},
4246
+		type: function( elem ) {
4247
+			return elem.getAttribute( "type" );
4248
+		}
4249
+	},
4250
+
4251
+	relative: {
4252
+		"+": function(checkSet, part){
4253
+			var isPartStr = typeof part === "string",
4254
+				isTag = isPartStr && !rNonWord.test( part ),
4255
+				isPartStrNotTag = isPartStr && !isTag;
4256
+
4257
+			if ( isTag ) {
4258
+				part = part.toLowerCase();
4259
+			}
4260
+
4261
+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
4262
+				if ( (elem = checkSet[i]) ) {
4263
+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
4264
+
4265
+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
4266
+						elem || false :
4267
+						elem === part;
4268
+				}
4269
+			}
4270
+
4271
+			if ( isPartStrNotTag ) {
4272
+				Sizzle.filter( part, checkSet, true );
4273
+			}
4274
+		},
4275
+
4276
+		">": function( checkSet, part ) {
4277
+			var elem,
4278
+				isPartStr = typeof part === "string",
4279
+				i = 0,
4280
+				l = checkSet.length;
4281
+
4282
+			if ( isPartStr && !rNonWord.test( part ) ) {
4283
+				part = part.toLowerCase();
4284
+
4285
+				for ( ; i < l; i++ ) {
4286
+					elem = checkSet[i];
4287
+
4288
+					if ( elem ) {
4289
+						var parent = elem.parentNode;
4290
+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
4291
+					}
4292
+				}
4293
+
4294
+			} else {
4295
+				for ( ; i < l; i++ ) {
4296
+					elem = checkSet[i];
4297
+
4298
+					if ( elem ) {
4299
+						checkSet[i] = isPartStr ?
4300
+							elem.parentNode :
4301
+							elem.parentNode === part;
4302
+					}
4303
+				}
4304
+
4305
+				if ( isPartStr ) {
4306
+					Sizzle.filter( part, checkSet, true );
4307
+				}
4308
+			}
4309
+		},
4310
+
4311
+		"": function(checkSet, part, isXML){
4312
+			var nodeCheck,
4313
+				doneName = done++,
4314
+				checkFn = dirCheck;
4315
+
4316
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
4317
+				part = part.toLowerCase();
4318
+				nodeCheck = part;
4319
+				checkFn = dirNodeCheck;
4320
+			}
4321
+
4322
+			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
4323
+		},
4324
+
4325
+		"~": function( checkSet, part, isXML ) {
4326
+			var nodeCheck,
4327
+				doneName = done++,
4328
+				checkFn = dirCheck;
4329
+
4330
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
4331
+				part = part.toLowerCase();
4332
+				nodeCheck = part;
4333
+				checkFn = dirNodeCheck;
4334
+			}
4335
+
4336
+			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
4337
+		}
4338
+	},
4339
+
4340
+	find: {
4341
+		ID: function( match, context, isXML ) {
4342
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
4343
+				var m = context.getElementById(match[1]);
4344
+				// Check parentNode to catch when Blackberry 4.6 returns
4345
+				// nodes that are no longer in the document #6963
4346
+				return m && m.parentNode ? [m] : [];
4347
+			}
4348
+		},
4349
+
4350
+		NAME: function( match, context ) {
4351
+			if ( typeof context.getElementsByName !== "undefined" ) {
4352
+				var ret = [],
4353
+					results = context.getElementsByName( match[1] );
4354
+
4355
+				for ( var i = 0, l = results.length; i < l; i++ ) {
4356
+					if ( results[i].getAttribute("name") === match[1] ) {
4357
+						ret.push( results[i] );
4358
+					}
4359
+				}
4360
+
4361
+				return ret.length === 0 ? null : ret;
4362
+			}
4363
+		},
4364
+
4365
+		TAG: function( match, context ) {
4366
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
4367
+				return context.getElementsByTagName( match[1] );
4368
+			}
4369
+		}
4370
+	},
4371
+	preFilter: {
4372
+		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
4373
+			match = " " + match[1].replace( rBackslash, "" ) + " ";
4374
+
4375
+			if ( isXML ) {
4376
+				return match;
4377
+			}
4378
+
4379
+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
4380
+				if ( elem ) {
4381
+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
4382
+						if ( !inplace ) {
4383
+							result.push( elem );
4384
+						}
4385
+
4386
+					} else if ( inplace ) {
4387
+						curLoop[i] = false;
4388
+					}
4389
+				}
4390
+			}
4391
+
4392
+			return false;
4393
+		},
4394
+
4395
+		ID: function( match ) {
4396
+			return match[1].replace( rBackslash, "" );
4397
+		},
4398
+
4399
+		TAG: function( match, curLoop ) {
4400
+			return match[1].replace( rBackslash, "" ).toLowerCase();
4401
+		},
4402
+
4403
+		CHILD: function( match ) {
4404
+			if ( match[1] === "nth" ) {
4405
+				if ( !match[2] ) {
4406
+					Sizzle.error( match[0] );
4407
+				}
4408
+
4409
+				match[2] = match[2].replace(/^\+|\s*/g, '');
4410
+
4411
+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
4412
+				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
4413
+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
4414
+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
4415
+
4416
+				// calculate the numbers (first)n+(last) including if they are negative
4417
+				match[2] = (test[1] + (test[2] || 1)) - 0;
4418
+				match[3] = test[3] - 0;
4419
+			}
4420
+			else if ( match[2] ) {
4421
+				Sizzle.error( match[0] );
4422
+			}
4423
+
4424
+			// TODO: Move to normal caching system
4425
+			match[0] = done++;
4426
+
4427
+			return match;
4428
+		},
4429
+
4430
+		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
4431
+			var name = match[1] = match[1].replace( rBackslash, "" );
4432
+			
4433
+			if ( !isXML && Expr.attrMap[name] ) {
4434
+				match[1] = Expr.attrMap[name];
4435
+			}
4436
+
4437
+			// Handle if an un-quoted value was used
4438
+			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
4439
+
4440
+			if ( match[2] === "~=" ) {
4441
+				match[4] = " " + match[4] + " ";
4442
+			}
4443
+
4444
+			return match;
4445
+		},
4446
+
4447
+		PSEUDO: function( match, curLoop, inplace, result, not ) {
4448
+			if ( match[1] === "not" ) {
4449
+				// If we're dealing with a complex expression, or a simple one
4450
+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
4451
+					match[3] = Sizzle(match[3], null, null, curLoop);
4452
+
4453
+				} else {
4454
+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
4455
+
4456
+					if ( !inplace ) {
4457
+						result.push.apply( result, ret );
4458
+					}
4459
+
4460
+					return false;
4461
+				}
4462
+
4463
+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
4464
+				return true;
4465
+			}
4466
+			
4467
+			return match;
4468
+		},
4469
+
4470
+		POS: function( match ) {
4471
+			match.unshift( true );
4472
+
4473
+			return match;
4474
+		}
4475
+	},
4476
+	
4477
+	filters: {
4478
+		enabled: function( elem ) {
4479
+			return elem.disabled === false && elem.type !== "hidden";
4480
+		},
4481
+
4482
+		disabled: function( elem ) {
4483
+			return elem.disabled === true;
4484
+		},
4485
+
4486
+		checked: function( elem ) {
4487
+			return elem.checked === true;
4488
+		},
4489
+		
4490
+		selected: function( elem ) {
4491
+			// Accessing this property makes selected-by-default
4492
+			// options in Safari work properly
4493
+			if ( elem.parentNode ) {
4494
+				elem.parentNode.selectedIndex;
4495
+			}
4496
+			
4497
+			return elem.selected === true;
4498
+		},
4499
+
4500
+		parent: function( elem ) {
4501
+			return !!elem.firstChild;
4502
+		},
4503
+
4504
+		empty: function( elem ) {
4505
+			return !elem.firstChild;
4506
+		},
4507
+
4508
+		has: function( elem, i, match ) {
4509
+			return !!Sizzle( match[3], elem ).length;
4510
+		},
4511
+
4512
+		header: function( elem ) {
4513
+			return (/h\d/i).test( elem.nodeName );
4514
+		},
4515
+
4516
+		text: function( elem ) {
4517
+			var attr = elem.getAttribute( "type" ), type = elem.type;
4518
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
4519
+			// use getAttribute instead to test this case
4520
+			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
4521
+		},
4522
+
4523
+		radio: function( elem ) {
4524
+			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
4525
+		},
4526
+
4527
+		checkbox: function( elem ) {
4528
+			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
4529
+		},
4530
+
4531
+		file: function( elem ) {
4532
+			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
4533
+		},
4534
+
4535
+		password: function( elem ) {
4536
+			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
4537
+		},
4538
+
4539
+		submit: function( elem ) {
4540
+			var name = elem.nodeName.toLowerCase();
4541
+			return (name === "input" || name === "button") && "submit" === elem.type;
4542
+		},
4543
+
4544
+		image: function( elem ) {
4545
+			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
4546
+		},
4547
+
4548
+		reset: function( elem ) {
4549
+			var name = elem.nodeName.toLowerCase();
4550
+			return (name === "input" || name === "button") && "reset" === elem.type;
4551
+		},
4552
+
4553
+		button: function( elem ) {
4554
+			var name = elem.nodeName.toLowerCase();
4555
+			return name === "input" && "button" === elem.type || name === "button";
4556
+		},
4557
+
4558
+		input: function( elem ) {
4559
+			return (/input|select|textarea|button/i).test( elem.nodeName );
4560
+		},
4561
+
4562
+		focus: function( elem ) {
4563
+			return elem === elem.ownerDocument.activeElement;
4564
+		}
4565
+	},
4566
+	setFilters: {
4567
+		first: function( elem, i ) {
4568
+			return i === 0;
4569
+		},
4570
+
4571
+		last: function( elem, i, match, array ) {
4572
+			return i === array.length - 1;
4573
+		},
4574
+
4575
+		even: function( elem, i ) {
4576
+			return i % 2 === 0;
4577
+		},
4578
+
4579
+		odd: function( elem, i ) {
4580
+			return i % 2 === 1;
4581
+		},
4582
+
4583
+		lt: function( elem, i, match ) {
4584
+			return i < match[3] - 0;
4585
+		},
4586
+
4587
+		gt: function( elem, i, match ) {
4588
+			return i > match[3] - 0;
4589
+		},
4590
+
4591
+		nth: function( elem, i, match ) {
4592
+			return match[3] - 0 === i;
4593
+		},
4594
+
4595
+		eq: function( elem, i, match ) {
4596
+			return match[3] - 0 === i;
4597
+		}
4598
+	},
4599
+	filter: {
4600
+		PSEUDO: function( elem, match, i, array ) {
4601
+			var name = match[1],
4602
+				filter = Expr.filters[ name ];
4603
+
4604
+			if ( filter ) {
4605
+				return filter( elem, i, match, array );
4606
+
4607
+			} else if ( name === "contains" ) {
4608
+				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
4609
+
4610
+			} else if ( name === "not" ) {
4611
+				var not = match[3];
4612
+
4613
+				for ( var j = 0, l = not.length; j < l; j++ ) {
4614
+					if ( not[j] === elem ) {
4615
+						return false;
4616
+					}
4617
+				}
4618
+
4619
+				return true;
4620
+
4621
+			} else {
4622
+				Sizzle.error( name );
4623
+			}
4624
+		},
4625
+
4626
+		CHILD: function( elem, match ) {
4627
+			var first, last,
4628
+				doneName, parent, cache,
4629
+				count, diff,
4630
+				type = match[1],
4631
+				node = elem;
4632
+
4633
+			switch ( type ) {
4634
+				case "only":
4635
+				case "first":
4636
+					while ( (node = node.previousSibling) )	 {
4637
+						if ( node.nodeType === 1 ) { 
4638
+							return false; 
4639
+						}
4640
+					}
4641
+
4642
+					if ( type === "first" ) { 
4643
+						return true; 
4644
+					}
4645
+
4646
+					node = elem;
4647
+
4648
+				case "last":
4649
+					while ( (node = node.nextSibling) )	 {
4650
+						if ( node.nodeType === 1 ) { 
4651
+							return false; 
4652
+						}
4653
+					}
4654
+
4655
+					return true;
4656
+
4657
+				case "nth":
4658
+					first = match[2];
4659
+					last = match[3];
4660
+
4661
+					if ( first === 1 && last === 0 ) {
4662
+						return true;
4663
+					}
4664
+					
4665
+					doneName = match[0];
4666
+					parent = elem.parentNode;
4667
+	
4668
+					if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
4669
+						count = 0;
4670
+						
4671
+						for ( node = parent.firstChild; node; node = node.nextSibling ) {
4672
+							if ( node.nodeType === 1 ) {
4673
+								node.nodeIndex = ++count;
4674
+							}
4675
+						} 
4676
+
4677
+						parent[ expando ] = doneName;
4678
+					}
4679
+					
4680
+					diff = elem.nodeIndex - last;
4681
+
4682
+					if ( first === 0 ) {
4683
+						return diff === 0;
4684
+
4685
+					} else {
4686
+						return ( diff % first === 0 && diff / first >= 0 );
4687
+					}
4688
+			}
4689
+		},
4690
+
4691
+		ID: function( elem, match ) {
4692
+			return elem.nodeType === 1 && elem.getAttribute("id") === match;
4693
+		},
4694
+
4695
+		TAG: function( elem, match ) {
4696
+			return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
4697
+		},
4698
+		
4699
+		CLASS: function( elem, match ) {
4700
+			return (" " + (elem.className || elem.getAttribute("class")) + " ")
4701
+				.indexOf( match ) > -1;
4702
+		},
4703
+
4704
+		ATTR: function( elem, match ) {
4705
+			var name = match[1],
4706
+				result = Sizzle.attr ?
4707
+					Sizzle.attr( elem, name ) :
4708
+					Expr.attrHandle[ name ] ?
4709
+					Expr.attrHandle[ name ]( elem ) :
4710
+					elem[ name ] != null ?
4711
+						elem[ name ] :
4712
+						elem.getAttribute( name ),
4713
+				value = result + "",
4714
+				type = match[2],
4715
+				check = match[4];
4716
+
4717
+			return result == null ?
4718
+				type === "!=" :
4719
+				!type && Sizzle.attr ?
4720
+				result != null :
4721
+				type === "=" ?
4722
+				value === check :
4723
+				type === "*=" ?
4724
+				value.indexOf(check) >= 0 :
4725
+				type === "~=" ?
4726
+				(" " + value + " ").indexOf(check) >= 0 :
4727
+				!check ?
4728
+				value && result !== false :
4729
+				type === "!=" ?
4730
+				value !== check :
4731
+				type === "^=" ?
4732
+				value.indexOf(check) === 0 :
4733
+				type === "$=" ?
4734
+				value.substr(value.length - check.length) === check :
4735
+				type === "|=" ?
4736
+				value === check || value.substr(0, check.length + 1) === check + "-" :
4737
+				false;
4738
+		},
4739
+
4740
+		POS: function( elem, match, i, array ) {
4741
+			var name = match[2],
4742
+				filter = Expr.setFilters[ name ];
4743
+
4744
+			if ( filter ) {
4745
+				return filter( elem, i, match, array );
4746
+			}
4747
+		}
4748
+	}
4749
+};
4750
+
4751
+var origPOS = Expr.match.POS,
4752
+	fescape = function(all, num){
4753
+		return "\\" + (num - 0 + 1);
4754
+	};
4755
+
4756
+for ( var type in Expr.match ) {
4757
+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
4758
+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
4759
+}
4760
+
4761
+var makeArray = function( array, results ) {
4762
+	array = Array.prototype.slice.call( array, 0 );
4763
+
4764
+	if ( results ) {
4765
+		results.push.apply( results, array );
4766
+		return results;
4767
+	}
4768
+	
4769
+	return array;
4770
+};
4771
+
4772
+// Perform a simple check to determine if the browser is capable of
4773
+// converting a NodeList to an array using builtin methods.
4774
+// Also verifies that the returned array holds DOM nodes
4775
+// (which is not the case in the Blackberry browser)
4776
+try {
4777
+	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
4778
+
4779
+// Provide a fallback method if it does not work
4780
+} catch( e ) {
4781
+	makeArray = function( array, results ) {
4782
+		var i = 0,
4783
+			ret = results || [];
4784
+
4785
+		if ( toString.call(array) === "[object Array]" ) {
4786
+			Array.prototype.push.apply( ret, array );
4787
+
4788
+		} else {
4789
+			if ( typeof array.length === "number" ) {
4790
+				for ( var l = array.length; i < l; i++ ) {
4791
+					ret.push( array[i] );
4792
+				}
4793
+
4794
+			} else {
4795
+				for ( ; array[i]; i++ ) {
4796
+					ret.push( array[i] );
4797
+				}
4798
+			}
4799
+		}
4800
+
4801
+		return ret;
4802
+	};
4803
+}
4804
+
4805
+var sortOrder, siblingCheck;
4806
+
4807
+if ( document.documentElement.compareDocumentPosition ) {
4808
+	sortOrder = function( a, b ) {
4809
+		if ( a === b ) {
4810
+			hasDuplicate = true;
4811
+			return 0;
4812
+		}
4813
+
4814
+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
4815
+			return a.compareDocumentPosition ? -1 : 1;
4816
+		}
4817
+
4818
+		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
4819
+	};
4820
+
4821
+} else {
4822
+	sortOrder = function( a, b ) {
4823
+		// The nodes are identical, we can exit early
4824
+		if ( a === b ) {
4825
+			hasDuplicate = true;
4826
+			return 0;
4827
+
4828
+		// Fallback to using sourceIndex (in IE) if it's available on both nodes
4829
+		} else if ( a.sourceIndex && b.sourceIndex ) {
4830
+			return a.sourceIndex - b.sourceIndex;
4831
+		}
4832
+
4833
+		var al, bl,
4834
+			ap = [],
4835
+			bp = [],
4836
+			aup = a.parentNode,
4837
+			bup = b.parentNode,
4838
+			cur = aup;
4839
+
4840
+		// If the nodes are siblings (or identical) we can do a quick check
4841
+		if ( aup === bup ) {
4842
+			return siblingCheck( a, b );
4843
+
4844
+		// If no parents were found then the nodes are disconnected
4845
+		} else if ( !aup ) {
4846
+			return -1;
4847
+
4848
+		} else if ( !bup ) {
4849
+			return 1;
4850
+		}
4851
+
4852
+		// Otherwise they're somewhere else in the tree so we need
4853
+		// to build up a full list of the parentNodes for comparison
4854
+		while ( cur ) {
4855
+			ap.unshift( cur );
4856
+			cur = cur.parentNode;
4857
+		}
4858
+
4859
+		cur = bup;
4860
+
4861
+		while ( cur ) {
4862
+			bp.unshift( cur );
4863
+			cur = cur.parentNode;
4864
+		}
4865
+
4866
+		al = ap.length;
4867
+		bl = bp.length;
4868
+
4869
+		// Start walking down the tree looking for a discrepancy
4870
+		for ( var i = 0; i < al && i < bl; i++ ) {
4871
+			if ( ap[i] !== bp[i] ) {
4872
+				return siblingCheck( ap[i], bp[i] );
4873
+			}
4874
+		}
4875
+
4876
+		// We ended someplace up the tree so do a sibling check
4877
+		return i === al ?
4878
+			siblingCheck( a, bp[i], -1 ) :
4879
+			siblingCheck( ap[i], b, 1 );
4880
+	};
4881
+
4882
+	siblingCheck = function( a, b, ret ) {
4883
+		if ( a === b ) {
4884
+			return ret;
4885
+		}
4886
+
4887
+		var cur = a.nextSibling;
4888
+
4889
+		while ( cur ) {
4890
+			if ( cur === b ) {
4891
+				return -1;
4892
+			}
4893
+
4894
+			cur = cur.nextSibling;
4895
+		}
4896
+
4897
+		return 1;
4898
+	};
4899
+}
4900
+
4901
+// Check to see if the browser returns elements by name when
4902
+// querying by getElementById (and provide a workaround)
4903
+(function(){
4904
+	// We're going to inject a fake input element with a specified name
4905
+	var form = document.createElement("div"),
4906
+		id = "script" + (new Date()).getTime(),
4907
+		root = document.documentElement;
4908
+
4909
+	form.innerHTML = "<a name='" + id + "'/>";
4910
+
4911
+	// Inject it into the root element, check its status, and remove it quickly
4912
+	root.insertBefore( form, root.firstChild );
4913
+
4914
+	// The workaround has to do additional checks after a getElementById
4915
+	// Which slows things down for other browsers (hence the branching)
4916
+	if ( document.getElementById( id ) ) {
4917
+		Expr.find.ID = function( match, context, isXML ) {
4918
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
4919
+				var m = context.getElementById(match[1]);
4920
+
4921
+				return m ?
4922
+					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
4923
+						[m] :
4924
+						undefined :
4925
+					[];
4926
+			}
4927
+		};
4928
+
4929
+		Expr.filter.ID = function( elem, match ) {
4930
+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
4931
+
4932
+			return elem.nodeType === 1 && node && node.nodeValue === match;
4933
+		};
4934
+	}
4935
+
4936
+	root.removeChild( form );
4937
+
4938
+	// release memory in IE
4939
+	root = form = null;
4940
+})();
4941
+
4942
+(function(){
4943
+	// Check to see if the browser returns only elements
4944
+	// when doing getElementsByTagName("*")
4945
+
4946
+	// Create a fake element
4947
+	var div = document.createElement("div");
4948
+	div.appendChild( document.createComment("") );
4949
+
4950
+	// Make sure no comments are found
4951
+	if ( div.getElementsByTagName("*").length > 0 ) {
4952
+		Expr.find.TAG = function( match, context ) {
4953
+			var results = context.getElementsByTagName( match[1] );
4954
+
4955
+			// Filter out possible comments
4956
+			if ( match[1] === "*" ) {
4957
+				var tmp = [];
4958
+
4959
+				for ( var i = 0; results[i]; i++ ) {
4960
+					if ( results[i].nodeType === 1 ) {
4961
+						tmp.push( results[i] );
4962
+					}
4963
+				}
4964
+
4965
+				results = tmp;
4966
+			}
4967
+
4968
+			return results;
4969
+		};
4970
+	}
4971
+
4972
+	// Check to see if an attribute returns normalized href attributes
4973
+	div.innerHTML = "<a href='#'></a>";
4974
+
4975
+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
4976
+			div.firstChild.getAttribute("href") !== "#" ) {
4977
+
4978
+		Expr.attrHandle.href = function( elem ) {
4979
+			return elem.getAttribute( "href", 2 );
4980
+		};
4981
+	}
4982
+
4983
+	// release memory in IE
4984
+	div = null;
4985
+})();
4986
+
4987
+if ( document.querySelectorAll ) {
4988
+	(function(){
4989
+		var oldSizzle = Sizzle,
4990
+			div = document.createElement("div"),
4991
+			id = "__sizzle__";
4992
+
4993
+		div.innerHTML = "<p class='TEST'></p>";
4994
+
4995
+		// Safari can't handle uppercase or unicode characters when
4996
+		// in quirks mode.
4997
+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
4998
+			return;
4999
+		}
5000
+	
5001
+		Sizzle = function( query, context, extra, seed ) {
5002
+			context = context || document;
5003
+
5004
+			// Only use querySelectorAll on non-XML documents
5005
+			// (ID selectors don't work in non-HTML documents)
5006
+			if ( !seed && !Sizzle.isXML(context) ) {
5007
+				// See if we find a selector to speed up
5008
+				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
5009
+				
5010
+				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
5011
+					// Speed-up: Sizzle("TAG")
5012
+					if ( match[1] ) {
5013
+						return makeArray( context.getElementsByTagName( query ), extra );
5014
+					
5015
+					// Speed-up: Sizzle(".CLASS")
5016
+					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
5017
+						return makeArray( context.getElementsByClassName( match[2] ), extra );
5018
+					}
5019
+				}
5020
+				
5021
+				if ( context.nodeType === 9 ) {
5022
+					// Speed-up: Sizzle("body")
5023
+					// The body element only exists once, optimize finding it
5024
+					if ( query === "body" && context.body ) {
5025
+						return makeArray( [ context.body ], extra );
5026
+						
5027
+					// Speed-up: Sizzle("#ID")
5028
+					} else if ( match && match[3] ) {
5029
+						var elem = context.getElementById( match[3] );
5030
+
5031
+						// Check parentNode to catch when Blackberry 4.6 returns
5032
+						// nodes that are no longer in the document #6963
5033
+						if ( elem && elem.parentNode ) {
5034
+							// Handle the case where IE and Opera return items
5035
+							// by name instead of ID
5036
+							if ( elem.id === match[3] ) {
5037
+								return makeArray( [ elem ], extra );
5038
+							}
5039
+							
5040
+						} else {
5041
+							return makeArray( [], extra );
5042
+						}
5043
+					}
5044
+					
5045
+					try {
5046
+						return makeArray( context.querySelectorAll(query), extra );
5047
+					} catch(qsaError) {}
5048
+
5049
+				// qSA works strangely on Element-rooted queries
5050
+				// We can work around this by specifying an extra ID on the root
5051
+				// and working up from there (Thanks to Andrew Dupont for the technique)
5052
+				// IE 8 doesn't work on object elements
5053
+				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
5054
+					var oldContext = context,
5055
+						old = context.getAttribute( "id" ),
5056
+						nid = old || id,
5057
+						hasParent = context.parentNode,
5058
+						relativeHierarchySelector = /^\s*[+~]/.test( query );
5059
+
5060
+					if ( !old ) {
5061
+						context.setAttribute( "id", nid );
5062
+					} else {
5063
+						nid = nid.replace( /'/g, "\\$&" );
5064
+					}
5065
+					if ( relativeHierarchySelector && hasParent ) {
5066
+						context = context.parentNode;
5067
+					}
5068
+
5069
+					try {
5070
+						if ( !relativeHierarchySelector || hasParent ) {
5071
+							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
5072
+						}
5073
+
5074
+					} catch(pseudoError) {
5075
+					} finally {
5076
+						if ( !old ) {
5077
+							oldContext.removeAttribute( "id" );
5078
+						}
5079
+					}
5080
+				}
5081
+			}
5082
+		
5083
+			return oldSizzle(query, context, extra, seed);
5084
+		};
5085
+
5086
+		for ( var prop in oldSizzle ) {
5087
+			Sizzle[ prop ] = oldSizzle[ prop ];
5088
+		}
5089
+
5090
+		// release memory in IE
5091
+		div = null;
5092
+	})();
5093
+}
5094
+
5095
+(function(){
5096
+	var html = document.documentElement,
5097
+		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
5098
+
5099
+	if ( matches ) {
5100
+		// Check to see if it's possible to do matchesSelector
5101
+		// on a disconnected node (IE 9 fails this)
5102
+		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
5103
+			pseudoWorks = false;
5104
+
5105
+		try {
5106
+			// This should fail with an exception
5107
+			// Gecko does not error, returns false instead
5108
+			matches.call( document.documentElement, "[test!='']:sizzle" );
5109
+	
5110
+		} catch( pseudoError ) {
5111
+			pseudoWorks = true;
5112
+		}
5113
+
5114
+		Sizzle.matchesSelector = function( node, expr ) {
5115
+			// Make sure that attribute selectors are quoted
5116
+			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
5117
+
5118
+			if ( !Sizzle.isXML( node ) ) {
5119
+				try { 
5120
+					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
5121
+						var ret = matches.call( node, expr );
5122
+
5123
+						// IE 9's matchesSelector returns false on disconnected nodes
5124
+						if ( ret || !disconnectedMatch ||
5125
+								// As well, disconnected nodes are said to be in a document
5126
+								// fragment in IE 9, so check for that
5127
+								node.document && node.document.nodeType !== 11 ) {
5128
+							return ret;
5129
+						}
5130
+					}
5131
+				} catch(e) {}
5132
+			}
5133
+
5134
+			return Sizzle(expr, null, null, [node]).length > 0;
5135
+		};
5136
+	}
5137
+})();
5138
+
5139
+(function(){
5140
+	var div = document.createElement("div");
5141
+
5142
+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
5143
+
5144
+	// Opera can't find a second classname (in 9.6)
5145
+	// Also, make sure that getElementsByClassName actually exists
5146
+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
5147
+		return;
5148
+	}
5149
+
5150
+	// Safari caches class attributes, doesn't catch changes (in 3.2)
5151
+	div.lastChild.className = "e";
5152
+
5153
+	if ( div.getElementsByClassName("e").length === 1 ) {
5154
+		return;
5155
+	}
5156
+	
5157
+	Expr.order.splice(1, 0, "CLASS");
5158
+	Expr.find.CLASS = function( match, context, isXML ) {
5159
+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
5160
+			return context.getElementsByClassName(match[1]);
5161
+		}
5162
+	};
5163
+
5164
+	// release memory in IE
5165
+	div = null;
5166
+})();
5167
+
5168
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
5169
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
5170
+		var elem = checkSet[i];
5171
+
5172
+		if ( elem ) {
5173
+			var match = false;
5174
+
5175
+			elem = elem[dir];
5176
+
5177
+			while ( elem ) {
5178
+				if ( elem[ expando ] === doneName ) {
5179
+					match = checkSet[elem.sizset];
5180
+					break;
5181
+				}
5182
+
5183
+				if ( elem.nodeType === 1 && !isXML ){
5184
+					elem[ expando ] = doneName;
5185
+					elem.sizset = i;
5186
+				}
5187
+
5188
+				if ( elem.nodeName.toLowerCase() === cur ) {
5189
+					match = elem;
5190
+					break;
5191
+				}
5192
+
5193
+				elem = elem[dir];
5194
+			}
5195
+
5196
+			checkSet[i] = match;
5197
+		}
5198
+	}
5199
+}
5200
+
5201
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
5202
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
5203
+		var elem = checkSet[i];
5204
+
5205
+		if ( elem ) {
5206
+			var match = false;
5207
+			
5208
+			elem = elem[dir];
5209
+
5210
+			while ( elem ) {
5211
+				if ( elem[ expando ] === doneName ) {
5212
+					match = checkSet[elem.sizset];
5213
+					break;
5214
+				}
5215
+
5216
+				if ( elem.nodeType === 1 ) {
5217
+					if ( !isXML ) {
5218
+						elem[ expando ] = doneName;
5219
+						elem.sizset = i;
5220
+					}
5221
+
5222
+					if ( typeof cur !== "string" ) {
5223
+						if ( elem === cur ) {
5224
+							match = true;
5225
+							break;
5226
+						}
5227
+
5228
+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
5229
+						match = elem;
5230
+						break;
5231
+					}
5232
+				}
5233
+
5234
+				elem = elem[dir];
5235
+			}
5236
+
5237
+			checkSet[i] = match;
5238
+		}
5239
+	}
5240
+}
5241
+
5242
+if ( document.documentElement.contains ) {
5243
+	Sizzle.contains = function( a, b ) {
5244
+		return a !== b && (a.contains ? a.contains(b) : true);
5245
+	};
5246
+
5247
+} else if ( document.documentElement.compareDocumentPosition ) {
5248
+	Sizzle.contains = function( a, b ) {
5249
+		return !!(a.compareDocumentPosition(b) & 16);
5250
+	};
5251
+
5252
+} else {
5253
+	Sizzle.contains = function() {
5254
+		return false;
5255
+	};
5256
+}
5257
+
5258
+Sizzle.isXML = function( elem ) {
5259
+	// documentElement is verified for cases where it doesn't yet exist
5260
+	// (such as loading iframes in IE - #4833) 
5261
+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
5262
+
5263
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
5264
+};
5265
+
5266
+var posProcess = function( selector, context, seed ) {
5267
+	var match,
5268
+		tmpSet = [],
5269
+		later = "",
5270
+		root = context.nodeType ? [context] : context;
5271
+
5272
+	// Position selectors must be done after the filter
5273
+	// And so must :not(positional) so we move all PSEUDOs to the end
5274
+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
5275
+		later += match[0];
5276
+		selector = selector.replace( Expr.match.PSEUDO, "" );
5277
+	}
5278
+
5279
+	selector = Expr.relative[selector] ? selector + "*" : selector;
5280
+
5281
+	for ( var i = 0, l = root.length; i < l; i++ ) {
5282
+		Sizzle( selector, root[i], tmpSet, seed );
5283
+	}
5284
+
5285
+	return Sizzle.filter( later, tmpSet );
5286
+};
5287
+
5288
+// EXPOSE
5289
+// Override sizzle attribute retrieval
5290
+Sizzle.attr = jQuery.attr;
5291
+Sizzle.selectors.attrMap = {};
5292
+jQuery.find = Sizzle;
5293
+jQuery.expr = Sizzle.selectors;
5294
+jQuery.expr[":"] = jQuery.expr.filters;
5295
+jQuery.unique = Sizzle.uniqueSort;
5296
+jQuery.text = Sizzle.getText;
5297
+jQuery.isXMLDoc = Sizzle.isXML;
5298
+jQuery.contains = Sizzle.contains;
5299
+
5300
+
5301
+})();
5302
+
5303
+
5304
+var runtil = /Until$/,
5305
+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
5306
+	// Note: This RegExp should be improved, or likely pulled from Sizzle
5307
+	rmultiselector = /,/,
5308
+	isSimple = /^.[^:#\[\.,]*$/,
5309
+	slice = Array.prototype.slice,
5310
+	POS = jQuery.expr.match.POS,
5311
+	// methods guaranteed to produce a unique set when starting from a unique set
5312
+	guaranteedUnique = {
5313
+		children: true,
5314
+		contents: true,
5315
+		next: true,
5316
+		prev: true
5317
+	};
5318
+
5319
+jQuery.fn.extend({
5320
+	find: function( selector ) {
5321
+		var self = this,
5322
+			i, l;
5323
+
5324
+		if ( typeof selector !== "string" ) {
5325
+			return jQuery( selector ).filter(function() {
5326
+				for ( i = 0, l = self.length; i < l; i++ ) {
5327
+					if ( jQuery.contains( self[ i ], this ) ) {
5328
+						return true;
5329
+					}
5330
+				}
5331
+			});
5332
+		}
5333
+
5334
+		var ret = this.pushStack( "", "find", selector ),
5335
+			length, n, r;
5336
+
5337
+		for ( i = 0, l = this.length; i < l; i++ ) {
5338
+			length = ret.length;
5339
+			jQuery.find( selector, this[i], ret );
5340
+
5341
+			if ( i > 0 ) {
5342
+				// Make sure that the results are unique
5343
+				for ( n = length; n < ret.length; n++ ) {
5344
+					for ( r = 0; r < length; r++ ) {
5345
+						if ( ret[r] === ret[n] ) {
5346
+							ret.splice(n--, 1);
5347
+							break;
5348
+						}
5349
+					}
5350
+				}
5351
+			}
5352
+		}
5353
+
5354
+		return ret;
5355
+	},
5356
+
5357
+	has: function( target ) {
5358
+		var targets = jQuery( target );
5359
+		return this.filter(function() {
5360
+			for ( var i = 0, l = targets.length; i < l; i++ ) {
5361
+				if ( jQuery.contains( this, targets[i] ) ) {
5362
+					return true;
5363
+				}
5364
+			}
5365
+		});
5366
+	},
5367
+
5368
+	not: function( selector ) {
5369
+		return this.pushStack( winnow(this, selector, false), "not", selector);
5370
+	},
5371
+
5372
+	filter: function( selector ) {
5373
+		return this.pushStack( winnow(this, selector, true), "filter", selector );
5374
+	},
5375
+
5376
+	is: function( selector ) {
5377
+		return !!selector && ( 
5378
+			typeof selector === "string" ?
5379
+				// If this is a positional selector, check membership in the returned set
5380
+				// so $("p:first").is("p:last") won't return true for a doc with two "p".
5381
+				POS.test( selector ) ? 
5382
+					jQuery( selector, this.context ).index( this[0] ) >= 0 :
5383
+					jQuery.filter( selector, this ).length > 0 :
5384
+				this.filter( selector ).length > 0 );
5385
+	},
5386
+
5387
+	closest: function( selectors, context ) {
5388
+		var ret = [], i, l, cur = this[0];
5389
+		
5390
+		// Array (deprecated as of jQuery 1.7)
5391
+		if ( jQuery.isArray( selectors ) ) {
5392
+			var level = 1;
5393
+
5394
+			while ( cur && cur.ownerDocument && cur !== context ) {
5395
+				for ( i = 0; i < selectors.length; i++ ) {
5396
+
5397
+					if ( jQuery( cur ).is( selectors[ i ] ) ) {
5398
+						ret.push({ selector: selectors[ i ], elem: cur, level: level });
5399
+					}
5400
+				}
5401
+
5402
+				cur = cur.parentNode;
5403
+				level++;
5404
+			}
5405
+
5406
+			return ret;
5407
+		}
5408
+
5409
+		// String
5410
+		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
5411
+				jQuery( selectors, context || this.context ) :
5412
+				0;
5413
+
5414
+		for ( i = 0, l = this.length; i < l; i++ ) {
5415
+			cur = this[i];
5416
+
5417
+			while ( cur ) {
5418
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
5419
+					ret.push( cur );
5420
+					break;
5421
+
5422
+				} else {
5423
+					cur = cur.parentNode;
5424
+					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
5425
+						break;
5426
+					}
5427
+				}
5428
+			}
5429
+		}
5430
+
5431
+		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
5432
+
5433
+		return this.pushStack( ret, "closest", selectors );
5434
+	},
5435
+
5436
+	// Determine the position of an element within
5437
+	// the matched set of elements
5438
+	index: function( elem ) {
5439
+
5440
+		// No argument, return index in parent
5441
+		if ( !elem ) {
5442
+			return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
5443
+		}
5444
+
5445
+		// index in selector
5446
+		if ( typeof elem === "string" ) {
5447
+			return jQuery.inArray( this[0], jQuery( elem ) );
5448
+		}
5449
+
5450
+		// Locate the position of the desired element
5451
+		return jQuery.inArray(
5452
+			// If it receives a jQuery object, the first element is used
5453
+			elem.jquery ? elem[0] : elem, this );
5454
+	},
5455
+
5456
+	add: function( selector, context ) {
5457
+		var set = typeof selector === "string" ?
5458
+				jQuery( selector, context ) :
5459
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
5460
+			all = jQuery.merge( this.get(), set );
5461
+
5462
+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
5463
+			all :
5464
+			jQuery.unique( all ) );
5465
+	},
5466
+
5467
+	andSelf: function() {
5468
+		return this.add( this.prevObject );
5469
+	}
5470
+});
5471
+
5472
+// A painfully simple check to see if an element is disconnected
5473
+// from a document (should be improved, where feasible).
5474
+function isDisconnected( node ) {
5475
+	return !node || !node.parentNode || node.parentNode.nodeType === 11;
5476
+}
5477
+
5478
+jQuery.each({
5479
+	parent: function( elem ) {
5480
+		var parent = elem.parentNode;
5481
+		return parent && parent.nodeType !== 11 ? parent : null;
5482
+	},
5483
+	parents: function( elem ) {
5484
+		return jQuery.dir( elem, "parentNode" );
5485
+	},
5486
+	parentsUntil: function( elem, i, until ) {
5487
+		return jQuery.dir( elem, "parentNode", until );
5488
+	},
5489
+	next: function( elem ) {
5490
+		return jQuery.nth( elem, 2, "nextSibling" );
5491
+	},
5492
+	prev: function( elem ) {
5493
+		return jQuery.nth( elem, 2, "previousSibling" );
5494
+	},
5495
+	nextAll: function( elem ) {
5496
+		return jQuery.dir( elem, "nextSibling" );
5497
+	},
5498
+	prevAll: function( elem ) {
5499
+		return jQuery.dir( elem, "previousSibling" );
5500
+	},
5501
+	nextUntil: function( elem, i, until ) {
5502
+		return jQuery.dir( elem, "nextSibling", until );
5503
+	},
5504
+	prevUntil: function( elem, i, until ) {
5505
+		return jQuery.dir( elem, "previousSibling", until );
5506
+	},
5507
+	siblings: function( elem ) {
5508
+		return jQuery.sibling( elem.parentNode.firstChild, elem );
5509
+	},
5510
+	children: function( elem ) {
5511
+		return jQuery.sibling( elem.firstChild );
5512
+	},
5513
+	contents: function( elem ) {
5514
+		return jQuery.nodeName( elem, "iframe" ) ?
5515
+			elem.contentDocument || elem.contentWindow.document :
5516
+			jQuery.makeArray( elem.childNodes );
5517
+	}
5518
+}, function( name, fn ) {
5519
+	jQuery.fn[ name ] = function( until, selector ) {
5520
+		var ret = jQuery.map( this, fn, until );
5521
+
5522
+		if ( !runtil.test( name ) ) {
5523
+			selector = until;
5524
+		}
5525
+
5526
+		if ( selector && typeof selector === "string" ) {
5527
+			ret = jQuery.filter( selector, ret );
5528
+		}
5529
+
5530
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
5531
+
5532
+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
5533
+			ret = ret.reverse();
5534
+		}
5535
+
5536
+		return this.pushStack( ret, name, slice.call( arguments ).join(",") );
5537
+	};
5538
+});
5539
+
5540
+jQuery.extend({
5541
+	filter: function( expr, elems, not ) {
5542
+		if ( not ) {
5543
+			expr = ":not(" + expr + ")";
5544
+		}
5545
+
5546
+		return elems.length === 1 ?
5547
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
5548
+			jQuery.find.matches(expr, elems);
5549
+	},
5550
+
5551
+	dir: function( elem, dir, until ) {
5552
+		var matched = [],
5553
+			cur = elem[ dir ];
5554
+
5555
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
5556
+			if ( cur.nodeType === 1 ) {
5557
+				matched.push( cur );
5558
+			}
5559
+			cur = cur[dir];
5560
+		}
5561
+		return matched;
5562
+	},
5563
+
5564
+	nth: function( cur, result, dir, elem ) {
5565
+		result = result || 1;
5566
+		var num = 0;
5567
+
5568
+		for ( ; cur; cur = cur[dir] ) {
5569
+			if ( cur.nodeType === 1 && ++num === result ) {
5570
+				break;
5571
+			}
5572
+		}
5573
+
5574
+		return cur;
5575
+	},
5576
+
5577
+	sibling: function( n, elem ) {
5578
+		var r = [];
5579
+
5580
+		for ( ; n; n = n.nextSibling ) {
5581
+			if ( n.nodeType === 1 && n !== elem ) {
5582
+				r.push( n );
5583
+			}
5584
+		}
5585
+
5586
+		return r;
5587
+	}
5588
+});
5589
+
5590
+// Implement the identical functionality for filter and not
5591
+function winnow( elements, qualifier, keep ) {
5592
+
5593
+	// Can't pass null or undefined to indexOf in Firefox 4
5594
+	// Set to 0 to skip string check
5595
+	qualifier = qualifier || 0;
5596
+
5597
+	if ( jQuery.isFunction( qualifier ) ) {
5598
+		return jQuery.grep(elements, function( elem, i ) {
5599
+			var retVal = !!qualifier.call( elem, i, elem );
5600
+			return retVal === keep;
5601
+		});
5602
+
5603
+	} else if ( qualifier.nodeType ) {
5604
+		return jQuery.grep(elements, function( elem, i ) {
5605
+			return ( elem === qualifier ) === keep;
5606
+		});
5607
+
5608
+	} else if ( typeof qualifier === "string" ) {
5609
+		var filtered = jQuery.grep(elements, function( elem ) {
5610
+			return elem.nodeType === 1;
5611
+		});
5612
+
5613
+		if ( isSimple.test( qualifier ) ) {
5614
+			return jQuery.filter(qualifier, filtered, !keep);
5615
+		} else {
5616
+			qualifier = jQuery.filter( qualifier, filtered );
5617
+		}
5618
+	}
5619
+
5620
+	return jQuery.grep(elements, function( elem, i ) {
5621
+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
5622
+	});
5623
+}
5624
+
5625
+
5626
+
5627
+
5628
+function createSafeFragment( document ) {
5629
+	var list = nodeNames.split( "|" ),
5630
+	safeFrag = document.createDocumentFragment();
5631
+
5632
+	if ( safeFrag.createElement ) {
5633
+		while ( list.length ) {
5634
+			safeFrag.createElement(
5635
+				list.pop()
5636
+			);
5637
+		}
5638
+	}
5639
+	return safeFrag;
5640
+}
5641
+
5642
+var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" +
5643
+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
5644
+	rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
5645
+	rleadingWhitespace = /^\s+/,
5646
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
5647
+	rtagName = /<([\w:]+)/,
5648
+	rtbody = /<tbody/i,
5649
+	rhtml = /<|&#?\w+;/,
5650
+	rnoInnerhtml = /<(?:script|style)/i,
5651
+	rnocache = /<(?:script|object|embed|option|style)/i,
5652
+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"),
5653
+	// checked="checked" or checked
5654
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
5655
+	rscriptType = /\/(java|ecma)script/i,
5656
+	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
5657
+	wrapMap = {
5658
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
5659
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
5660
+		thead: [ 1, "<table>", "</table>" ],
5661
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
5662
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
5663
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
5664
+		area: [ 1, "<map>", "</map>" ],
5665
+		_default: [ 0, "", "" ]
5666
+	},
5667
+	safeFragment = createSafeFragment( document );
5668
+
5669
+wrapMap.optgroup = wrapMap.option;
5670
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
5671
+wrapMap.th = wrapMap.td;
5672
+
5673
+// IE can't serialize <link> and <script> tags normally
5674
+if ( !jQuery.support.htmlSerialize ) {
5675
+	wrapMap._default = [ 1, "div<div>", "</div>" ];
5676
+}
5677
+
5678
+jQuery.fn.extend({
5679
+	text: function( text ) {
5680
+		if ( jQuery.isFunction(text) ) {
5681
+			return this.each(function(i) {
5682
+				var self = jQuery( this );
5683
+
5684
+				self.text( text.call(this, i, self.text()) );
5685
+			});
5686
+		}
5687
+
5688
+		if ( typeof text !== "object" && text !== undefined ) {
5689
+			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
5690
+		}
5691
+
5692
+		return jQuery.text( this );
5693
+	},
5694
+
5695
+	wrapAll: function( html ) {
5696
+		if ( jQuery.isFunction( html ) ) {
5697
+			return this.each(function(i) {
5698
+				jQuery(this).wrapAll( html.call(this, i) );
5699
+			});
5700
+		}
5701
+
5702
+		if ( this[0] ) {
5703
+			// The elements to wrap the target around
5704
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
5705
+
5706
+			if ( this[0].parentNode ) {
5707
+				wrap.insertBefore( this[0] );
5708
+			}
5709
+
5710
+			wrap.map(function() {
5711
+				var elem = this;
5712
+
5713
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
5714
+					elem = elem.firstChild;
5715
+				}
5716
+
5717
+				return elem;
5718
+			}).append( this );
5719
+		}
5720
+
5721
+		return this;
5722
+	},
5723
+
5724
+	wrapInner: function( html ) {
5725
+		if ( jQuery.isFunction( html ) ) {
5726
+			return this.each(function(i) {
5727
+				jQuery(this).wrapInner( html.call(this, i) );
5728
+			});
5729
+		}
5730
+
5731
+		return this.each(function() {
5732
+			var self = jQuery( this ),
5733
+				contents = self.contents();
5734
+
5735
+			if ( contents.length ) {
5736
+				contents.wrapAll( html );
5737
+
5738
+			} else {
5739
+				self.append( html );
5740
+			}
5741
+		});
5742
+	},
5743
+
5744
+	wrap: function( html ) {
5745
+		var isFunction = jQuery.isFunction( html );
5746
+
5747
+		return this.each(function(i) {
5748
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
5749
+		});
5750
+	},
5751
+
5752
+	unwrap: function() {
5753
+		return this.parent().each(function() {
5754
+			if ( !jQuery.nodeName( this, "body" ) ) {
5755
+				jQuery( this ).replaceWith( this.childNodes );
5756
+			}
5757
+		}).end();
5758
+	},
5759
+
5760
+	append: function() {
5761
+		return this.domManip(arguments, true, function( elem ) {
5762
+			if ( this.nodeType === 1 ) {
5763
+				this.appendChild( elem );
5764
+			}
5765
+		});
5766
+	},
5767
+
5768
+	prepend: function() {
5769
+		return this.domManip(arguments, true, function( elem ) {
5770
+			if ( this.nodeType === 1 ) {
5771
+				this.insertBefore( elem, this.firstChild );
5772
+			}
5773
+		});
5774
+	},
5775
+
5776
+	before: function() {
5777
+		if ( this[0] && this[0].parentNode ) {
5778
+			return this.domManip(arguments, false, function( elem ) {
5779
+				this.parentNode.insertBefore( elem, this );
5780
+			});
5781
+		} else if ( arguments.length ) {
5782
+			var set = jQuery.clean( arguments );
5783
+			set.push.apply( set, this.toArray() );
5784
+			return this.pushStack( set, "before", arguments );
5785
+		}
5786
+	},
5787
+
5788
+	after: function() {
5789
+		if ( this[0] && this[0].parentNode ) {
5790
+			return this.domManip(arguments, false, function( elem ) {
5791
+				this.parentNode.insertBefore( elem, this.nextSibling );
5792
+			});
5793
+		} else if ( arguments.length ) {
5794
+			var set = this.pushStack( this, "after", arguments );
5795
+			set.push.apply( set, jQuery.clean(arguments) );
5796
+			return set;
5797
+		}
5798
+	},
5799
+
5800
+	// keepData is for internal use only--do not document
5801
+	remove: function( selector, keepData ) {
5802
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
5803
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
5804
+				if ( !keepData && elem.nodeType === 1 ) {
5805
+					jQuery.cleanData( elem.getElementsByTagName("*") );
5806
+					jQuery.cleanData( [ elem ] );
5807
+				}
5808
+
5809
+				if ( elem.parentNode ) {
5810
+					elem.parentNode.removeChild( elem );
5811
+				}
5812
+			}
5813
+		}
5814
+
5815
+		return this;
5816
+	},
5817
+
5818
+	empty: function() {
5819
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
5820
+			// Remove element nodes and prevent memory leaks
5821
+			if ( elem.nodeType === 1 ) {
5822
+				jQuery.cleanData( elem.getElementsByTagName("*") );
5823
+			}
5824
+
5825
+			// Remove any remaining nodes
5826
+			while ( elem.firstChild ) {
5827
+				elem.removeChild( elem.firstChild );
5828
+			}
5829
+		}
5830
+
5831
+		return this;
5832
+	},
5833
+
5834
+	clone: function( dataAndEvents, deepDataAndEvents ) {
5835
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
5836
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
5837
+
5838
+		return this.map( function () {
5839
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
5840
+		});
5841
+	},
5842
+
5843
+	html: function( value ) {
5844
+		if ( value === undefined ) {
5845
+			return this[0] && this[0].nodeType === 1 ?
5846
+				this[0].innerHTML.replace(rinlinejQuery, "") :
5847
+				null;
5848
+
5849
+		// See if we can take a shortcut and just use innerHTML
5850
+		} else if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
5851
+			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
5852
+			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
5853
+
5854
+			value = value.replace(rxhtmlTag, "<$1></$2>");
5855
+
5856
+			try {
5857
+				for ( var i = 0, l = this.length; i < l; i++ ) {
5858
+					// Remove element nodes and prevent memory leaks
5859
+					if ( this[i].nodeType === 1 ) {
5860
+						jQuery.cleanData( this[i].getElementsByTagName("*") );
5861
+						this[i].innerHTML = value;
5862
+					}
5863
+				}
5864
+
5865
+			// If using innerHTML throws an exception, use the fallback method
5866
+			} catch(e) {
5867
+				this.empty().append( value );
5868
+			}
5869
+
5870
+		} else if ( jQuery.isFunction( value ) ) {
5871
+			this.each(function(i){
5872
+				var self = jQuery( this );
5873
+
5874
+				self.html( value.call(this, i, self.html()) );
5875
+			});
5876
+
5877
+		} else {
5878
+			this.empty().append( value );
5879
+		}
5880
+
5881
+		return this;
5882
+	},
5883
+
5884
+	replaceWith: function( value ) {
5885
+		if ( this[0] && this[0].parentNode ) {
5886
+			// Make sure that the elements are removed from the DOM before they are inserted
5887
+			// this can help fix replacing a parent with child elements
5888
+			if ( jQuery.isFunction( value ) ) {
5889
+				return this.each(function(i) {
5890
+					var self = jQuery(this), old = self.html();
5891
+					self.replaceWith( value.call( this, i, old ) );
5892
+				});
5893
+			}
5894
+
5895
+			if ( typeof value !== "string" ) {
5896
+				value = jQuery( value ).detach();
5897
+			}
5898
+
5899
+			return this.each(function() {
5900
+				var next = this.nextSibling,
5901
+					parent = this.parentNode;
5902
+
5903
+				jQuery( this ).remove();
5904
+
5905
+				if ( next ) {
5906
+					jQuery(next).before( value );
5907
+				} else {
5908
+					jQuery(parent).append( value );
5909
+				}
5910
+			});
5911
+		} else {
5912
+			return this.length ?
5913
+				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
5914
+				this;
5915
+		}
5916
+	},
5917
+
5918
+	detach: function( selector ) {
5919
+		return this.remove( selector, true );
5920
+	},
5921
+
5922
+	domManip: function( args, table, callback ) {
5923
+		var results, first, fragment, parent,
5924
+			value = args[0],
5925
+			scripts = [];
5926
+
5927
+		// We can't cloneNode fragments that contain checked, in WebKit
5928
+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
5929
+			return this.each(function() {
5930
+				jQuery(this).domManip( args, table, callback, true );
5931
+			});
5932
+		}
5933
+
5934
+		if ( jQuery.isFunction(value) ) {
5935
+			return this.each(function(i) {
5936
+				var self = jQuery(this);
5937
+				args[0] = value.call(this, i, table ? self.html() : undefined);
5938
+				self.domManip( args, table, callback );
5939
+			});
5940
+		}
5941
+
5942
+		if ( this[0] ) {
5943
+			parent = value && value.parentNode;
5944
+
5945
+			// If we're in a fragment, just use that instead of building a new one
5946
+			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
5947
+				results = { fragment: parent };
5948
+
5949
+			} else {
5950
+				results = jQuery.buildFragment( args, this, scripts );
5951
+			}
5952
+
5953
+			fragment = results.fragment;
5954
+
5955
+			if ( fragment.childNodes.length === 1 ) {
5956
+				first = fragment = fragment.firstChild;
5957
+			} else {
5958
+				first = fragment.firstChild;
5959
+			}
5960
+
5961
+			if ( first ) {
5962
+				table = table && jQuery.nodeName( first, "tr" );
5963
+
5964
+				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
5965
+					callback.call(
5966
+						table ?
5967
+							root(this[i], first) :
5968
+							this[i],
5969
+						// Make sure that we do not leak memory by inadvertently discarding
5970
+						// the original fragment (which might have attached data) instead of
5971
+						// using it; in addition, use the original fragment object for the last
5972
+						// item instead of first because it can end up being emptied incorrectly
5973
+						// in certain situations (Bug #8070).
5974
+						// Fragments from the fragment cache must always be cloned and never used
5975
+						// in place.
5976
+						results.cacheable || ( l > 1 && i < lastIndex ) ?
5977
+							jQuery.clone( fragment, true, true ) :
5978
+							fragment
5979
+					);
5980
+				}
5981
+			}
5982
+
5983
+			if ( scripts.length ) {
5984
+				jQuery.each( scripts, evalScript );
5985
+			}
5986
+		}
5987
+
5988
+		return this;
5989
+	}
5990
+});
5991
+
5992
+function root( elem, cur ) {
5993
+	return jQuery.nodeName(elem, "table") ?
5994
+		(elem.getElementsByTagName("tbody")[0] ||
5995
+		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
5996
+		elem;
5997
+}
5998
+
5999
+function cloneCopyEvent( src, dest ) {
6000
+
6001
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
6002
+		return;
6003
+	}
6004
+
6005
+	var type, i, l,
6006
+		oldData = jQuery._data( src ),
6007
+		curData = jQuery._data( dest, oldData ),
6008
+		events = oldData.events;
6009
+
6010
+	if ( events ) {
6011
+		delete curData.handle;
6012
+		curData.events = {};
6013
+
6014
+		for ( type in events ) {
6015
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
6016
+				jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
6017
+			}
6018
+		}
6019
+	}
6020
+
6021
+	// make the cloned public data object a copy from the original
6022
+	if ( curData.data ) {
6023
+		curData.data = jQuery.extend( {}, curData.data );
6024
+	}
6025
+}
6026
+
6027
+function cloneFixAttributes( src, dest ) {
6028
+	var nodeName;
6029
+
6030
+	// We do not need to do anything for non-Elements
6031
+	if ( dest.nodeType !== 1 ) {
6032
+		return;
6033
+	}
6034
+
6035
+	// clearAttributes removes the attributes, which we don't want,
6036
+	// but also removes the attachEvent events, which we *do* want
6037
+	if ( dest.clearAttributes ) {
6038
+		dest.clearAttributes();
6039
+	}
6040
+
6041
+	// mergeAttributes, in contrast, only merges back on the
6042
+	// original attributes, not the events
6043
+	if ( dest.mergeAttributes ) {
6044
+		dest.mergeAttributes( src );
6045
+	}
6046
+
6047
+	nodeName = dest.nodeName.toLowerCase();
6048
+
6049
+	// IE6-8 fail to clone children inside object elements that use
6050
+	// the proprietary classid attribute value (rather than the type
6051
+	// attribute) to identify the type of content to display
6052
+	if ( nodeName === "object" ) {
6053
+		dest.outerHTML = src.outerHTML;
6054
+
6055
+	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
6056
+		// IE6-8 fails to persist the checked state of a cloned checkbox
6057
+		// or radio button. Worse, IE6-7 fail to give the cloned element
6058
+		// a checked appearance if the defaultChecked value isn't also set
6059
+		if ( src.checked ) {
6060
+			dest.defaultChecked = dest.checked = src.checked;
6061
+		}
6062
+
6063
+		// IE6-7 get confused and end up setting the value of a cloned
6064
+		// checkbox/radio button to an empty string instead of "on"
6065
+		if ( dest.value !== src.value ) {
6066
+			dest.value = src.value;
6067
+		}
6068
+
6069
+	// IE6-8 fails to return the selected option to the default selected
6070
+	// state when cloning options
6071
+	} else if ( nodeName === "option" ) {
6072
+		dest.selected = src.defaultSelected;
6073
+
6074
+	// IE6-8 fails to set the defaultValue to the correct value when
6075
+	// cloning other types of input fields
6076
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
6077
+		dest.defaultValue = src.defaultValue;
6078
+	}
6079
+
6080
+	// Event data gets referenced instead of copied if the expando
6081
+	// gets copied too
6082
+	dest.removeAttribute( jQuery.expando );
6083
+}
6084
+
6085
+jQuery.buildFragment = function( args, nodes, scripts ) {
6086
+	var fragment, cacheable, cacheresults, doc,
6087
+	first = args[ 0 ];
6088
+
6089
+	// nodes may contain either an explicit document object,
6090
+	// a jQuery collection or context object.
6091
+	// If nodes[0] contains a valid object to assign to doc
6092
+	if ( nodes && nodes[0] ) {
6093
+		doc = nodes[0].ownerDocument || nodes[0];
6094
+	}
6095
+
6096
+	// Ensure that an attr object doesn't incorrectly stand in as a document object
6097
+	// Chrome and Firefox seem to allow this to occur and will throw exception
6098
+	// Fixes #8950
6099
+	if ( !doc.createDocumentFragment ) {
6100
+		doc = document;
6101
+	}
6102
+
6103
+	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
6104
+	// Cloning options loses the selected state, so don't cache them
6105
+	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
6106
+	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
6107
+	// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
6108
+	if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
6109
+		first.charAt(0) === "<" && !rnocache.test( first ) &&
6110
+		(jQuery.support.checkClone || !rchecked.test( first )) &&
6111
+		(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
6112
+
6113
+		cacheable = true;
6114
+
6115
+		cacheresults = jQuery.fragments[ first ];
6116
+		if ( cacheresults && cacheresults !== 1 ) {
6117
+			fragment = cacheresults;
6118
+		}
6119
+	}
6120
+
6121
+	if ( !fragment ) {
6122
+		fragment = doc.createDocumentFragment();
6123
+		jQuery.clean( args, doc, fragment, scripts );
6124
+	}
6125
+
6126
+	if ( cacheable ) {
6127
+		jQuery.fragments[ first ] = cacheresults ? fragment : 1;
6128
+	}
6129
+
6130
+	return { fragment: fragment, cacheable: cacheable };
6131
+};
6132
+
6133
+jQuery.fragments = {};
6134
+
6135
+jQuery.each({
6136
+	appendTo: "append",
6137
+	prependTo: "prepend",
6138
+	insertBefore: "before",
6139
+	insertAfter: "after",
6140
+	replaceAll: "replaceWith"
6141
+}, function( name, original ) {
6142
+	jQuery.fn[ name ] = function( selector ) {
6143
+		var ret = [],
6144
+			insert = jQuery( selector ),
6145
+			parent = this.length === 1 && this[0].parentNode;
6146
+
6147
+		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
6148
+			insert[ original ]( this[0] );
6149
+			return this;
6150
+
6151
+		} else {
6152
+			for ( var i = 0, l = insert.length; i < l; i++ ) {
6153
+				var elems = ( i > 0 ? this.clone(true) : this ).get();
6154
+				jQuery( insert[i] )[ original ]( elems );
6155
+				ret = ret.concat( elems );
6156
+			}
6157
+
6158
+			return this.pushStack( ret, name, insert.selector );
6159
+		}
6160
+	};
6161
+});
6162
+
6163
+function getAll( elem ) {
6164
+	if ( typeof elem.getElementsByTagName !== "undefined" ) {
6165
+		return elem.getElementsByTagName( "*" );
6166
+
6167
+	} else if ( typeof elem.querySelectorAll !== "undefined" ) {
6168
+		return elem.querySelectorAll( "*" );
6169
+
6170
+	} else {
6171
+		return [];
6172
+	}
6173
+}
6174
+
6175
+// Used in clean, fixes the defaultChecked property
6176
+function fixDefaultChecked( elem ) {
6177
+	if ( elem.type === "checkbox" || elem.type === "radio" ) {
6178
+		elem.defaultChecked = elem.checked;
6179
+	}
6180
+}
6181
+// Finds all inputs and passes them to fixDefaultChecked
6182
+function findInputs( elem ) {
6183
+	var nodeName = ( elem.nodeName || "" ).toLowerCase();
6184
+	if ( nodeName === "input" ) {
6185
+		fixDefaultChecked( elem );
6186
+	// Skip scripts, get other children
6187
+	} else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
6188
+		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
6189
+	}
6190
+}
6191
+
6192
+// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
6193
+function shimCloneNode( elem ) {
6194
+	var div = document.createElement( "div" );
6195
+	safeFragment.appendChild( div );
6196
+
6197
+	div.innerHTML = elem.outerHTML;
6198
+	return div.firstChild;
6199
+}
6200
+
6201
+jQuery.extend({
6202
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
6203
+		var srcElements,
6204
+			destElements,
6205
+			i,
6206
+			// IE<=8 does not properly clone detached, unknown element nodes
6207
+			clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ?
6208
+				elem.cloneNode( true ) :
6209
+				shimCloneNode( elem );
6210
+
6211
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
6212
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
6213
+			// IE copies events bound via attachEvent when using cloneNode.
6214
+			// Calling detachEvent on the clone will also remove the events
6215
+			// from the original. In order to get around this, we use some
6216
+			// proprietary methods to clear the events. Thanks to MooTools
6217
+			// guys for this hotness.
6218
+
6219
+			cloneFixAttributes( elem, clone );
6220
+
6221
+			// Using Sizzle here is crazy slow, so we use getElementsByTagName instead
6222
+			srcElements = getAll( elem );
6223
+			destElements = getAll( clone );
6224
+
6225
+			// Weird iteration because IE will replace the length property
6226
+			// with an element if you are cloning the body and one of the
6227
+			// elements on the page has a name or id of "length"
6228
+			for ( i = 0; srcElements[i]; ++i ) {
6229
+				// Ensure that the destination node is not null; Fixes #9587
6230
+				if ( destElements[i] ) {
6231
+					cloneFixAttributes( srcElements[i], destElements[i] );
6232
+				}
6233
+			}
6234
+		}
6235
+
6236
+		// Copy the events from the original to the clone
6237
+		if ( dataAndEvents ) {
6238
+			cloneCopyEvent( elem, clone );
6239
+
6240
+			if ( deepDataAndEvents ) {
6241
+				srcElements = getAll( elem );
6242
+				destElements = getAll( clone );
6243
+
6244
+				for ( i = 0; srcElements[i]; ++i ) {
6245
+					cloneCopyEvent( srcElements[i], destElements[i] );
6246
+				}
6247
+			}
6248
+		}
6249
+
6250
+		srcElements = destElements = null;
6251
+
6252
+		// Return the cloned set
6253
+		return clone;
6254
+	},
6255
+
6256
+	clean: function( elems, context, fragment, scripts ) {
6257
+		var checkScriptType;
6258
+
6259
+		context = context || document;
6260
+
6261
+		// !context.createElement fails in IE with an error but returns typeof 'object'
6262
+		if ( typeof context.createElement === "undefined" ) {
6263
+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
6264
+		}
6265
+
6266
+		var ret = [], j;
6267
+
6268
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
6269
+			if ( typeof elem === "number" ) {
6270
+				elem += "";
6271
+			}
6272
+
6273
+			if ( !elem ) {
6274
+				continue;
6275
+			}
6276
+
6277
+			// Convert html string into DOM nodes
6278
+			if ( typeof elem === "string" ) {
6279
+				if ( !rhtml.test( elem ) ) {
6280
+					elem = context.createTextNode( elem );
6281
+				} else {
6282
+					// Fix "XHTML"-style tags in all browsers
6283
+					elem = elem.replace(rxhtmlTag, "<$1></$2>");
6284
+
6285
+					// Trim whitespace, otherwise indexOf won't work as expected
6286
+					var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
6287
+						wrap = wrapMap[ tag ] || wrapMap._default,
6288
+						depth = wrap[0],
6289
+						div = context.createElement("div");
6290
+
6291
+					// Append wrapper element to unknown element safe doc fragment
6292
+					if ( context === document ) {
6293
+						// Use the fragment we've already created for this document
6294
+						safeFragment.appendChild( div );
6295
+					} else {
6296
+						// Use a fragment created with the owner document
6297
+						createSafeFragment( context ).appendChild( div );
6298
+					}
6299
+
6300
+					// Go to html and back, then peel off extra wrappers
6301
+					div.innerHTML = wrap[1] + elem + wrap[2];
6302
+
6303
+					// Move to the right depth
6304
+					while ( depth-- ) {
6305
+						div = div.lastChild;
6306
+					}
6307
+
6308
+					// Remove IE's autoinserted <tbody> from table fragments
6309
+					if ( !jQuery.support.tbody ) {
6310
+
6311
+						// String was a <table>, *may* have spurious <tbody>
6312
+						var hasBody = rtbody.test(elem),
6313
+							tbody = tag === "table" && !hasBody ?
6314
+								div.firstChild && div.firstChild.childNodes :
6315
+
6316
+								// String was a bare <thead> or <tfoot>
6317
+								wrap[1] === "<table>" && !hasBody ?
6318
+									div.childNodes :
6319
+									[];
6320
+
6321
+						for ( j = tbody.length - 1; j >= 0 ; --j ) {
6322
+							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
6323
+								tbody[ j ].parentNode.removeChild( tbody[ j ] );
6324
+							}
6325
+						}
6326
+					}
6327
+
6328
+					// IE completely kills leading whitespace when innerHTML is used
6329
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
6330
+						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
6331
+					}
6332
+
6333
+					elem = div.childNodes;
6334
+				}
6335
+			}
6336
+
6337
+			// Resets defaultChecked for any radios and checkboxes
6338
+			// about to be appended to the DOM in IE 6/7 (#8060)
6339
+			var len;
6340
+			if ( !jQuery.support.appendChecked ) {
6341
+				if ( elem[0] && typeof (len = elem.length) === "number" ) {
6342
+					for ( j = 0; j < len; j++ ) {
6343
+						findInputs( elem[j] );
6344
+					}
6345
+				} else {
6346
+					findInputs( elem );
6347
+				}
6348
+			}
6349
+
6350
+			if ( elem.nodeType ) {
6351
+				ret.push( elem );
6352
+			} else {
6353
+				ret = jQuery.merge( ret, elem );
6354
+			}
6355
+		}
6356
+
6357
+		if ( fragment ) {
6358
+			checkScriptType = function( elem ) {
6359
+				return !elem.type || rscriptType.test( elem.type );
6360
+			};
6361
+			for ( i = 0; ret[i]; i++ ) {
6362
+				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
6363
+					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
6364
+
6365
+				} else {
6366
+					if ( ret[i].nodeType === 1 ) {
6367
+						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
6368
+
6369
+						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
6370
+					}
6371
+					fragment.appendChild( ret[i] );
6372
+				}
6373
+			}
6374
+		}
6375
+
6376
+		return ret;
6377
+	},
6378
+
6379
+	cleanData: function( elems ) {
6380
+		var data, id,
6381
+			cache = jQuery.cache,
6382
+			special = jQuery.event.special,
6383
+			deleteExpando = jQuery.support.deleteExpando;
6384
+
6385
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
6386
+			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
6387
+				continue;
6388
+			}
6389
+
6390
+			id = elem[ jQuery.expando ];
6391
+
6392
+			if ( id ) {
6393
+				data = cache[ id ];
6394
+
6395
+				if ( data && data.events ) {
6396
+					for ( var type in data.events ) {
6397
+						if ( special[ type ] ) {
6398
+							jQuery.event.remove( elem, type );
6399
+
6400
+						// This is a shortcut to avoid jQuery.event.remove's overhead
6401
+						} else {
6402
+							jQuery.removeEvent( elem, type, data.handle );
6403
+						}
6404
+					}
6405
+
6406
+					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
6407
+					if ( data.handle ) {
6408
+						data.handle.elem = null;
6409
+					}
6410
+				}
6411
+
6412
+				if ( deleteExpando ) {
6413
+					delete elem[ jQuery.expando ];
6414
+
6415
+				} else if ( elem.removeAttribute ) {
6416
+					elem.removeAttribute( jQuery.expando );
6417
+				}
6418
+
6419
+				delete cache[ id ];
6420
+			}
6421
+		}
6422
+	}
6423
+});
6424
+
6425
+function evalScript( i, elem ) {
6426
+	if ( elem.src ) {
6427
+		jQuery.ajax({
6428
+			url: elem.src,
6429
+			async: false,
6430
+			dataType: "script"
6431
+		});
6432
+	} else {
6433
+		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
6434
+	}
6435
+
6436
+	if ( elem.parentNode ) {
6437
+		elem.parentNode.removeChild( elem );
6438
+	}
6439
+}
6440
+
6441
+
6442
+
6443
+
6444
+var ralpha = /alpha\([^)]*\)/i,
6445
+	ropacity = /opacity=([^)]*)/,
6446
+	// fixed for IE9, see #8346
6447
+	rupper = /([A-Z]|^ms)/g,
6448
+	rnumpx = /^-?\d+(?:px)?$/i,
6449
+	rnum = /^-?\d/,
6450
+	rrelNum = /^([\-+])=([\-+.\de]+)/,
6451
+
6452
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
6453
+	cssWidth = [ "Left", "Right" ],
6454
+	cssHeight = [ "Top", "Bottom" ],
6455
+	curCSS,
6456
+
6457
+	getComputedStyle,
6458
+	currentStyle;
6459
+
6460
+jQuery.fn.css = function( name, value ) {
6461
+	// Setting 'undefined' is a no-op
6462
+	if ( arguments.length === 2 && value === undefined ) {
6463
+		return this;
6464
+	}
6465
+
6466
+	return jQuery.access( this, name, value, true, function( elem, name, value ) {
6467
+		return value !== undefined ?
6468
+			jQuery.style( elem, name, value ) :
6469
+			jQuery.css( elem, name );
6470
+	});
6471
+};
6472
+
6473
+jQuery.extend({
6474
+	// Add in style property hooks for overriding the default
6475
+	// behavior of getting and setting a style property
6476
+	cssHooks: {
6477
+		opacity: {
6478
+			get: function( elem, computed ) {
6479
+				if ( computed ) {
6480
+					// We should always get a number back from opacity
6481
+					var ret = curCSS( elem, "opacity", "opacity" );
6482
+					return ret === "" ? "1" : ret;
6483
+
6484
+				} else {
6485
+					return elem.style.opacity;
6486
+				}
6487
+			}
6488
+		}
6489
+	},
6490
+
6491
+	// Exclude the following css properties to add px
6492
+	cssNumber: {
6493
+		"fillOpacity": true,
6494
+		"fontWeight": true,
6495
+		"lineHeight": true,
6496
+		"opacity": true,
6497
+		"orphans": true,
6498
+		"widows": true,
6499
+		"zIndex": true,
6500
+		"zoom": true
6501
+	},
6502
+
6503
+	// Add in properties whose names you wish to fix before
6504
+	// setting or getting the value
6505
+	cssProps: {
6506
+		// normalize float css property
6507
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
6508
+	},
6509
+
6510
+	// Get and set the style property on a DOM Node
6511
+	style: function( elem, name, value, extra ) {
6512
+		// Don't set styles on text and comment nodes
6513
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
6514
+			return;
6515
+		}
6516
+
6517
+		// Make sure that we're working with the right name
6518
+		var ret, type, origName = jQuery.camelCase( name ),
6519
+			style = elem.style, hooks = jQuery.cssHooks[ origName ];
6520
+
6521
+		name = jQuery.cssProps[ origName ] || origName;
6522
+
6523
+		// Check if we're setting a value
6524
+		if ( value !== undefined ) {
6525
+			type = typeof value;
6526
+
6527
+			// convert relative number strings (+= or -=) to relative numbers. #7345
6528
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
6529
+				value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
6530
+				// Fixes bug #9237
6531
+				type = "number";
6532
+			}
6533
+
6534
+			// Make sure that NaN and null values aren't set. See: #7116
6535
+			if ( value == null || type === "number" && isNaN( value ) ) {
6536
+				return;
6537
+			}
6538
+
6539
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
6540
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
6541
+				value += "px";
6542
+			}
6543
+
6544
+			// If a hook was provided, use that value, otherwise just set the specified value
6545
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
6546
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
6547
+				// Fixes bug #5509
6548
+				try {
6549
+					style[ name ] = value;
6550
+				} catch(e) {}
6551
+			}
6552
+
6553
+		} else {
6554
+			// If a hook was provided get the non-computed value from there
6555
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
6556
+				return ret;
6557
+			}
6558
+
6559
+			// Otherwise just get the value from the style object
6560
+			return style[ name ];
6561
+		}
6562
+	},
6563
+
6564
+	css: function( elem, name, extra ) {
6565
+		var ret, hooks;
6566
+
6567
+		// Make sure that we're working with the right name
6568
+		name = jQuery.camelCase( name );
6569
+		hooks = jQuery.cssHooks[ name ];
6570
+		name = jQuery.cssProps[ name ] || name;
6571
+
6572
+		// cssFloat needs a special treatment
6573
+		if ( name === "cssFloat" ) {
6574
+			name = "float";
6575
+		}
6576
+
6577
+		// If a hook was provided get the computed value from there
6578
+		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
6579
+			return ret;
6580
+
6581
+		// Otherwise, if a way to get the computed value exists, use that
6582
+		} else if ( curCSS ) {
6583
+			return curCSS( elem, name );
6584
+		}
6585
+	},
6586
+
6587
+	// A method for quickly swapping in/out CSS properties to get correct calculations
6588
+	swap: function( elem, options, callback ) {
6589
+		var old = {};
6590
+
6591
+		// Remember the old values, and insert the new ones
6592
+		for ( var name in options ) {
6593
+			old[ name ] = elem.style[ name ];
6594
+			elem.style[ name ] = options[ name ];
6595
+		}
6596
+
6597
+		callback.call( elem );
6598
+
6599
+		// Revert the old values
6600
+		for ( name in options ) {
6601
+			elem.style[ name ] = old[ name ];
6602
+		}
6603
+	}
6604
+});
6605
+
6606
+// DEPRECATED, Use jQuery.css() instead
6607
+jQuery.curCSS = jQuery.css;
6608
+
6609
+jQuery.each(["height", "width"], function( i, name ) {
6610
+	jQuery.cssHooks[ name ] = {
6611
+		get: function( elem, computed, extra ) {
6612
+			var val;
6613
+
6614
+			if ( computed ) {
6615
+				if ( elem.offsetWidth !== 0 ) {
6616
+					return getWH( elem, name, extra );
6617
+				} else {
6618
+					jQuery.swap( elem, cssShow, function() {
6619
+						val = getWH( elem, name, extra );
6620
+					});
6621
+				}
6622
+
6623
+				return val;
6624
+			}
6625
+		},
6626
+
6627
+		set: function( elem, value ) {
6628
+			if ( rnumpx.test( value ) ) {
6629
+				// ignore negative width and height values #1599
6630
+				value = parseFloat( value );
6631
+
6632
+				if ( value >= 0 ) {
6633
+					return value + "px";
6634
+				}
6635
+
6636
+			} else {
6637
+				return value;
6638
+			}
6639
+		}
6640
+	};
6641
+});
6642
+
6643
+if ( !jQuery.support.opacity ) {
6644
+	jQuery.cssHooks.opacity = {
6645
+		get: function( elem, computed ) {
6646
+			// IE uses filters for opacity
6647
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
6648
+				( parseFloat( RegExp.$1 ) / 100 ) + "" :
6649
+				computed ? "1" : "";
6650
+		},
6651
+
6652
+		set: function( elem, value ) {
6653
+			var style = elem.style,
6654
+				currentStyle = elem.currentStyle,
6655
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
6656
+				filter = currentStyle && currentStyle.filter || style.filter || "";
6657
+
6658
+			// IE has trouble with opacity if it does not have layout
6659
+			// Force it by setting the zoom level
6660
+			style.zoom = 1;
6661
+
6662
+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
6663
+			if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
6664
+
6665
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
6666
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
6667
+				// style.removeAttribute is IE Only, but so apparently is this code path...
6668
+				style.removeAttribute( "filter" );
6669
+
6670
+				// if there there is no filter style applied in a css rule, we are done
6671
+				if ( currentStyle && !currentStyle.filter ) {
6672
+					return;
6673
+				}
6674
+			}
6675
+
6676
+			// otherwise, set new filter values
6677
+			style.filter = ralpha.test( filter ) ?
6678
+				filter.replace( ralpha, opacity ) :
6679
+				filter + " " + opacity;
6680
+		}
6681
+	};
6682
+}
6683
+
6684
+jQuery(function() {
6685
+	// This hook cannot be added until DOM ready because the support test
6686
+	// for it is not run until after DOM ready
6687
+	if ( !jQuery.support.reliableMarginRight ) {
6688
+		jQuery.cssHooks.marginRight = {
6689
+			get: function( elem, computed ) {
6690
+				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
6691
+				// Work around by temporarily setting element display to inline-block
6692
+				var ret;
6693
+				jQuery.swap( elem, { "display": "inline-block" }, function() {
6694
+					if ( computed ) {
6695
+						ret = curCSS( elem, "margin-right", "marginRight" );
6696
+					} else {
6697
+						ret = elem.style.marginRight;
6698
+					}
6699
+				});
6700
+				return ret;
6701
+			}
6702
+		};
6703
+	}
6704
+});
6705
+
6706
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
6707
+	getComputedStyle = function( elem, name ) {
6708
+		var ret, defaultView, computedStyle;
6709
+
6710
+		name = name.replace( rupper, "-$1" ).toLowerCase();
6711
+
6712
+		if ( (defaultView = elem.ownerDocument.defaultView) &&
6713
+				(computedStyle = defaultView.getComputedStyle( elem, null )) ) {
6714
+			ret = computedStyle.getPropertyValue( name );
6715
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
6716
+				ret = jQuery.style( elem, name );
6717
+			}
6718
+		}
6719
+
6720
+		return ret;
6721
+	};
6722
+}
6723
+
6724
+if ( document.documentElement.currentStyle ) {
6725
+	currentStyle = function( elem, name ) {
6726
+		var left, rsLeft, uncomputed,
6727
+			ret = elem.currentStyle && elem.currentStyle[ name ],
6728
+			style = elem.style;
6729
+
6730
+		// Avoid setting ret to empty string here
6731
+		// so we don't default to auto
6732
+		if ( ret === null && style && (uncomputed = style[ name ]) ) {
6733
+			ret = uncomputed;
6734
+		}
6735
+
6736
+		// From the awesome hack by Dean Edwards
6737
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
6738
+
6739
+		// If we're not dealing with a regular pixel number
6740
+		// but a number that has a weird ending, we need to convert it to pixels
6741
+		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
6742
+
6743
+			// Remember the original values
6744
+			left = style.left;
6745
+			rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
6746
+
6747
+			// Put in the new values to get a computed value out
6748
+			if ( rsLeft ) {
6749
+				elem.runtimeStyle.left = elem.currentStyle.left;
6750
+			}
6751
+			style.left = name === "fontSize" ? "1em" : ( ret || 0 );
6752
+			ret = style.pixelLeft + "px";
6753
+
6754
+			// Revert the changed values
6755
+			style.left = left;
6756
+			if ( rsLeft ) {
6757
+				elem.runtimeStyle.left = rsLeft;
6758
+			}
6759
+		}
6760
+
6761
+		return ret === "" ? "auto" : ret;
6762
+	};
6763
+}
6764
+
6765
+curCSS = getComputedStyle || currentStyle;
6766
+
6767
+function getWH( elem, name, extra ) {
6768
+
6769
+	// Start with offset property
6770
+	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
6771
+		which = name === "width" ? cssWidth : cssHeight,
6772
+		i = 0,
6773
+		len = which.length;
6774
+
6775
+	if ( val > 0 ) {
6776
+		if ( extra !== "border" ) {
6777
+			for ( ; i < len; i++ ) {
6778
+				if ( !extra ) {
6779
+					val -= parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
6780
+				}
6781
+				if ( extra === "margin" ) {
6782
+					val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
6783
+				} else {
6784
+					val -= parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
6785
+				}
6786
+			}
6787
+		}
6788
+
6789
+		return val + "px";
6790
+	}
6791
+
6792
+	// Fall back to computed then uncomputed css if necessary
6793
+	val = curCSS( elem, name, name );
6794
+	if ( val < 0 || val == null ) {
6795
+		val = elem.style[ name ] || 0;
6796
+	}
6797
+	// Normalize "", auto, and prepare for extra
6798
+	val = parseFloat( val ) || 0;
6799
+
6800
+	// Add padding, border, margin
6801
+	if ( extra ) {
6802
+		for ( ; i < len; i++ ) {
6803
+			val += parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
6804
+			if ( extra !== "padding" ) {
6805
+				val += parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
6806
+			}
6807
+			if ( extra === "margin" ) {
6808
+				val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
6809
+			}
6810
+		}
6811
+	}
6812
+
6813
+	return val + "px";
6814
+}
6815
+
6816
+if ( jQuery.expr && jQuery.expr.filters ) {
6817
+	jQuery.expr.filters.hidden = function( elem ) {
6818
+		var width = elem.offsetWidth,
6819
+			height = elem.offsetHeight;
6820
+
6821
+		return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
6822
+	};
6823
+
6824
+	jQuery.expr.filters.visible = function( elem ) {
6825
+		return !jQuery.expr.filters.hidden( elem );
6826
+	};
6827
+}
6828
+
6829
+
6830
+
6831
+
6832
+var r20 = /%20/g,
6833
+	rbracket = /\[\]$/,
6834
+	rCRLF = /\r?\n/g,
6835
+	rhash = /#.*$/,
6836
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
6837
+	rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
6838
+	// #7653, #8125, #8152: local protocol detection
6839
+	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
6840
+	rnoContent = /^(?:GET|HEAD)$/,
6841
+	rprotocol = /^\/\//,
6842
+	rquery = /\?/,
6843
+	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
6844
+	rselectTextarea = /^(?:select|textarea)/i,
6845
+	rspacesAjax = /\s+/,
6846
+	rts = /([?&])_=[^&]*/,
6847
+	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
6848
+
6849
+	// Keep a copy of the old load method
6850
+	_load = jQuery.fn.load,
6851
+
6852
+	/* Prefilters
6853
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
6854
+	 * 2) These are called:
6855
+	 *    - BEFORE asking for a transport
6856
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
6857
+	 * 3) key is the dataType
6858
+	 * 4) the catchall symbol "*" can be used
6859
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
6860
+	 */
6861
+	prefilters = {},
6862
+
6863
+	/* Transports bindings
6864
+	 * 1) key is the dataType
6865
+	 * 2) the catchall symbol "*" can be used
6866
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
6867
+	 */
6868
+	transports = {},
6869
+
6870
+	// Document location
6871
+	ajaxLocation,
6872
+
6873
+	// Document location segments
6874
+	ajaxLocParts,
6875
+
6876
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
6877
+	allTypes = ["*/"] + ["*"];
6878
+
6879
+// #8138, IE may throw an exception when accessing
6880
+// a field from window.location if document.domain has been set
6881
+try {
6882
+	ajaxLocation = location.href;
6883
+} catch( e ) {
6884
+	// Use the href attribute of an A element
6885
+	// since IE will modify it given document.location
6886
+	ajaxLocation = document.createElement( "a" );
6887
+	ajaxLocation.href = "";
6888
+	ajaxLocation = ajaxLocation.href;
6889
+}
6890
+
6891
+// Segment location into parts
6892
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
6893
+
6894
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
6895
+function addToPrefiltersOrTransports( structure ) {
6896
+
6897
+	// dataTypeExpression is optional and defaults to "*"
6898
+	return function( dataTypeExpression, func ) {
6899
+
6900
+		if ( typeof dataTypeExpression !== "string" ) {
6901
+			func = dataTypeExpression;
6902
+			dataTypeExpression = "*";
6903
+		}
6904
+
6905
+		if ( jQuery.isFunction( func ) ) {
6906
+			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
6907
+				i = 0,
6908
+				length = dataTypes.length,
6909
+				dataType,
6910
+				list,
6911
+				placeBefore;
6912
+
6913
+			// For each dataType in the dataTypeExpression
6914
+			for ( ; i < length; i++ ) {
6915
+				dataType = dataTypes[ i ];
6916
+				// We control if we're asked to add before
6917
+				// any existing element
6918
+				placeBefore = /^\+/.test( dataType );
6919
+				if ( placeBefore ) {
6920
+					dataType = dataType.substr( 1 ) || "*";
6921
+				}
6922
+				list = structure[ dataType ] = structure[ dataType ] || [];
6923
+				// then we add to the structure accordingly
6924
+				list[ placeBefore ? "unshift" : "push" ]( func );
6925
+			}
6926
+		}
6927
+	};
6928
+}
6929
+
6930
+// Base inspection function for prefilters and transports
6931
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
6932
+		dataType /* internal */, inspected /* internal */ ) {
6933
+
6934
+	dataType = dataType || options.dataTypes[ 0 ];
6935
+	inspected = inspected || {};
6936
+
6937
+	inspected[ dataType ] = true;
6938
+
6939
+	var list = structure[ dataType ],
6940
+		i = 0,
6941
+		length = list ? list.length : 0,
6942
+		executeOnly = ( structure === prefilters ),
6943
+		selection;
6944
+
6945
+	for ( ; i < length && ( executeOnly || !selection ); i++ ) {
6946
+		selection = list[ i ]( options, originalOptions, jqXHR );
6947
+		// If we got redirected to another dataType
6948
+		// we try there if executing only and not done already
6949
+		if ( typeof selection === "string" ) {
6950
+			if ( !executeOnly || inspected[ selection ] ) {
6951
+				selection = undefined;
6952
+			} else {
6953
+				options.dataTypes.unshift( selection );
6954
+				selection = inspectPrefiltersOrTransports(
6955
+						structure, options, originalOptions, jqXHR, selection, inspected );
6956
+			}
6957
+		}
6958
+	}
6959
+	// If we're only executing or nothing was selected
6960
+	// we try the catchall dataType if not done already
6961
+	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
6962
+		selection = inspectPrefiltersOrTransports(
6963
+				structure, options, originalOptions, jqXHR, "*", inspected );
6964
+	}
6965
+	// unnecessary when only executing (prefilters)
6966
+	// but it'll be ignored by the caller in that case
6967
+	return selection;
6968
+}
6969
+
6970
+// A special extend for ajax options
6971
+// that takes "flat" options (not to be deep extended)
6972
+// Fixes #9887
6973
+function ajaxExtend( target, src ) {
6974
+	var key, deep,
6975
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
6976
+	for ( key in src ) {
6977
+		if ( src[ key ] !== undefined ) {
6978
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
6979
+		}
6980
+	}
6981
+	if ( deep ) {
6982
+		jQuery.extend( true, target, deep );
6983
+	}
6984
+}
6985
+
6986
+jQuery.fn.extend({
6987
+	load: function( url, params, callback ) {
6988
+		if ( typeof url !== "string" && _load ) {
6989
+			return _load.apply( this, arguments );
6990
+
6991
+		// Don't do a request if no elements are being requested
6992
+		} else if ( !this.length ) {
6993
+			return this;
6994
+		}
6995
+
6996
+		var off = url.indexOf( " " );
6997
+		if ( off >= 0 ) {
6998
+			var selector = url.slice( off, url.length );
6999
+			url = url.slice( 0, off );
7000
+		}
7001
+
7002
+		// Default to a GET request
7003
+		var type = "GET";
7004
+
7005
+		// If the second parameter was provided
7006
+		if ( params ) {
7007
+			// If it's a function
7008
+			if ( jQuery.isFunction( params ) ) {
7009
+				// We assume that it's the callback
7010
+				callback = params;
7011
+				params = undefined;
7012
+
7013
+			// Otherwise, build a param string
7014
+			} else if ( typeof params === "object" ) {
7015
+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
7016
+				type = "POST";
7017
+			}
7018
+		}
7019
+
7020
+		var self = this;
7021
+
7022
+		// Request the remote document
7023
+		jQuery.ajax({
7024
+			url: url,
7025
+			type: type,
7026
+			dataType: "html",
7027
+			data: params,
7028
+			// Complete callback (responseText is used internally)
7029
+			complete: function( jqXHR, status, responseText ) {
7030
+				// Store the response as specified by the jqXHR object
7031
+				responseText = jqXHR.responseText;
7032
+				// If successful, inject the HTML into all the matched elements
7033
+				if ( jqXHR.isResolved() ) {
7034
+					// #4825: Get the actual response in case
7035
+					// a dataFilter is present in ajaxSettings
7036
+					jqXHR.done(function( r ) {
7037
+						responseText = r;
7038
+					});
7039
+					// See if a selector was specified
7040
+					self.html( selector ?
7041
+						// Create a dummy div to hold the results
7042
+						jQuery("<div>")
7043
+							// inject the contents of the document in, removing the scripts
7044
+							// to avoid any 'Permission Denied' errors in IE
7045
+							.append(responseText.replace(rscript, ""))
7046
+
7047
+							// Locate the specified elements
7048
+							.find(selector) :
7049
+
7050
+						// If not, just inject the full result
7051
+						responseText );
7052
+				}
7053
+
7054
+				if ( callback ) {
7055
+					self.each( callback, [ responseText, status, jqXHR ] );
7056
+				}
7057
+			}
7058
+		});
7059
+
7060
+		return this;
7061
+	},
7062
+
7063
+	serialize: function() {
7064
+		return jQuery.param( this.serializeArray() );
7065
+	},
7066
+
7067
+	serializeArray: function() {
7068
+		return this.map(function(){
7069
+			return this.elements ? jQuery.makeArray( this.elements ) : this;
7070
+		})
7071
+		.filter(function(){
7072
+			return this.name && !this.disabled &&
7073
+				( this.checked || rselectTextarea.test( this.nodeName ) ||
7074
+					rinput.test( this.type ) );
7075
+		})
7076
+		.map(function( i, elem ){
7077
+			var val = jQuery( this ).val();
7078
+
7079
+			return val == null ?
7080
+				null :
7081
+				jQuery.isArray( val ) ?
7082
+					jQuery.map( val, function( val, i ){
7083
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
7084
+					}) :
7085
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
7086
+		}).get();
7087
+	}
7088
+});
7089
+
7090
+// Attach a bunch of functions for handling common AJAX events
7091
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
7092
+	jQuery.fn[ o ] = function( f ){
7093
+		return this.on( o, f );
7094
+	};
7095
+});
7096
+
7097
+jQuery.each( [ "get", "post" ], function( i, method ) {
7098
+	jQuery[ method ] = function( url, data, callback, type ) {
7099
+		// shift arguments if data argument was omitted
7100
+		if ( jQuery.isFunction( data ) ) {
7101
+			type = type || callback;
7102
+			callback = data;
7103
+			data = undefined;
7104
+		}
7105
+
7106
+		return jQuery.ajax({
7107
+			type: method,
7108
+			url: url,
7109
+			data: data,
7110
+			success: callback,
7111
+			dataType: type
7112
+		});
7113
+	};
7114
+});
7115
+
7116
+jQuery.extend({
7117
+
7118
+	getScript: function( url, callback ) {
7119
+		return jQuery.get( url, undefined, callback, "script" );
7120
+	},
7121
+
7122
+	getJSON: function( url, data, callback ) {
7123
+		return jQuery.get( url, data, callback, "json" );
7124
+	},
7125
+
7126
+	// Creates a full fledged settings object into target
7127
+	// with both ajaxSettings and settings fields.
7128
+	// If target is omitted, writes into ajaxSettings.
7129
+	ajaxSetup: function( target, settings ) {
7130
+		if ( settings ) {
7131
+			// Building a settings object
7132
+			ajaxExtend( target, jQuery.ajaxSettings );
7133
+		} else {
7134
+			// Extending ajaxSettings
7135
+			settings = target;
7136
+			target = jQuery.ajaxSettings;
7137
+		}
7138
+		ajaxExtend( target, settings );
7139
+		return target;
7140
+	},
7141
+
7142
+	ajaxSettings: {
7143
+		url: ajaxLocation,
7144
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
7145
+		global: true,
7146
+		type: "GET",
7147
+		contentType: "application/x-www-form-urlencoded",
7148
+		processData: true,
7149
+		async: true,
7150
+		/*
7151
+		timeout: 0,
7152
+		data: null,
7153
+		dataType: null,
7154
+		username: null,
7155
+		password: null,
7156
+		cache: null,
7157
+		traditional: false,
7158
+		headers: {},
7159
+		*/
7160
+
7161
+		accepts: {
7162
+			xml: "application/xml, text/xml",
7163
+			html: "text/html",
7164
+			text: "text/plain",
7165
+			json: "application/json, text/javascript",
7166
+			"*": allTypes
7167
+		},
7168
+
7169
+		contents: {
7170
+			xml: /xml/,
7171
+			html: /html/,
7172
+			json: /json/
7173
+		},
7174
+
7175
+		responseFields: {
7176
+			xml: "responseXML",
7177
+			text: "responseText"
7178
+		},
7179
+
7180
+		// List of data converters
7181
+		// 1) key format is "source_type destination_type" (a single space in-between)
7182
+		// 2) the catchall symbol "*" can be used for source_type
7183
+		converters: {
7184
+
7185
+			// Convert anything to text
7186
+			"* text": window.String,
7187
+
7188
+			// Text to html (true = no transformation)
7189
+			"text html": true,
7190
+
7191
+			// Evaluate text as a json expression
7192
+			"text json": jQuery.parseJSON,
7193
+
7194
+			// Parse text as xml
7195
+			"text xml": jQuery.parseXML
7196
+		},
7197
+
7198
+		// For options that shouldn't be deep extended:
7199
+		// you can add your own custom options here if
7200
+		// and when you create one that shouldn't be
7201
+		// deep extended (see ajaxExtend)
7202
+		flatOptions: {
7203
+			context: true,
7204
+			url: true
7205
+		}
7206
+	},
7207
+
7208
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
7209
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
7210
+
7211
+	// Main method
7212
+	ajax: function( url, options ) {
7213
+
7214
+		// If url is an object, simulate pre-1.5 signature
7215
+		if ( typeof url === "object" ) {
7216
+			options = url;
7217
+			url = undefined;
7218
+		}
7219
+
7220
+		// Force options to be an object
7221
+		options = options || {};
7222
+
7223
+		var // Create the final options object
7224
+			s = jQuery.ajaxSetup( {}, options ),
7225
+			// Callbacks context
7226
+			callbackContext = s.context || s,
7227
+			// Context for global events
7228
+			// It's the callbackContext if one was provided in the options
7229
+			// and if it's a DOM node or a jQuery collection
7230
+			globalEventContext = callbackContext !== s &&
7231
+				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
7232
+						jQuery( callbackContext ) : jQuery.event,
7233
+			// Deferreds
7234
+			deferred = jQuery.Deferred(),
7235
+			completeDeferred = jQuery.Callbacks( "once memory" ),
7236
+			// Status-dependent callbacks
7237
+			statusCode = s.statusCode || {},
7238
+			// ifModified key
7239
+			ifModifiedKey,
7240
+			// Headers (they are sent all at once)
7241
+			requestHeaders = {},
7242
+			requestHeadersNames = {},
7243
+			// Response headers
7244
+			responseHeadersString,
7245
+			responseHeaders,
7246
+			// transport
7247
+			transport,
7248
+			// timeout handle
7249
+			timeoutTimer,
7250
+			// Cross-domain detection vars
7251
+			parts,
7252
+			// The jqXHR state
7253
+			state = 0,
7254
+			// To know if global events are to be dispatched
7255
+			fireGlobals,
7256
+			// Loop variable
7257
+			i,
7258
+			// Fake xhr
7259
+			jqXHR = {
7260
+
7261
+				readyState: 0,
7262
+
7263
+				// Caches the header
7264
+				setRequestHeader: function( name, value ) {
7265
+					if ( !state ) {
7266
+						var lname = name.toLowerCase();
7267
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
7268
+						requestHeaders[ name ] = value;
7269
+					}
7270
+					return this;
7271
+				},
7272
+
7273
+				// Raw string
7274
+				getAllResponseHeaders: function() {
7275
+					return state === 2 ? responseHeadersString : null;
7276
+				},
7277
+
7278
+				// Builds headers hashtable if needed
7279
+				getResponseHeader: function( key ) {
7280
+					var match;
7281
+					if ( state === 2 ) {
7282
+						if ( !responseHeaders ) {
7283
+							responseHeaders = {};
7284
+							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
7285
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
7286
+							}
7287
+						}
7288
+						match = responseHeaders[ key.toLowerCase() ];
7289
+					}
7290
+					return match === undefined ? null : match;
7291
+				},
7292
+
7293
+				// Overrides response content-type header
7294
+				overrideMimeType: function( type ) {
7295
+					if ( !state ) {
7296
+						s.mimeType = type;
7297
+					}
7298
+					return this;
7299
+				},
7300
+
7301
+				// Cancel the request
7302
+				abort: function( statusText ) {
7303
+					statusText = statusText || "abort";
7304
+					if ( transport ) {
7305
+						transport.abort( statusText );
7306
+					}
7307
+					done( 0, statusText );
7308
+					return this;
7309
+				}
7310
+			};
7311
+
7312
+		// Callback for when everything is done
7313
+		// It is defined here because jslint complains if it is declared
7314
+		// at the end of the function (which would be more logical and readable)
7315
+		function done( status, nativeStatusText, responses, headers ) {
7316
+
7317
+			// Called once
7318
+			if ( state === 2 ) {
7319
+				return;
7320
+			}
7321
+
7322
+			// State is "done" now
7323
+			state = 2;
7324
+
7325
+			// Clear timeout if it exists
7326
+			if ( timeoutTimer ) {
7327
+				clearTimeout( timeoutTimer );
7328
+			}
7329
+
7330
+			// Dereference transport for early garbage collection
7331
+			// (no matter how long the jqXHR object will be used)
7332
+			transport = undefined;
7333
+
7334
+			// Cache response headers
7335
+			responseHeadersString = headers || "";
7336
+
7337
+			// Set readyState
7338
+			jqXHR.readyState = status > 0 ? 4 : 0;
7339
+
7340
+			var isSuccess,
7341
+				success,
7342
+				error,
7343
+				statusText = nativeStatusText,
7344
+				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
7345
+				lastModified,
7346
+				etag;
7347
+
7348
+			// If successful, handle type chaining
7349
+			if ( status >= 200 && status < 300 || status === 304 ) {
7350
+
7351
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
7352
+				if ( s.ifModified ) {
7353
+
7354
+					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
7355
+						jQuery.lastModified[ ifModifiedKey ] = lastModified;
7356
+					}
7357
+					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
7358
+						jQuery.etag[ ifModifiedKey ] = etag;
7359
+					}
7360
+				}
7361
+
7362
+				// If not modified
7363
+				if ( status === 304 ) {
7364
+
7365
+					statusText = "notmodified";
7366
+					isSuccess = true;
7367
+
7368
+				// If we have data
7369
+				} else {
7370
+
7371
+					try {
7372
+						success = ajaxConvert( s, response );
7373
+						statusText = "success";
7374
+						isSuccess = true;
7375
+					} catch(e) {
7376
+						// We have a parsererror
7377
+						statusText = "parsererror";
7378
+						error = e;
7379
+					}
7380
+				}
7381
+			} else {
7382
+				// We extract error from statusText
7383
+				// then normalize statusText and status for non-aborts
7384
+				error = statusText;
7385
+				if ( !statusText || status ) {
7386
+					statusText = "error";
7387
+					if ( status < 0 ) {
7388
+						status = 0;
7389
+					}
7390
+				}
7391
+			}
7392
+
7393
+			// Set data for the fake xhr object
7394
+			jqXHR.status = status;
7395
+			jqXHR.statusText = "" + ( nativeStatusText || statusText );
7396
+
7397
+			// Success/Error
7398
+			if ( isSuccess ) {
7399
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
7400
+			} else {
7401
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
7402
+			}
7403
+
7404
+			// Status-dependent callbacks
7405
+			jqXHR.statusCode( statusCode );
7406
+			statusCode = undefined;
7407
+
7408
+			if ( fireGlobals ) {
7409
+				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
7410
+						[ jqXHR, s, isSuccess ? success : error ] );
7411
+			}
7412
+
7413
+			// Complete
7414
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
7415
+
7416
+			if ( fireGlobals ) {
7417
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
7418
+				// Handle the global AJAX counter
7419
+				if ( !( --jQuery.active ) ) {
7420
+					jQuery.event.trigger( "ajaxStop" );
7421
+				}
7422
+			}
7423
+		}
7424
+
7425
+		// Attach deferreds
7426
+		deferred.promise( jqXHR );
7427
+		jqXHR.success = jqXHR.done;
7428
+		jqXHR.error = jqXHR.fail;
7429
+		jqXHR.complete = completeDeferred.add;
7430
+
7431
+		// Status-dependent callbacks
7432
+		jqXHR.statusCode = function( map ) {
7433
+			if ( map ) {
7434
+				var tmp;
7435
+				if ( state < 2 ) {
7436
+					for ( tmp in map ) {
7437
+						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
7438
+					}
7439
+				} else {
7440
+					tmp = map[ jqXHR.status ];
7441
+					jqXHR.then( tmp, tmp );
7442
+				}
7443
+			}
7444
+			return this;
7445
+		};
7446
+
7447
+		// Remove hash character (#7531: and string promotion)
7448
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
7449
+		// We also use the url parameter if available
7450
+		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
7451
+
7452
+		// Extract dataTypes list
7453
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
7454
+
7455
+		// Determine if a cross-domain request is in order
7456
+		if ( s.crossDomain == null ) {
7457
+			parts = rurl.exec( s.url.toLowerCase() );
7458
+			s.crossDomain = !!( parts &&
7459
+				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
7460
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
7461
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
7462
+			);
7463
+		}
7464
+
7465
+		// Convert data if not already a string
7466
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
7467
+			s.data = jQuery.param( s.data, s.traditional );
7468
+		}
7469
+
7470
+		// Apply prefilters
7471
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
7472
+
7473
+		// If request was aborted inside a prefiler, stop there
7474
+		if ( state === 2 ) {
7475
+			return false;
7476
+		}
7477
+
7478
+		// We can fire global events as of now if asked to
7479
+		fireGlobals = s.global;
7480
+
7481
+		// Uppercase the type
7482
+		s.type = s.type.toUpperCase();
7483
+
7484
+		// Determine if request has content
7485
+		s.hasContent = !rnoContent.test( s.type );
7486
+
7487
+		// Watch for a new set of requests
7488
+		if ( fireGlobals && jQuery.active++ === 0 ) {
7489
+			jQuery.event.trigger( "ajaxStart" );
7490
+		}
7491
+
7492
+		// More options handling for requests with no content
7493
+		if ( !s.hasContent ) {
7494
+
7495
+			// If data is available, append data to url
7496
+			if ( s.data ) {
7497
+				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
7498
+				// #9682: remove data so that it's not used in an eventual retry
7499
+				delete s.data;
7500
+			}
7501
+
7502
+			// Get ifModifiedKey before adding the anti-cache parameter
7503
+			ifModifiedKey = s.url;
7504
+
7505
+			// Add anti-cache in url if needed
7506
+			if ( s.cache === false ) {
7507
+
7508
+				var ts = jQuery.now(),
7509
+					// try replacing _= if it is there
7510
+					ret = s.url.replace( rts, "$1_=" + ts );
7511
+
7512
+				// if nothing was replaced, add timestamp to the end
7513
+				s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
7514
+			}
7515
+		}
7516
+
7517
+		// Set the correct header, if data is being sent
7518
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
7519
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
7520
+		}
7521
+
7522
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
7523
+		if ( s.ifModified ) {
7524
+			ifModifiedKey = ifModifiedKey || s.url;
7525
+			if ( jQuery.lastModified[ ifModifiedKey ] ) {
7526
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
7527
+			}
7528
+			if ( jQuery.etag[ ifModifiedKey ] ) {
7529
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
7530
+			}
7531
+		}
7532
+
7533
+		// Set the Accepts header for the server, depending on the dataType
7534
+		jqXHR.setRequestHeader(
7535
+			"Accept",
7536
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
7537
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
7538
+				s.accepts[ "*" ]
7539
+		);
7540
+
7541
+		// Check for headers option
7542
+		for ( i in s.headers ) {
7543
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
7544
+		}
7545
+
7546
+		// Allow custom headers/mimetypes and early abort
7547
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
7548
+				// Abort if not done already
7549
+				jqXHR.abort();
7550
+				return false;
7551
+
7552
+		}
7553
+
7554
+		// Install callbacks on deferreds
7555
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
7556
+			jqXHR[ i ]( s[ i ] );
7557
+		}
7558
+
7559
+		// Get transport
7560
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
7561
+
7562
+		// If no transport, we auto-abort
7563
+		if ( !transport ) {
7564
+			done( -1, "No Transport" );
7565
+		} else {
7566
+			jqXHR.readyState = 1;
7567
+			// Send global event
7568
+			if ( fireGlobals ) {
7569
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
7570
+			}
7571
+			// Timeout
7572
+			if ( s.async && s.timeout > 0 ) {
7573
+				timeoutTimer = setTimeout( function(){
7574
+					jqXHR.abort( "timeout" );
7575
+				}, s.timeout );
7576
+			}
7577
+
7578
+			try {
7579
+				state = 1;
7580
+				transport.send( requestHeaders, done );
7581
+			} catch (e) {
7582
+				// Propagate exception as error if not done
7583
+				if ( state < 2 ) {
7584
+					done( -1, e );
7585
+				// Simply rethrow otherwise
7586
+				} else {
7587
+					throw e;
7588
+				}
7589
+			}
7590
+		}
7591
+
7592
+		return jqXHR;
7593
+	},
7594
+
7595
+	// Serialize an array of form elements or a set of
7596
+	// key/values into a query string
7597
+	param: function( a, traditional ) {
7598
+		var s = [],
7599
+			add = function( key, value ) {
7600
+				// If value is a function, invoke it and return its value
7601
+				value = jQuery.isFunction( value ) ? value() : value;
7602
+				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
7603
+			};
7604
+
7605
+		// Set traditional to true for jQuery <= 1.3.2 behavior.
7606
+		if ( traditional === undefined ) {
7607
+			traditional = jQuery.ajaxSettings.traditional;
7608
+		}
7609
+
7610
+		// If an array was passed in, assume that it is an array of form elements.
7611
+		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
7612
+			// Serialize the form elements
7613
+			jQuery.each( a, function() {
7614
+				add( this.name, this.value );
7615
+			});
7616
+
7617
+		} else {
7618
+			// If traditional, encode the "old" way (the way 1.3.2 or older
7619
+			// did it), otherwise encode params recursively.
7620
+			for ( var prefix in a ) {
7621
+				buildParams( prefix, a[ prefix ], traditional, add );
7622
+			}
7623
+		}
7624
+
7625
+		// Return the resulting serialization
7626
+		return s.join( "&" ).replace( r20, "+" );
7627
+	}
7628
+});
7629
+
7630
+function buildParams( prefix, obj, traditional, add ) {
7631
+	if ( jQuery.isArray( obj ) ) {
7632
+		// Serialize array item.
7633
+		jQuery.each( obj, function( i, v ) {
7634
+			if ( traditional || rbracket.test( prefix ) ) {
7635
+				// Treat each array item as a scalar.
7636
+				add( prefix, v );
7637
+
7638
+			} else {
7639
+				// If array item is non-scalar (array or object), encode its
7640
+				// numeric index to resolve deserialization ambiguity issues.
7641
+				// Note that rack (as of 1.0.0) can't currently deserialize
7642
+				// nested arrays properly, and attempting to do so may cause
7643
+				// a server error. Possible fixes are to modify rack's
7644
+				// deserialization algorithm or to provide an option or flag
7645
+				// to force array serialization to be shallow.
7646
+				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
7647
+			}
7648
+		});
7649
+
7650
+	} else if ( !traditional && obj != null && typeof obj === "object" ) {
7651
+		// Serialize object item.
7652
+		for ( var name in obj ) {
7653
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
7654
+		}
7655
+
7656
+	} else {
7657
+		// Serialize scalar item.
7658
+		add( prefix, obj );
7659
+	}
7660
+}
7661
+
7662
+// This is still on the jQuery object... for now
7663
+// Want to move this to jQuery.ajax some day
7664
+jQuery.extend({
7665
+
7666
+	// Counter for holding the number of active queries
7667
+	active: 0,
7668
+
7669
+	// Last-Modified header cache for next request
7670
+	lastModified: {},
7671
+	etag: {}
7672
+
7673
+});
7674
+
7675
+/* Handles responses to an ajax request:
7676
+ * - sets all responseXXX fields accordingly
7677
+ * - finds the right dataType (mediates between content-type and expected dataType)
7678
+ * - returns the corresponding response
7679
+ */
7680
+function ajaxHandleResponses( s, jqXHR, responses ) {
7681
+
7682
+	var contents = s.contents,
7683
+		dataTypes = s.dataTypes,
7684
+		responseFields = s.responseFields,
7685
+		ct,
7686
+		type,
7687
+		finalDataType,
7688
+		firstDataType;
7689
+
7690
+	// Fill responseXXX fields
7691
+	for ( type in responseFields ) {
7692
+		if ( type in responses ) {
7693
+			jqXHR[ responseFields[type] ] = responses[ type ];
7694
+		}
7695
+	}
7696
+
7697
+	// Remove auto dataType and get content-type in the process
7698
+	while( dataTypes[ 0 ] === "*" ) {
7699
+		dataTypes.shift();
7700
+		if ( ct === undefined ) {
7701
+			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
7702
+		}
7703
+	}
7704
+
7705
+	// Check if we're dealing with a known content-type
7706
+	if ( ct ) {
7707
+		for ( type in contents ) {
7708
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
7709
+				dataTypes.unshift( type );
7710
+				break;
7711
+			}
7712
+		}
7713
+	}
7714
+
7715
+	// Check to see if we have a response for the expected dataType
7716
+	if ( dataTypes[ 0 ] in responses ) {
7717
+		finalDataType = dataTypes[ 0 ];
7718
+	} else {
7719
+		// Try convertible dataTypes
7720
+		for ( type in responses ) {
7721
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
7722
+				finalDataType = type;
7723
+				break;
7724
+			}
7725
+			if ( !firstDataType ) {
7726
+				firstDataType = type;
7727
+			}
7728
+		}
7729
+		// Or just use first one
7730
+		finalDataType = finalDataType || firstDataType;
7731
+	}
7732
+
7733
+	// If we found a dataType
7734
+	// We add the dataType to the list if needed
7735
+	// and return the corresponding response
7736
+	if ( finalDataType ) {
7737
+		if ( finalDataType !== dataTypes[ 0 ] ) {
7738
+			dataTypes.unshift( finalDataType );
7739
+		}
7740
+		return responses[ finalDataType ];
7741
+	}
7742
+}
7743
+
7744
+// Chain conversions given the request and the original response
7745
+function ajaxConvert( s, response ) {
7746
+
7747
+	// Apply the dataFilter if provided
7748
+	if ( s.dataFilter ) {
7749
+		response = s.dataFilter( response, s.dataType );
7750
+	}
7751
+
7752
+	var dataTypes = s.dataTypes,
7753
+		converters = {},
7754
+		i,
7755
+		key,
7756
+		length = dataTypes.length,
7757
+		tmp,
7758
+		// Current and previous dataTypes
7759
+		current = dataTypes[ 0 ],
7760
+		prev,
7761
+		// Conversion expression
7762
+		conversion,
7763
+		// Conversion function
7764
+		conv,
7765
+		// Conversion functions (transitive conversion)
7766
+		conv1,
7767
+		conv2;
7768
+
7769
+	// For each dataType in the chain
7770
+	for ( i = 1; i < length; i++ ) {
7771
+
7772
+		// Create converters map
7773
+		// with lowercased keys
7774
+		if ( i === 1 ) {
7775
+			for ( key in s.converters ) {
7776
+				if ( typeof key === "string" ) {
7777
+					converters[ key.toLowerCase() ] = s.converters[ key ];
7778
+				}
7779
+			}
7780
+		}
7781
+
7782
+		// Get the dataTypes
7783
+		prev = current;
7784
+		current = dataTypes[ i ];
7785
+
7786
+		// If current is auto dataType, update it to prev
7787
+		if ( current === "*" ) {
7788
+			current = prev;
7789
+		// If no auto and dataTypes are actually different
7790
+		} else if ( prev !== "*" && prev !== current ) {
7791
+
7792
+			// Get the converter
7793
+			conversion = prev + " " + current;
7794
+			conv = converters[ conversion ] || converters[ "* " + current ];
7795
+
7796
+			// If there is no direct converter, search transitively
7797
+			if ( !conv ) {
7798
+				conv2 = undefined;
7799
+				for ( conv1 in converters ) {
7800
+					tmp = conv1.split( " " );
7801
+					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
7802
+						conv2 = converters[ tmp[1] + " " + current ];
7803
+						if ( conv2 ) {
7804
+							conv1 = converters[ conv1 ];
7805
+							if ( conv1 === true ) {
7806
+								conv = conv2;
7807
+							} else if ( conv2 === true ) {
7808
+								conv = conv1;
7809
+							}
7810
+							break;
7811
+						}
7812
+					}
7813
+				}
7814
+			}
7815
+			// If we found no converter, dispatch an error
7816
+			if ( !( conv || conv2 ) ) {
7817
+				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
7818
+			}
7819
+			// If found converter is not an equivalence
7820
+			if ( conv !== true ) {
7821
+				// Convert with 1 or 2 converters accordingly
7822
+				response = conv ? conv( response ) : conv2( conv1(response) );
7823
+			}
7824
+		}
7825
+	}
7826
+	return response;
7827
+}
7828
+
7829
+
7830
+
7831
+
7832
+var jsc = jQuery.now(),
7833
+	jsre = /(\=)\?(&|$)|\?\?/i;
7834
+
7835
+// Default jsonp settings
7836
+jQuery.ajaxSetup({
7837
+	jsonp: "callback",
7838
+	jsonpCallback: function() {
7839
+		return jQuery.expando + "_" + ( jsc++ );
7840
+	}
7841
+});
7842
+
7843
+// Detect, normalize options and install callbacks for jsonp requests
7844
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
7845
+
7846
+	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
7847
+		( typeof s.data === "string" );
7848
+
7849
+	if ( s.dataTypes[ 0 ] === "jsonp" ||
7850
+		s.jsonp !== false && ( jsre.test( s.url ) ||
7851
+				inspectData && jsre.test( s.data ) ) ) {
7852
+
7853
+		var responseContainer,
7854
+			jsonpCallback = s.jsonpCallback =
7855
+				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
7856
+			previous = window[ jsonpCallback ],
7857
+			url = s.url,
7858
+			data = s.data,
7859
+			replace = "$1" + jsonpCallback + "$2";
7860
+
7861
+		if ( s.jsonp !== false ) {
7862
+			url = url.replace( jsre, replace );
7863
+			if ( s.url === url ) {
7864
+				if ( inspectData ) {
7865
+					data = data.replace( jsre, replace );
7866
+				}
7867
+				if ( s.data === data ) {
7868
+					// Add callback manually
7869
+					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
7870
+				}
7871
+			}
7872
+		}
7873
+
7874
+		s.url = url;
7875
+		s.data = data;
7876
+
7877
+		// Install callback
7878
+		window[ jsonpCallback ] = function( response ) {
7879
+			responseContainer = [ response ];
7880
+		};
7881
+
7882
+		// Clean-up function
7883
+		jqXHR.always(function() {
7884
+			// Set callback back to previous value
7885
+			window[ jsonpCallback ] = previous;
7886
+			// Call if it was a function and we have a response
7887
+			if ( responseContainer && jQuery.isFunction( previous ) ) {
7888
+				window[ jsonpCallback ]( responseContainer[ 0 ] );
7889
+			}
7890
+		});
7891
+
7892
+		// Use data converter to retrieve json after script execution
7893
+		s.converters["script json"] = function() {
7894
+			if ( !responseContainer ) {
7895
+				jQuery.error( jsonpCallback + " was not called" );
7896
+			}
7897
+			return responseContainer[ 0 ];
7898
+		};
7899
+
7900
+		// force json dataType
7901
+		s.dataTypes[ 0 ] = "json";
7902
+
7903
+		// Delegate to script
7904
+		return "script";
7905
+	}
7906
+});
7907
+
7908
+
7909
+
7910
+
7911
+// Install script dataType
7912
+jQuery.ajaxSetup({
7913
+	accepts: {
7914
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
7915
+	},
7916
+	contents: {
7917
+		script: /javascript|ecmascript/
7918
+	},
7919
+	converters: {
7920
+		"text script": function( text ) {
7921
+			jQuery.globalEval( text );
7922
+			return text;
7923
+		}
7924
+	}
7925
+});
7926
+
7927
+// Handle cache's special case and global
7928
+jQuery.ajaxPrefilter( "script", function( s ) {
7929
+	if ( s.cache === undefined ) {
7930
+		s.cache = false;
7931
+	}
7932
+	if ( s.crossDomain ) {
7933
+		s.type = "GET";
7934
+		s.global = false;
7935
+	}
7936
+});
7937
+
7938
+// Bind script tag hack transport
7939
+jQuery.ajaxTransport( "script", function(s) {
7940
+
7941
+	// This transport only deals with cross domain requests
7942
+	if ( s.crossDomain ) {
7943
+
7944
+		var script,
7945
+			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
7946
+
7947
+		return {
7948
+
7949
+			send: function( _, callback ) {
7950
+
7951
+				script = document.createElement( "script" );
7952
+
7953
+				script.async = "async";
7954
+
7955
+				if ( s.scriptCharset ) {
7956
+					script.charset = s.scriptCharset;
7957
+				}
7958
+
7959
+				script.src = s.url;
7960
+
7961
+				// Attach handlers for all browsers
7962
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
7963
+
7964
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
7965
+
7966
+						// Handle memory leak in IE
7967
+						script.onload = script.onreadystatechange = null;
7968
+
7969
+						// Remove the script
7970
+						if ( head && script.parentNode ) {
7971
+							head.removeChild( script );
7972
+						}
7973
+
7974
+						// Dereference the script
7975
+						script = undefined;
7976
+
7977
+						// Callback if not abort
7978
+						if ( !isAbort ) {
7979
+							callback( 200, "success" );
7980
+						}
7981
+					}
7982
+				};
7983
+				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
7984
+				// This arises when a base node is used (#2709 and #4378).
7985
+				head.insertBefore( script, head.firstChild );
7986
+			},
7987
+
7988
+			abort: function() {
7989
+				if ( script ) {
7990
+					script.onload( 0, 1 );
7991
+				}
7992
+			}
7993
+		};
7994
+	}
7995
+});
7996
+
7997
+
7998
+
7999
+
8000
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
8001
+	xhrOnUnloadAbort = window.ActiveXObject ? function() {
8002
+		// Abort all pending requests
8003
+		for ( var key in xhrCallbacks ) {
8004
+			xhrCallbacks[ key ]( 0, 1 );
8005
+		}
8006
+	} : false,
8007
+	xhrId = 0,
8008
+	xhrCallbacks;
8009
+
8010
+// Functions to create xhrs
8011
+function createStandardXHR() {
8012
+	try {
8013
+		return new window.XMLHttpRequest();
8014
+	} catch( e ) {}
8015
+}
8016
+
8017
+function createActiveXHR() {
8018
+	try {
8019
+		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
8020
+	} catch( e ) {}
8021
+}
8022
+
8023
+// Create the request object
8024
+// (This is still attached to ajaxSettings for backward compatibility)
8025
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
8026
+	/* Microsoft failed to properly
8027
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
8028
+	 * so we use the ActiveXObject when it is available
8029
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
8030
+	 * we need a fallback.
8031
+	 */
8032
+	function() {
8033
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
8034
+	} :
8035
+	// For all other browsers, use the standard XMLHttpRequest object
8036
+	createStandardXHR;
8037
+
8038
+// Determine support properties
8039
+(function( xhr ) {
8040
+	jQuery.extend( jQuery.support, {
8041
+		ajax: !!xhr,
8042
+		cors: !!xhr && ( "withCredentials" in xhr )
8043
+	});
8044
+})( jQuery.ajaxSettings.xhr() );
8045
+
8046
+// Create transport if the browser can provide an xhr
8047
+if ( jQuery.support.ajax ) {
8048
+
8049
+	jQuery.ajaxTransport(function( s ) {
8050
+		// Cross domain only allowed if supported through XMLHttpRequest
8051
+		if ( !s.crossDomain || jQuery.support.cors ) {
8052
+
8053
+			var callback;
8054
+
8055
+			return {
8056
+				send: function( headers, complete ) {
8057
+
8058
+					// Get a new xhr
8059
+					var xhr = s.xhr(),
8060
+						handle,
8061
+						i;
8062
+
8063
+					// Open the socket
8064
+					// Passing null username, generates a login popup on Opera (#2865)
8065
+					if ( s.username ) {
8066
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
8067
+					} else {
8068
+						xhr.open( s.type, s.url, s.async );
8069
+					}
8070
+
8071
+					// Apply custom fields if provided
8072
+					if ( s.xhrFields ) {
8073
+						for ( i in s.xhrFields ) {
8074
+							xhr[ i ] = s.xhrFields[ i ];
8075
+						}
8076
+					}
8077
+
8078
+					// Override mime type if needed
8079
+					if ( s.mimeType && xhr.overrideMimeType ) {
8080
+						xhr.overrideMimeType( s.mimeType );
8081
+					}
8082
+
8083
+					// X-Requested-With header
8084
+					// For cross-domain requests, seeing as conditions for a preflight are
8085
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
8086
+					// (it can always be set on a per-request basis or even using ajaxSetup)
8087
+					// For same-domain requests, won't change header if already provided.
8088
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
8089
+						headers[ "X-Requested-With" ] = "XMLHttpRequest";
8090
+					}
8091
+
8092
+					// Need an extra try/catch for cross domain requests in Firefox 3
8093
+					try {
8094
+						for ( i in headers ) {
8095
+							xhr.setRequestHeader( i, headers[ i ] );
8096
+						}
8097
+					} catch( _ ) {}
8098
+
8099
+					// Do send the request
8100
+					// This may raise an exception which is actually
8101
+					// handled in jQuery.ajax (so no try/catch here)
8102
+					xhr.send( ( s.hasContent && s.data ) || null );
8103
+
8104
+					// Listener
8105
+					callback = function( _, isAbort ) {
8106
+
8107
+						var status,
8108
+							statusText,
8109
+							responseHeaders,
8110
+							responses,
8111
+							xml;
8112
+
8113
+						// Firefox throws exceptions when accessing properties
8114
+						// of an xhr when a network error occured
8115
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
8116
+						try {
8117
+
8118
+							// Was never called and is aborted or complete
8119
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
8120
+
8121
+								// Only called once
8122
+								callback = undefined;
8123
+
8124
+								// Do not keep as active anymore
8125
+								if ( handle ) {
8126
+									xhr.onreadystatechange = jQuery.noop;
8127
+									if ( xhrOnUnloadAbort ) {
8128
+										delete xhrCallbacks[ handle ];
8129
+									}
8130
+								}
8131
+
8132
+								// If it's an abort
8133
+								if ( isAbort ) {
8134
+									// Abort it manually if needed
8135
+									if ( xhr.readyState !== 4 ) {
8136
+										xhr.abort();
8137
+									}
8138
+								} else {
8139
+									status = xhr.status;
8140
+									responseHeaders = xhr.getAllResponseHeaders();
8141
+									responses = {};
8142
+									xml = xhr.responseXML;
8143
+
8144
+									// Construct response list
8145
+									if ( xml && xml.documentElement /* #4958 */ ) {
8146
+										responses.xml = xml;
8147
+									}
8148
+									responses.text = xhr.responseText;
8149
+
8150
+									// Firefox throws an exception when accessing
8151
+									// statusText for faulty cross-domain requests
8152
+									try {
8153
+										statusText = xhr.statusText;
8154
+									} catch( e ) {
8155
+										// We normalize with Webkit giving an empty statusText
8156
+										statusText = "";
8157
+									}
8158
+
8159
+									// Filter status for non standard behaviors
8160
+
8161
+									// If the request is local and we have data: assume a success
8162
+									// (success with no data won't get notified, that's the best we
8163
+									// can do given current implementations)
8164
+									if ( !status && s.isLocal && !s.crossDomain ) {
8165
+										status = responses.text ? 200 : 404;
8166
+									// IE - #1450: sometimes returns 1223 when it should be 204
8167
+									} else if ( status === 1223 ) {
8168
+										status = 204;
8169
+									}
8170
+								}
8171
+							}
8172
+						} catch( firefoxAccessException ) {
8173
+							if ( !isAbort ) {
8174
+								complete( -1, firefoxAccessException );
8175
+							}
8176
+						}
8177
+
8178
+						// Call complete if needed
8179
+						if ( responses ) {
8180
+							complete( status, statusText, responses, responseHeaders );
8181
+						}
8182
+					};
8183
+
8184
+					// if we're in sync mode or it's in cache
8185
+					// and has been retrieved directly (IE6 & IE7)
8186
+					// we need to manually fire the callback
8187
+					if ( !s.async || xhr.readyState === 4 ) {
8188
+						callback();
8189
+					} else {
8190
+						handle = ++xhrId;
8191
+						if ( xhrOnUnloadAbort ) {
8192
+							// Create the active xhrs callbacks list if needed
8193
+							// and attach the unload handler
8194
+							if ( !xhrCallbacks ) {
8195
+								xhrCallbacks = {};
8196
+								jQuery( window ).unload( xhrOnUnloadAbort );
8197
+							}
8198
+							// Add to list of active xhrs callbacks
8199
+							xhrCallbacks[ handle ] = callback;
8200
+						}
8201
+						xhr.onreadystatechange = callback;
8202
+					}
8203
+				},
8204
+
8205
+				abort: function() {
8206
+					if ( callback ) {
8207
+						callback(0,1);
8208
+					}
8209
+				}
8210
+			};
8211
+		}
8212
+	});
8213
+}
8214
+
8215
+
8216
+
8217
+
8218
+var elemdisplay = {},
8219
+	iframe, iframeDoc,
8220
+	rfxtypes = /^(?:toggle|show|hide)$/,
8221
+	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
8222
+	timerId,
8223
+	fxAttrs = [
8224
+		// height animations
8225
+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
8226
+		// width animations
8227
+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
8228
+		// opacity animations
8229
+		[ "opacity" ]
8230
+	],
8231
+	fxNow;
8232
+
8233
+jQuery.fn.extend({
8234
+	show: function( speed, easing, callback ) {
8235
+		var elem, display;
8236
+
8237
+		if ( speed || speed === 0 ) {
8238
+			return this.animate( genFx("show", 3), speed, easing, callback );
8239
+
8240
+		} else {
8241
+			for ( var i = 0, j = this.length; i < j; i++ ) {
8242
+				elem = this[ i ];
8243
+
8244
+				if ( elem.style ) {
8245
+					display = elem.style.display;
8246
+
8247
+					// Reset the inline display of this element to learn if it is
8248
+					// being hidden by cascaded rules or not
8249
+					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
8250
+						display = elem.style.display = "";
8251
+					}
8252
+
8253
+					// Set elements which have been overridden with display: none
8254
+					// in a stylesheet to whatever the default browser style is
8255
+					// for such an element
8256
+					if ( display === "" && jQuery.css(elem, "display") === "none" ) {
8257
+						jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
8258
+					}
8259
+				}
8260
+			}
8261
+
8262
+			// Set the display of most of the elements in a second loop
8263
+			// to avoid the constant reflow
8264
+			for ( i = 0; i < j; i++ ) {
8265
+				elem = this[ i ];
8266
+
8267
+				if ( elem.style ) {
8268
+					display = elem.style.display;
8269
+
8270
+					if ( display === "" || display === "none" ) {
8271
+						elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
8272
+					}
8273
+				}
8274
+			}
8275
+
8276
+			return this;
8277
+		}
8278
+	},
8279
+
8280
+	hide: function( speed, easing, callback ) {
8281
+		if ( speed || speed === 0 ) {
8282
+			return this.animate( genFx("hide", 3), speed, easing, callback);
8283
+
8284
+		} else {
8285
+			var elem, display,
8286
+				i = 0,
8287
+				j = this.length;
8288
+
8289
+			for ( ; i < j; i++ ) {
8290
+				elem = this[i];
8291
+				if ( elem.style ) {
8292
+					display = jQuery.css( elem, "display" );
8293
+
8294
+					if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
8295
+						jQuery._data( elem, "olddisplay", display );
8296
+					}
8297
+				}
8298
+			}
8299
+
8300
+			// Set the display of the elements in a second loop
8301
+			// to avoid the constant reflow
8302
+			for ( i = 0; i < j; i++ ) {
8303
+				if ( this[i].style ) {
8304
+					this[i].style.display = "none";
8305
+				}
8306
+			}
8307
+
8308
+			return this;
8309
+		}
8310
+	},
8311
+
8312
+	// Save the old toggle function
8313
+	_toggle: jQuery.fn.toggle,
8314
+
8315
+	toggle: function( fn, fn2, callback ) {
8316
+		var bool = typeof fn === "boolean";
8317
+
8318
+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
8319
+			this._toggle.apply( this, arguments );
8320
+
8321
+		} else if ( fn == null || bool ) {
8322
+			this.each(function() {
8323
+				var state = bool ? fn : jQuery(this).is(":hidden");
8324
+				jQuery(this)[ state ? "show" : "hide" ]();
8325
+			});
8326
+
8327
+		} else {
8328
+			this.animate(genFx("toggle", 3), fn, fn2, callback);
8329
+		}
8330
+
8331
+		return this;
8332
+	},
8333
+
8334
+	fadeTo: function( speed, to, easing, callback ) {
8335
+		return this.filter(":hidden").css("opacity", 0).show().end()
8336
+					.animate({opacity: to}, speed, easing, callback);
8337
+	},
8338
+
8339
+	animate: function( prop, speed, easing, callback ) {
8340
+		var optall = jQuery.speed( speed, easing, callback );
8341
+
8342
+		if ( jQuery.isEmptyObject( prop ) ) {
8343
+			return this.each( optall.complete, [ false ] );
8344
+		}
8345
+
8346
+		// Do not change referenced properties as per-property easing will be lost
8347
+		prop = jQuery.extend( {}, prop );
8348
+
8349
+		function doAnimation() {
8350
+			// XXX 'this' does not always have a nodeName when running the
8351
+			// test suite
8352
+
8353
+			if ( optall.queue === false ) {
8354
+				jQuery._mark( this );
8355
+			}
8356
+
8357
+			var opt = jQuery.extend( {}, optall ),
8358
+				isElement = this.nodeType === 1,
8359
+				hidden = isElement && jQuery(this).is(":hidden"),
8360
+				name, val, p, e,
8361
+				parts, start, end, unit,
8362
+				method;
8363
+
8364
+			// will store per property easing and be used to determine when an animation is complete
8365
+			opt.animatedProperties = {};
8366
+
8367
+			for ( p in prop ) {
8368
+
8369
+				// property name normalization
8370
+				name = jQuery.camelCase( p );
8371
+				if ( p !== name ) {
8372
+					prop[ name ] = prop[ p ];
8373
+					delete prop[ p ];
8374
+				}
8375
+
8376
+				val = prop[ name ];
8377
+
8378
+				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
8379
+				if ( jQuery.isArray( val ) ) {
8380
+					opt.animatedProperties[ name ] = val[ 1 ];
8381
+					val = prop[ name ] = val[ 0 ];
8382
+				} else {
8383
+					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
8384
+				}
8385
+
8386
+				if ( val === "hide" && hidden || val === "show" && !hidden ) {
8387
+					return opt.complete.call( this );
8388
+				}
8389
+
8390
+				if ( isElement && ( name === "height" || name === "width" ) ) {
8391
+					// Make sure that nothing sneaks out
8392
+					// Record all 3 overflow attributes because IE does not
8393
+					// change the overflow attribute when overflowX and
8394
+					// overflowY are set to the same value
8395
+					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
8396
+
8397
+					// Set display property to inline-block for height/width
8398
+					// animations on inline elements that are having width/height animated
8399
+					if ( jQuery.css( this, "display" ) === "inline" &&
8400
+							jQuery.css( this, "float" ) === "none" ) {
8401
+
8402
+						// inline-level elements accept inline-block;
8403
+						// block-level elements need to be inline with layout
8404
+						if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
8405
+							this.style.display = "inline-block";
8406
+
8407
+						} else {
8408
+							this.style.zoom = 1;
8409
+						}
8410
+					}
8411
+				}
8412
+			}
8413
+
8414
+			if ( opt.overflow != null ) {
8415
+				this.style.overflow = "hidden";
8416
+			}
8417
+
8418
+			for ( p in prop ) {
8419
+				e = new jQuery.fx( this, opt, p );
8420
+				val = prop[ p ];
8421
+
8422
+				if ( rfxtypes.test( val ) ) {
8423
+
8424
+					// Tracks whether to show or hide based on private
8425
+					// data attached to the element
8426
+					method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
8427
+					if ( method ) {
8428
+						jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
8429
+						e[ method ]();
8430
+					} else {
8431
+						e[ val ]();
8432
+					}
8433
+
8434
+				} else {
8435
+					parts = rfxnum.exec( val );
8436
+					start = e.cur();
8437
+
8438
+					if ( parts ) {
8439
+						end = parseFloat( parts[2] );
8440
+						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
8441
+
8442
+						// We need to compute starting value
8443
+						if ( unit !== "px" ) {
8444
+							jQuery.style( this, p, (end || 1) + unit);
8445
+							start = ( (end || 1) / e.cur() ) * start;
8446
+							jQuery.style( this, p, start + unit);
8447
+						}
8448
+
8449
+						// If a +=/-= token was provided, we're doing a relative animation
8450
+						if ( parts[1] ) {
8451
+							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
8452
+						}
8453
+
8454
+						e.custom( start, end, unit );
8455
+
8456
+					} else {
8457
+						e.custom( start, val, "" );
8458
+					}
8459
+				}
8460
+			}
8461
+
8462
+			// For JS strict compliance
8463
+			return true;
8464
+		}
8465
+
8466
+		return optall.queue === false ?
8467
+			this.each( doAnimation ) :
8468
+			this.queue( optall.queue, doAnimation );
8469
+	},
8470
+
8471
+	stop: function( type, clearQueue, gotoEnd ) {
8472
+		if ( typeof type !== "string" ) {
8473
+			gotoEnd = clearQueue;
8474
+			clearQueue = type;
8475
+			type = undefined;
8476
+		}
8477
+		if ( clearQueue && type !== false ) {
8478
+			this.queue( type || "fx", [] );
8479
+		}
8480
+
8481
+		return this.each(function() {
8482
+			var index,
8483
+				hadTimers = false,
8484
+				timers = jQuery.timers,
8485
+				data = jQuery._data( this );
8486
+
8487
+			// clear marker counters if we know they won't be
8488
+			if ( !gotoEnd ) {
8489
+				jQuery._unmark( true, this );
8490
+			}
8491
+
8492
+			function stopQueue( elem, data, index ) {
8493
+				var hooks = data[ index ];
8494
+				jQuery.removeData( elem, index, true );
8495
+				hooks.stop( gotoEnd );
8496
+			}
8497
+
8498
+			if ( type == null ) {
8499
+				for ( index in data ) {
8500
+					if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
8501
+						stopQueue( this, data, index );
8502
+					}
8503
+				}
8504
+			} else if ( data[ index = type + ".run" ] && data[ index ].stop ){
8505
+				stopQueue( this, data, index );
8506
+			}
8507
+
8508
+			for ( index = timers.length; index--; ) {
8509
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
8510
+					if ( gotoEnd ) {
8511
+
8512
+						// force the next step to be the last
8513
+						timers[ index ]( true );
8514
+					} else {
8515
+						timers[ index ].saveState();
8516
+					}
8517
+					hadTimers = true;
8518
+					timers.splice( index, 1 );
8519
+				}
8520
+			}
8521
+
8522
+			// start the next in the queue if the last step wasn't forced
8523
+			// timers currently will call their complete callbacks, which will dequeue
8524
+			// but only if they were gotoEnd
8525
+			if ( !( gotoEnd && hadTimers ) ) {
8526
+				jQuery.dequeue( this, type );
8527
+			}
8528
+		});
8529
+	}
8530
+
8531
+});
8532
+
8533
+// Animations created synchronously will run synchronously
8534
+function createFxNow() {
8535
+	setTimeout( clearFxNow, 0 );
8536
+	return ( fxNow = jQuery.now() );
8537
+}
8538
+
8539
+function clearFxNow() {
8540
+	fxNow = undefined;
8541
+}
8542
+
8543
+// Generate parameters to create a standard animation
8544
+function genFx( type, num ) {
8545
+	var obj = {};
8546
+
8547
+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
8548
+		obj[ this ] = type;
8549
+	});
8550
+
8551
+	return obj;
8552
+}
8553
+
8554
+// Generate shortcuts for custom animations
8555
+jQuery.each({
8556
+	slideDown: genFx( "show", 1 ),
8557
+	slideUp: genFx( "hide", 1 ),
8558
+	slideToggle: genFx( "toggle", 1 ),
8559
+	fadeIn: { opacity: "show" },
8560
+	fadeOut: { opacity: "hide" },
8561
+	fadeToggle: { opacity: "toggle" }
8562
+}, function( name, props ) {
8563
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
8564
+		return this.animate( props, speed, easing, callback );
8565
+	};
8566
+});
8567
+
8568
+jQuery.extend({
8569
+	speed: function( speed, easing, fn ) {
8570
+		var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
8571
+			complete: fn || !fn && easing ||
8572
+				jQuery.isFunction( speed ) && speed,
8573
+			duration: speed,
8574
+			easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
8575
+		};
8576
+
8577
+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
8578
+			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
8579
+
8580
+		// normalize opt.queue - true/undefined/null -> "fx"
8581
+		if ( opt.queue == null || opt.queue === true ) {
8582
+			opt.queue = "fx";
8583
+		}
8584
+
8585
+		// Queueing
8586
+		opt.old = opt.complete;
8587
+
8588
+		opt.complete = function( noUnmark ) {
8589
+			if ( jQuery.isFunction( opt.old ) ) {
8590
+				opt.old.call( this );
8591
+			}
8592
+
8593
+			if ( opt.queue ) {
8594
+				jQuery.dequeue( this, opt.queue );
8595
+			} else if ( noUnmark !== false ) {
8596
+				jQuery._unmark( this );
8597
+			}
8598
+		};
8599
+
8600
+		return opt;
8601
+	},
8602
+
8603
+	easing: {
8604
+		linear: function( p, n, firstNum, diff ) {
8605
+			return firstNum + diff * p;
8606
+		},
8607
+		swing: function( p, n, firstNum, diff ) {
8608
+			return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum;
8609
+		}
8610
+	},
8611
+
8612
+	timers: [],
8613
+
8614
+	fx: function( elem, options, prop ) {
8615
+		this.options = options;
8616
+		this.elem = elem;
8617
+		this.prop = prop;
8618
+
8619
+		options.orig = options.orig || {};
8620
+	}
8621
+
8622
+});
8623
+
8624
+jQuery.fx.prototype = {
8625
+	// Simple function for setting a style value
8626
+	update: function() {
8627
+		if ( this.options.step ) {
8628
+			this.options.step.call( this.elem, this.now, this );
8629
+		}
8630
+
8631
+		( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
8632
+	},
8633
+
8634
+	// Get the current size
8635
+	cur: function() {
8636
+		if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
8637
+			return this.elem[ this.prop ];
8638
+		}
8639
+
8640
+		var parsed,
8641
+			r = jQuery.css( this.elem, this.prop );
8642
+		// Empty strings, null, undefined and "auto" are converted to 0,
8643
+		// complex values such as "rotate(1rad)" are returned as is,
8644
+		// simple values such as "10px" are parsed to Float.
8645
+		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
8646
+	},
8647
+
8648
+	// Start an animation from one number to another
8649
+	custom: function( from, to, unit ) {
8650
+		var self = this,
8651
+			fx = jQuery.fx;
8652
+
8653
+		this.startTime = fxNow || createFxNow();
8654
+		this.end = to;
8655
+		this.now = this.start = from;
8656
+		this.pos = this.state = 0;
8657
+		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
8658
+
8659
+		function t( gotoEnd ) {
8660
+			return self.step( gotoEnd );
8661
+		}
8662
+
8663
+		t.queue = this.options.queue;
8664
+		t.elem = this.elem;
8665
+		t.saveState = function() {
8666
+			if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
8667
+				jQuery._data( self.elem, "fxshow" + self.prop, self.start );
8668
+			}
8669
+		};
8670
+
8671
+		if ( t() && jQuery.timers.push(t) && !timerId ) {
8672
+			timerId = setInterval( fx.tick, fx.interval );
8673
+		}
8674
+	},
8675
+
8676
+	// Simple 'show' function
8677
+	show: function() {
8678
+		var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
8679
+
8680
+		// Remember where we started, so that we can go back to it later
8681
+		this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
8682
+		this.options.show = true;
8683
+
8684
+		// Begin the animation
8685
+		// Make sure that we start at a small width/height to avoid any flash of content
8686
+		if ( dataShow !== undefined ) {
8687
+			// This show is picking up where a previous hide or show left off
8688
+			this.custom( this.cur(), dataShow );
8689
+		} else {
8690
+			this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
8691
+		}
8692
+
8693
+		// Start by showing the element
8694
+		jQuery( this.elem ).show();
8695
+	},
8696
+
8697
+	// Simple 'hide' function
8698
+	hide: function() {
8699
+		// Remember where we started, so that we can go back to it later
8700
+		this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
8701
+		this.options.hide = true;
8702
+
8703
+		// Begin the animation
8704
+		this.custom( this.cur(), 0 );
8705
+	},
8706
+
8707
+	// Each step of an animation
8708
+	step: function( gotoEnd ) {
8709
+		var p, n, complete,
8710
+			t = fxNow || createFxNow(),
8711
+			done = true,
8712
+			elem = this.elem,
8713
+			options = this.options;
8714
+
8715
+		if ( gotoEnd || t >= options.duration + this.startTime ) {
8716
+			this.now = this.end;
8717
+			this.pos = this.state = 1;
8718
+			this.update();
8719
+
8720
+			options.animatedProperties[ this.prop ] = true;
8721
+
8722
+			for ( p in options.animatedProperties ) {
8723
+				if ( options.animatedProperties[ p ] !== true ) {
8724
+					done = false;
8725
+				}
8726
+			}
8727
+
8728
+			if ( done ) {
8729
+				// Reset the overflow
8730
+				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
8731
+
8732
+					jQuery.each( [ "", "X", "Y" ], function( index, value ) {
8733
+						elem.style[ "overflow" + value ] = options.overflow[ index ];
8734
+					});
8735
+				}
8736
+
8737
+				// Hide the element if the "hide" operation was done
8738
+				if ( options.hide ) {
8739
+					jQuery( elem ).hide();
8740
+				}
8741
+
8742
+				// Reset the properties, if the item has been hidden or shown
8743
+				if ( options.hide || options.show ) {
8744
+					for ( p in options.animatedProperties ) {
8745
+						jQuery.style( elem, p, options.orig[ p ] );
8746
+						jQuery.removeData( elem, "fxshow" + p, true );
8747
+						// Toggle data is no longer needed
8748
+						jQuery.removeData( elem, "toggle" + p, true );
8749
+					}
8750
+				}
8751
+
8752
+				// Execute the complete function
8753
+				// in the event that the complete function throws an exception
8754
+				// we must ensure it won't be called twice. #5684
8755
+
8756
+				complete = options.complete;
8757
+				if ( complete ) {
8758
+
8759
+					options.complete = false;
8760
+					complete.call( elem );
8761
+				}
8762
+			}
8763
+
8764
+			return false;
8765
+
8766
+		} else {
8767
+			// classical easing cannot be used with an Infinity duration
8768
+			if ( options.duration == Infinity ) {
8769
+				this.now = t;
8770
+			} else {
8771
+				n = t - this.startTime;
8772
+				this.state = n / options.duration;
8773
+
8774
+				// Perform the easing function, defaults to swing
8775
+				this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
8776
+				this.now = this.start + ( (this.end - this.start) * this.pos );
8777
+			}
8778
+			// Perform the next step of the animation
8779
+			this.update();
8780
+		}
8781
+
8782
+		return true;
8783
+	}
8784
+};
8785
+
8786
+jQuery.extend( jQuery.fx, {
8787
+	tick: function() {
8788
+		var timer,
8789
+			timers = jQuery.timers,
8790
+			i = 0;
8791
+
8792
+		for ( ; i < timers.length; i++ ) {
8793
+			timer = timers[ i ];
8794
+			// Checks the timer has not already been removed
8795
+			if ( !timer() && timers[ i ] === timer ) {
8796
+				timers.splice( i--, 1 );
8797
+			}
8798
+		}
8799
+
8800
+		if ( !timers.length ) {
8801
+			jQuery.fx.stop();
8802
+		}
8803
+	},
8804
+
8805
+	interval: 13,
8806
+
8807
+	stop: function() {
8808
+		clearInterval( timerId );
8809
+		timerId = null;
8810
+	},
8811
+
8812
+	speeds: {
8813
+		slow: 600,
8814
+		fast: 200,
8815
+		// Default speed
8816
+		_default: 400
8817
+	},
8818
+
8819
+	step: {
8820
+		opacity: function( fx ) {
8821
+			jQuery.style( fx.elem, "opacity", fx.now );
8822
+		},
8823
+
8824
+		_default: function( fx ) {
8825
+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
8826
+				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
8827
+			} else {
8828
+				fx.elem[ fx.prop ] = fx.now;
8829
+			}
8830
+		}
8831
+	}
8832
+});
8833
+
8834
+// Adds width/height step functions
8835
+// Do not set anything below 0
8836
+jQuery.each([ "width", "height" ], function( i, prop ) {
8837
+	jQuery.fx.step[ prop ] = function( fx ) {
8838
+		jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
8839
+	};
8840
+});
8841
+
8842
+if ( jQuery.expr && jQuery.expr.filters ) {
8843
+	jQuery.expr.filters.animated = function( elem ) {
8844
+		return jQuery.grep(jQuery.timers, function( fn ) {
8845
+			return elem === fn.elem;
8846
+		}).length;
8847
+	};
8848
+}
8849
+
8850
+// Try to restore the default display value of an element
8851
+function defaultDisplay( nodeName ) {
8852
+
8853
+	if ( !elemdisplay[ nodeName ] ) {
8854
+
8855
+		var body = document.body,
8856
+			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
8857
+			display = elem.css( "display" );
8858
+		elem.remove();
8859
+
8860
+		// If the simple way fails,
8861
+		// get element's real default display by attaching it to a temp iframe
8862
+		if ( display === "none" || display === "" ) {
8863
+			// No iframe to use yet, so create it
8864
+			if ( !iframe ) {
8865
+				iframe = document.createElement( "iframe" );
8866
+				iframe.frameBorder = iframe.width = iframe.height = 0;
8867
+			}
8868
+
8869
+			body.appendChild( iframe );
8870
+
8871
+			// Create a cacheable copy of the iframe document on first call.
8872
+			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
8873
+			// document to it; WebKit & Firefox won't allow reusing the iframe document.
8874
+			if ( !iframeDoc || !iframe.createElement ) {
8875
+				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
8876
+				iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
8877
+				iframeDoc.close();
8878
+			}
8879
+
8880
+			elem = iframeDoc.createElement( nodeName );
8881
+
8882
+			iframeDoc.body.appendChild( elem );
8883
+
8884
+			display = jQuery.css( elem, "display" );
8885
+			body.removeChild( iframe );
8886
+		}
8887
+
8888
+		// Store the correct default display
8889
+		elemdisplay[ nodeName ] = display;
8890
+	}
8891
+
8892
+	return elemdisplay[ nodeName ];
8893
+}
8894
+
8895
+
8896
+
8897
+
8898
+var rtable = /^t(?:able|d|h)$/i,
8899
+	rroot = /^(?:body|html)$/i;
8900
+
8901
+if ( "getBoundingClientRect" in document.documentElement ) {
8902
+	jQuery.fn.offset = function( options ) {
8903
+		var elem = this[0], box;
8904
+
8905
+		if ( options ) {
8906
+			return this.each(function( i ) {
8907
+				jQuery.offset.setOffset( this, options, i );
8908
+			});
8909
+		}
8910
+
8911
+		if ( !elem || !elem.ownerDocument ) {
8912
+			return null;
8913
+		}
8914
+
8915
+		if ( elem === elem.ownerDocument.body ) {
8916
+			return jQuery.offset.bodyOffset( elem );
8917
+		}
8918
+
8919
+		try {
8920
+			box = elem.getBoundingClientRect();
8921
+		} catch(e) {}
8922
+
8923
+		var doc = elem.ownerDocument,
8924
+			docElem = doc.documentElement;
8925
+
8926
+		// Make sure we're not dealing with a disconnected DOM node
8927
+		if ( !box || !jQuery.contains( docElem, elem ) ) {
8928
+			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
8929
+		}
8930
+
8931
+		var body = doc.body,
8932
+			win = getWindow(doc),
8933
+			clientTop  = docElem.clientTop  || body.clientTop  || 0,
8934
+			clientLeft = docElem.clientLeft || body.clientLeft || 0,
8935
+			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
8936
+			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
8937
+			top  = box.top  + scrollTop  - clientTop,
8938
+			left = box.left + scrollLeft - clientLeft;
8939
+
8940
+		return { top: top, left: left };
8941
+	};
8942
+
8943
+} else {
8944
+	jQuery.fn.offset = function( options ) {
8945
+		var elem = this[0];
8946
+
8947
+		if ( options ) {
8948
+			return this.each(function( i ) {
8949
+				jQuery.offset.setOffset( this, options, i );
8950
+			});
8951
+		}
8952
+
8953
+		if ( !elem || !elem.ownerDocument ) {
8954
+			return null;
8955
+		}
8956
+
8957
+		if ( elem === elem.ownerDocument.body ) {
8958
+			return jQuery.offset.bodyOffset( elem );
8959
+		}
8960
+
8961
+		var computedStyle,
8962
+			offsetParent = elem.offsetParent,
8963
+			prevOffsetParent = elem,
8964
+			doc = elem.ownerDocument,
8965
+			docElem = doc.documentElement,
8966
+			body = doc.body,
8967
+			defaultView = doc.defaultView,
8968
+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
8969
+			top = elem.offsetTop,
8970
+			left = elem.offsetLeft;
8971
+
8972
+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
8973
+			if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
8974
+				break;
8975
+			}
8976
+
8977
+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
8978
+			top  -= elem.scrollTop;
8979
+			left -= elem.scrollLeft;
8980
+
8981
+			if ( elem === offsetParent ) {
8982
+				top  += elem.offsetTop;
8983
+				left += elem.offsetLeft;
8984
+
8985
+				if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
8986
+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
8987
+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
8988
+				}
8989
+
8990
+				prevOffsetParent = offsetParent;
8991
+				offsetParent = elem.offsetParent;
8992
+			}
8993
+
8994
+			if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
8995
+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
8996
+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
8997
+			}
8998
+
8999
+			prevComputedStyle = computedStyle;
9000
+		}
9001
+
9002
+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
9003
+			top  += body.offsetTop;
9004
+			left += body.offsetLeft;
9005
+		}
9006
+
9007
+		if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
9008
+			top  += Math.max( docElem.scrollTop, body.scrollTop );
9009
+			left += Math.max( docElem.scrollLeft, body.scrollLeft );
9010
+		}
9011
+
9012
+		return { top: top, left: left };
9013
+	};
9014
+}
9015
+
9016
+jQuery.offset = {
9017
+
9018
+	bodyOffset: function( body ) {
9019
+		var top = body.offsetTop,
9020
+			left = body.offsetLeft;
9021
+
9022
+		if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
9023
+			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
9024
+			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
9025
+		}
9026
+
9027
+		return { top: top, left: left };
9028
+	},
9029
+
9030
+	setOffset: function( elem, options, i ) {
9031
+		var position = jQuery.css( elem, "position" );
9032
+
9033
+		// set position first, in-case top/left are set even on static elem
9034
+		if ( position === "static" ) {
9035
+			elem.style.position = "relative";
9036
+		}
9037
+
9038
+		var curElem = jQuery( elem ),
9039
+			curOffset = curElem.offset(),
9040
+			curCSSTop = jQuery.css( elem, "top" ),
9041
+			curCSSLeft = jQuery.css( elem, "left" ),
9042
+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
9043
+			props = {}, curPosition = {}, curTop, curLeft;
9044
+
9045
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
9046
+		if ( calculatePosition ) {
9047
+			curPosition = curElem.position();
9048
+			curTop = curPosition.top;
9049
+			curLeft = curPosition.left;
9050
+		} else {
9051
+			curTop = parseFloat( curCSSTop ) || 0;
9052
+			curLeft = parseFloat( curCSSLeft ) || 0;
9053
+		}
9054
+
9055
+		if ( jQuery.isFunction( options ) ) {
9056
+			options = options.call( elem, i, curOffset );
9057
+		}
9058
+
9059
+		if ( options.top != null ) {
9060
+			props.top = ( options.top - curOffset.top ) + curTop;
9061
+		}
9062
+		if ( options.left != null ) {
9063
+			props.left = ( options.left - curOffset.left ) + curLeft;
9064
+		}
9065
+
9066
+		if ( "using" in options ) {
9067
+			options.using.call( elem, props );
9068
+		} else {
9069
+			curElem.css( props );
9070
+		}
9071
+	}
9072
+};
9073
+
9074
+
9075
+jQuery.fn.extend({
9076
+
9077
+	position: function() {
9078
+		if ( !this[0] ) {
9079
+			return null;
9080
+		}
9081
+
9082
+		var elem = this[0],
9083
+
9084
+		// Get *real* offsetParent
9085
+		offsetParent = this.offsetParent(),
9086
+
9087
+		// Get correct offsets
9088
+		offset       = this.offset(),
9089
+		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
9090
+
9091
+		// Subtract element margins
9092
+		// note: when an element has margin: auto the offsetLeft and marginLeft
9093
+		// are the same in Safari causing offset.left to incorrectly be 0
9094
+		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
9095
+		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
9096
+
9097
+		// Add offsetParent borders
9098
+		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
9099
+		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
9100
+
9101
+		// Subtract the two offsets
9102
+		return {
9103
+			top:  offset.top  - parentOffset.top,
9104
+			left: offset.left - parentOffset.left
9105
+		};
9106
+	},
9107
+
9108
+	offsetParent: function() {
9109
+		return this.map(function() {
9110
+			var offsetParent = this.offsetParent || document.body;
9111
+			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
9112
+				offsetParent = offsetParent.offsetParent;
9113
+			}
9114
+			return offsetParent;
9115
+		});
9116
+	}
9117
+});
9118
+
9119
+
9120
+// Create scrollLeft and scrollTop methods
9121
+jQuery.each( ["Left", "Top"], function( i, name ) {
9122
+	var method = "scroll" + name;
9123
+
9124
+	jQuery.fn[ method ] = function( val ) {
9125
+		var elem, win;
9126
+
9127
+		if ( val === undefined ) {
9128
+			elem = this[ 0 ];
9129
+
9130
+			if ( !elem ) {
9131
+				return null;
9132
+			}
9133
+
9134
+			win = getWindow( elem );
9135
+
9136
+			// Return the scroll offset
9137
+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
9138
+				jQuery.support.boxModel && win.document.documentElement[ method ] ||
9139
+					win.document.body[ method ] :
9140
+				elem[ method ];
9141
+		}
9142
+
9143
+		// Set the scroll offset
9144
+		return this.each(function() {
9145
+			win = getWindow( this );
9146
+
9147
+			if ( win ) {
9148
+				win.scrollTo(
9149
+					!i ? val : jQuery( win ).scrollLeft(),
9150
+					 i ? val : jQuery( win ).scrollTop()
9151
+				);
9152
+
9153
+			} else {
9154
+				this[ method ] = val;
9155
+			}
9156
+		});
9157
+	};
9158
+});
9159
+
9160
+function getWindow( elem ) {
9161
+	return jQuery.isWindow( elem ) ?
9162
+		elem :
9163
+		elem.nodeType === 9 ?
9164
+			elem.defaultView || elem.parentWindow :
9165
+			false;
9166
+}
9167
+
9168
+
9169
+
9170
+
9171
+// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
9172
+jQuery.each([ "Height", "Width" ], function( i, name ) {
9173
+
9174
+	var type = name.toLowerCase();
9175
+
9176
+	// innerHeight and innerWidth
9177
+	jQuery.fn[ "inner" + name ] = function() {
9178
+		var elem = this[0];
9179
+		return elem ?
9180
+			elem.style ?
9181
+			parseFloat( jQuery.css( elem, type, "padding" ) ) :
9182
+			this[ type ]() :
9183
+			null;
9184
+	};
9185
+
9186
+	// outerHeight and outerWidth
9187
+	jQuery.fn[ "outer" + name ] = function( margin ) {
9188
+		var elem = this[0];
9189
+		return elem ?
9190
+			elem.style ?
9191
+			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
9192
+			this[ type ]() :
9193
+			null;
9194
+	};
9195
+
9196
+	jQuery.fn[ type ] = function( size ) {
9197
+		// Get window width or height
9198
+		var elem = this[0];
9199
+		if ( !elem ) {
9200
+			return size == null ? null : this;
9201
+		}
9202
+
9203
+		if ( jQuery.isFunction( size ) ) {
9204
+			return this.each(function( i ) {
9205
+				var self = jQuery( this );
9206
+				self[ type ]( size.call( this, i, self[ type ]() ) );
9207
+			});
9208
+		}
9209
+
9210
+		if ( jQuery.isWindow( elem ) ) {
9211
+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
9212
+			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
9213
+			var docElemProp = elem.document.documentElement[ "client" + name ],
9214
+				body = elem.document.body;
9215
+			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
9216
+				body && body[ "client" + name ] || docElemProp;
9217
+
9218
+		// Get document width or height
9219
+		} else if ( elem.nodeType === 9 ) {
9220
+			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
9221
+			return Math.max(
9222
+				elem.documentElement["client" + name],
9223
+				elem.body["scroll" + name], elem.documentElement["scroll" + name],
9224
+				elem.body["offset" + name], elem.documentElement["offset" + name]
9225
+			);
9226
+
9227
+		// Get or set width or height on the element
9228
+		} else if ( size === undefined ) {
9229
+			var orig = jQuery.css( elem, type ),
9230
+				ret = parseFloat( orig );
9231
+
9232
+			return jQuery.isNumeric( ret ) ? ret : orig;
9233
+
9234
+		// Set the width or height on the element (default to pixels if value is unitless)
9235
+		} else {
9236
+			return this.css( type, typeof size === "string" ? size : size + "px" );
9237
+		}
9238
+	};
9239
+
9240
+});
9241
+
9242
+
9243
+
9244
+
9245
+// Expose jQuery to the global object
9246
+window.jQuery = window.$ = jQuery;
9247
+
9248
+// Expose jQuery as an AMD module, but only for AMD loaders that
9249
+// understand the issues with loading multiple versions of jQuery
9250
+// in a page that all might call define(). The loader will indicate
9251
+// they have special allowances for multiple jQuery versions by
9252
+// specifying define.amd.jQuery = true. Register as a named module,
9253
+// since jQuery can be concatenated with other files that may use define,
9254
+// but not use a proper concatenation script that understands anonymous
9255
+// AMD modules. A named AMD is safest and most robust way to register.
9256
+// Lowercase jquery is used because AMD module names are derived from
9257
+// file names, and jQuery is normally delivered in a lowercase file name.
9258
+// Do this after creating the global so that if an AMD module wants to call
9259
+// noConflict to hide this version of jQuery, it will work.
9260
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
9261
+	define( "jquery", [], function () { return jQuery; } );
9262
+}
9263
+
9264
+
9265
+
9266
+})( window );
0 9267
\ No newline at end of file
1 9268
new file mode 100755
... ...
@@ -0,0 +1,4 @@
1
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
2
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
3
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
4
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
0 5
\ No newline at end of file
1 6
new file mode 100755
... ...
@@ -0,0 +1,4 @@
1
+/* Modernizr 2.5.3 (Custom Build) | MIT & BSD
2
+ * Build: http://www.modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
3
+ */
4
+;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a)if(j[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.substr(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function L(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(k),g.offsetWidth,e=k.value!=l,g.removeChild(k)):e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.5.3",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k=b.createElement("div"),l=b.body,m=l?l:b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),k.appendChild(j);return f=["&#173;","<style>",a,"</style>"].join(""),k.id=h,m.innerHTML+=f,m.appendChild(k),l||(m.style.background="",g.appendChild(m)),i=c(k,a),l?k.parentNode.removeChild(k):m.parentNode.removeChild(m),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e});var K=function(c,d){var f=c.join(""),g=d.length;y(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch||(j.touch&&j.touch.offsetTop)===9,e.csstransforms3d=(j.csstransforms3d&&j.csstransforms3d.offsetLeft)===9&&j.csstransforms3d.offsetHeight===3,e.generatedcontent=(j.generatedcontent&&j.generatedcontent.offsetHeight)>=1,e.fontface=/src/i.test(h)&&h.indexOf(d.split(" ")[0])===0},g,d)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",n.join("touch-enabled),("),h,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",n.join("transform-3d),("),h,")","{#csstransforms3d{left:9px;position:absolute;height:3px;}}"].join(""),['#generatedcontent:after{content:"',l,'";visibility:hidden}'].join("")],["fontface","touch","csstransforms3d","generatedcontent"]);s.flexbox=function(){return J("flexOrder")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){try{var d=b.createElement("canvas"),e;e=!(!a.WebGLRenderingContext||!d.getContext("experimental-webgl")&&!d.getContext("webgl")),d=c}catch(f){e=!1}return e},s.touch=function(){return e.touch},s.geolocation=function(){return!!navigator.geolocation},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){for(var b=-1,c=p.length;++b<c;)if(a[p[b]+"WebSocket"])return!0;return"WebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&(a=e.csstransforms3d),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){return e.fontface},s.generatedcontent=function(){return e.generatedcontent},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var M in s)C(s,M)&&(x=M.toLowerCase(),e[x]=s[M](),v.push((e[x]?"":"no-")+x));return e.input||L(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,g.className+=" "+(b?"":"no-")+a,e[a]=b}return e},D(""),i=k=null,function(a,b){function g(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function h(){var a=k.elements;return typeof a=="string"?a.split(" "):a}function i(a){var b={},c=a.createElement,e=a.createDocumentFragment,f=e();a.createElement=function(a){var e=(b[a]||(b[a]=c(a))).cloneNode();return k.shivMethods&&e.canHaveChildren&&!d.test(a)?f.appendChild(e):e},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+h().join().replace(/\w+/g,function(a){return b[a]=c(a),f.createElement(a),'c("'+a+'")'})+");return n}")(k,f)}function j(a){var b;return a.documentShived?a:(k.shivCSS&&!e&&(b=!!g(a,"article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")),f||(b=!i(a)),b&&(a.documentShived=b),a)}var c=a.html5||{},d=/^<|^(?:button|form|map|select|textarea)$/i,e,f;(function(){var a=b.createElement("a");a.innerHTML="<xyz></xyz>",e="hidden"in a,f=a.childNodes.length==1||function(){try{b.createElement("a")}catch(a){return!0}var c=b.createDocumentFragment();return typeof c.cloneNode=="undefined"||typeof c.createDocumentFragment=="undefined"||typeof c.createElement=="undefined"}()})();var k={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:j};a.html5=k,j(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return o.call(a)=="[object Function]"}function e(a){return typeof a=="string"}function f(){}function g(a){return!a||a=="loaded"||a=="complete"||a=="uninitialized"}function h(){var a=p.shift();q=1,a?a.t?m(function(){(a.t=="c"?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){a!="img"&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l={},o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};y[c]===1&&(r=1,y[c]=[],l=b.createElement(a)),a=="object"?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),a!="img"&&(r||y[c]===2?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i(b=="c"?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),p.length==1&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&o.call(a.opera)=="[object Opera]",l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return o.call(a)=="[object Array]"},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,i){var j=b(a),l=j.autoCallback;j.url.split(".").pop().split("?").shift(),j.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]||h),j.instead?j.instead(a,e,f,g,i):(y[j.url]?j.noexec=!0:y[j.url]=1,f.load(j.url,j.forceCSS||!j.forceJS&&"css"==j.url.split(".").pop().split("?").shift()?"c":c,j.noexec,j.attrs,j.timeout),(d(e)||d(l))&&f.load(function(){k(),e&&e(j.origUrl,i,g),l&&l(j.origUrl,i,g),y[j.url]=2})))}function i(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var j,l,m=this.yepnope.loader;if(e(a))g(a,0,m,0);else if(w(a))for(j=0;j<a.length;j++)l=a[j],e(l)?g(l,0,m,0):w(l)?B(l):Object(l)===l&&i(l,m);else Object(a)===a&&i(a,m)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
0 5
new file mode 100755
... ...
@@ -0,0 +1,11 @@
1
+// usage: log('inside coolFunc', this, arguments);
2
+// paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
3
+window.log = function f(){ log.history = log.history || []; log.history.push(arguments); if(this.console) { var args = arguments, newarr; args.callee = args.callee.caller; newarr = [].slice.call(args); if (typeof console.log === 'object') log.apply.call(console.log, console, newarr); else console.log.apply(console, newarr);}};
4
+
5
+// make it safe to use console.log always
6
+(function(a){function b(){}for(var c="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,time,timeEnd,trace,warn".split(","),d;!!(d=c.pop());){a[d]=a[d]||b;}})
7
+(function(){try{console.log();return window.console;}catch(a){return (window.console={});}}());
8
+
9
+
10
+// place any jQuery/helper plugins in here, instead of separate, slower script files.
11
+
0 9
new file mode 100755
... ...
@@ -0,0 +1,40 @@
1
+<!DOCTYPE HTML>
2
+<html>
3
+<head>
4
+  <title>Bootstrap Plugin Test Suite</title>
5
+
6
+  <!-- jquery -->
7
+  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
8
+
9
+  <!-- qunit -->
10
+  <link rel="stylesheet" href="vendor/qunit.css" type="text/css" media="screen" />
11
+  <script src="vendor/qunit.js"></script>
12
+
13
+  <!--  plugin sources -->
14
+  <script src="../../js/bootstrap-alerts.js"></script>
15
+  <script src="../../js/bootstrap-dropdown.js"></script>
16
+  <script src="../../js/bootstrap-modal.js"></script>
17
+  <script src="../../js/bootstrap-tabs.js"></script>
18
+  <script src="../../js/bootstrap-twipsy.js"></script>
19
+  <script src="../../js/bootstrap-popover.js"></script>
20
+  <script src="../../js/bootstrap-buttons.js"></script>
21
+
22
+  <!-- unit tests -->
23
+  <script src="unit/bootstrap-alerts.js"></script>
24
+  <script src="unit/bootstrap-dropdown.js"></script>
25
+  <script src="unit/bootstrap-modal.js"></script>
26
+  <script src="unit/bootstrap-popover.js"></script>
27
+  <script src="unit/bootstrap-tabs.js"></script>
28
+  <script src="unit/bootstrap-twipsy.js"></script>
29
+  <script src="unit/bootstrap-buttons.js"></script>
30
+
31
+<body>
32
+  <div>
33
+    <h1 id="qunit-header">Bootstrap Plugin Test Suite</h1>
34
+    <h2 id="qunit-banner"></h2>
35
+    <h2 id="qunit-userAgent"></h2>
36
+    <ol id="qunit-tests"></ol>
37
+    <div id="qunit-runoff"></div>
38
+  </div>
39
+</body>
40
+</html>
0 41
\ No newline at end of file
1 42
new file mode 100755
... ...
@@ -0,0 +1,41 @@
1
+$(function () {
2
+
3
+    module("bootstrap-alerts")
4
+
5
+      test("should be defined on jquery object", function () {
6
+        ok($(document.body).alert, 'alert method is defined')
7
+      })
8
+
9
+      test("should return element", function () {
10
+        ok($(document.body).alert()[0] == document.body, 'document.body returned')
11
+      })
12
+
13
+      test("should fade element out on clicking .close", function () {
14
+        var alertHTML = '<div class="alert-message warning fade in">'
15
+          + '<a class="close" href="#">×</a>'
16
+          + '<p><strong>Holy guacamole!</strong> Best check yo self, you’re not looking too good.</p>'
17
+          + '</div>'
18
+          , alert = $(alertHTML).alert()
19
+
20
+        alert.find('.close').click()
21
+
22
+        ok(!alert.hasClass('in'), 'remove .in class on .close click')
23
+      })
24
+
25
+      test("should remove element when clicking .close", function () {
26
+        $.support.transition = false
27
+
28
+        var alertHTML = '<div class="alert-message warning fade in">'
29
+          + '<a class="close" href="#">×</a>'
30
+          + '<p><strong>Holy guacamole!</strong> Best check yo self, you’re not looking too good.</p>'
31
+          + '</div>'
32
+          , alert = $(alertHTML).appendTo('#qunit-runoff').alert()
33
+
34
+        ok($('#qunit-runoff').find('.alert-message').length, 'element added to dom')
35
+
36
+        alert.find('.close').click()
37
+
38
+        ok(!$('#qunit-runoff').find('.alert-message').length, 'element removed from dom')
39
+      })
40
+
41
+})
0 42
\ No newline at end of file
1 43
new file mode 100755
... ...
@@ -0,0 +1,42 @@
1
+$(function () {
2
+
3
+    module("bootstrap-buttons")
4
+
5
+      test("should be defined on jquery object", function () {
6
+        ok($(document.body).button, 'tabs method is defined')
7
+      })
8
+
9
+      test("should return element", function () {
10
+        ok($(document.body).button()[0] == document.body, 'document.body returned')
11
+      })
12
+
13
+      test("should return set state to loading", function () {
14
+        var btn = $('<button class="btn" data-loading-text="fat">mdo</button>')
15
+        equals(btn.html(), 'mdo', 'btn text equals mdo')
16
+        btn.button('loading')
17
+        equals(btn.html(), 'fat', 'btn text equals fat')
18
+        ok(btn.attr('disabled'), 'btn is disabled')
19
+        ok(btn.hasClass('disabled'), 'btn has disabled class')
20
+      })
21
+
22
+      test("should return reset state", function () {
23
+        var btn = $('<button class="btn" data-loading-text="fat">mdo</button>')
24
+        equals(btn.html(), 'mdo', 'btn text equals mdo')
25
+        btn.button('loading')
26
+        equals(btn.html(), 'fat', 'btn text equals fat')
27
+        ok(btn.attr('disabled'), 'btn is disabled')
28
+        ok(btn.hasClass('disabled'), 'btn is disabled')
29
+        btn.button('reset')
30
+        equals(btn.html(), 'mdo', 'btn text equals mdo')
31
+        ok(!btn.attr('disabled'), 'btn is not disabled')
32
+        ok(!btn.hasClass('disabled'), 'btn does not have disabled class')
33
+      })
34
+
35
+      test("should toggle active", function () {
36
+        var btn = $('<button class="btn" data-loading-text="fat">mdo</button>')
37
+        ok(!btn.hasClass('active'), 'btn does not have active class')
38
+        btn.button('toggle')
39
+        ok(btn.hasClass('active'), 'btn has class active')
40
+      })
41
+
42
+})
0 43
\ No newline at end of file
1 44
new file mode 100755
... ...
@@ -0,0 +1,52 @@
1
+$(function () {
2
+
3
+    module("bootstrap-dropdowns")
4
+
5
+      test("should be defined on jquery object", function () {
6
+        ok($(document.body).dropdown, 'dropdown method is defined')
7
+      })
8
+
9
+      test("should return element", function () {
10
+        ok($(document.body).dropdown()[0] == document.body, 'document.body returned')
11
+      })
12
+
13
+      test("should add class open to menu if clicked", function () {
14
+        var dropdownHTML = '<ul class="tabs">'
15
+          + '<li class="dropdown">'
16
+          + '<a href="#" class="dropdown-toggle">Dropdown</a>'
17
+          + '<ul class="dropdown-menu">'
18
+          + '<li><a href="#">Secondary link</a></li>'
19
+          + '<li><a href="#">Something else here</a></li>'
20
+          + '<li class="divider"></li>'
21
+          + '<li><a href="#">Another link</a></li>'
22
+          + '</ul>'
23
+          + '</li>'
24
+          + '</ul>'
25
+          , dropdown = $(dropdownHTML).dropdown()
26
+
27
+        dropdown.find('.dropdown-toggle').click()
28
+        ok(dropdown.find('.dropdown').hasClass('open'), 'open class added on click')
29
+      })
30
+
31
+      test("should remove open class if body clicked", function () {
32
+        var dropdownHTML = '<ul class="tabs">'
33
+          + '<li class="dropdown">'
34
+          + '<a href="#" class="dropdown-toggle">Dropdown</a>'
35
+          + '<ul class="dropdown-menu">'
36
+          + '<li><a href="#">Secondary link</a></li>'
37
+          + '<li><a href="#">Something else here</a></li>'
38
+          + '<li class="divider"></li>'
39
+          + '<li><a href="#">Another link</a></li>'
40
+          + '</ul>'
41
+          + '</li>'
42
+          + '</ul>'
43
+          , dropdown = $(dropdownHTML).dropdown().appendTo('#qunit-runoff')
44
+
45
+        dropdown.find('.dropdown-toggle').click()
46
+        ok(dropdown.find('.dropdown').hasClass('open'), 'open class added on click')
47
+        $('body').click()
48
+        ok(!dropdown.find('.dropdown').hasClass('open'), 'open class removed')
49
+        dropdown.remove()
50
+      })
51
+
52
+})
0 53
\ No newline at end of file
1 54
new file mode 100755
... ...
@@ -0,0 +1,151 @@
1
+$(function () {
2
+
3
+  module("bootstrap-modal")
4
+
5
+    test("should be defined on jquery object", function () {
6
+      var div = $("<div id='modal-test'></div>")
7
+      ok(div.modal, 'modal method is defined')
8
+    })
9
+
10
+    test("should return element", function () {
11
+      var div = $("<div id='modal-test'></div>")
12
+      ok(div.modal() == div, 'div element returned')
13
+    })
14
+
15
+    test("should expose defaults var for settings", function () {
16
+      ok($.fn.modal.defaults, 'default object exposed')
17
+    })
18
+
19
+    test("should insert into dom when show method is called", function () {
20
+      stop()
21
+      $.support.transition = false
22
+      var div = $("<div id='modal-test'></div>")
23
+      div
24
+        .modal()
25
+        .bind("shown", function () {
26
+          ok($('#modal-test').length, 'modal insterted into dom')
27
+          start()
28
+          div.remove()
29
+        })
30
+        .modal("show")
31
+    })
32
+
33
+    test("should hide modal when hide is called", function () {
34
+       stop()
35
+       $.support.transition = false
36
+       var div = $("<div id='modal-test'></div>")
37
+       div
38
+         .modal()
39
+         .bind("shown", function () {
40
+           ok($('#modal-test').is(":visible"), 'modal visible')
41
+           ok($('#modal-test').length, 'modal insterted into dom')
42
+           div.modal("hide")
43
+         })
44
+         .bind("hidden", function() {
45
+           ok(!$('#modal-test').is(":visible"), 'modal hidden')
46
+           start()
47
+           div.remove()
48
+         })
49
+         .modal("show")
50
+     })
51
+
52
+     test("should toggle when toggle is called", function () {
53
+       stop()
54
+       $.support.transition = false
55
+       var div = $("<div id='modal-test'></div>")
56
+       div
57
+         .modal()
58
+         .bind("shown", function () {
59
+           ok($('#modal-test').is(":visible"), 'modal visible')
60
+           ok($('#modal-test').length, 'modal insterted into dom')
61
+           div.modal("toggle")
62
+         })
63
+         .bind("hidden", function() {
64
+           ok(!$('#modal-test').is(":visible"), 'modal hidden')
65
+           start()
66
+           div.remove()
67
+         })
68
+         .modal("toggle")
69
+     })
70
+
71
+     test("should remove from dom when click .close", function () {
72
+       stop()
73
+       $.support.transition = false
74
+       var div = $("<div id='modal-test'><span class='close'></span></div>")
75
+       div
76
+         .modal()
77
+         .bind("shown", function () {
78
+           ok($('#modal-test').is(":visible"), 'modal visible')
79
+           ok($('#modal-test').length, 'modal insterted into dom')
80
+           div.find('.close').click()
81
+         })
82
+         .bind("hidden", function() {
83
+           ok(!$('#modal-test').is(":visible"), 'modal hidden')
84
+           start()
85
+           div.remove()
86
+         })
87
+         .modal("toggle")
88
+     })
89
+
90
+     test("should add backdrop when desired", function () {
91
+       stop()
92
+       $.support.transition = false
93
+       var div = $("<div id='modal-test'></div>")
94
+       div
95
+         .modal({ backdrop:true })
96
+         .bind("shown", function () {
97
+           equal($('.modal-backdrop').length, 1, 'modal backdrop inserted into dom')
98
+           start()
99
+           div.remove()
100
+           $('.modal-backdrop').remove()
101
+         })
102
+        .modal("show")
103
+     })
104
+
105
+     test("should not add backdrop when not desired", function () {
106
+       stop()
107
+       $.support.transition = false
108
+       var div = $("<div id='modal-test'></div>")
109
+       div
110
+         .modal({backdrop:false})
111
+         .bind("shown", function () {
112
+           equal($('.modal-backdrop').length, 0, 'modal backdrop not inserted into dom')
113
+           start()
114
+           div.remove()
115
+         })
116
+         .modal("show")
117
+     })
118
+
119
+     test("should close backdrop when clicked", function () {
120
+       stop()
121
+       $.support.transition = false
122
+       var div = $("<div id='modal-test'></div>")
123
+       div
124
+         .modal({backdrop:true})
125
+         .bind("shown", function () {
126
+           equal($('.modal-backdrop').length, 1, 'modal backdrop inserted into dom')
127
+           $('.modal-backdrop').click()
128
+           equal($('.modal-backdrop').length, 0, 'modal backdrop removed from dom')
129
+           start()
130
+           div.remove()
131
+         })
132
+         .modal("show")
133
+     })
134
+
135
+     test("should not close backdrop when click disabled", function () {
136
+       stop()
137
+       $.support.transition = false
138
+       var div = $("<div id='modal-test'></div>")
139
+       div
140
+         .modal({backdrop: 'static'})
141
+         .bind("shown", function () {
142
+           equal($('.modal-backdrop').length, 1, 'modal backdrop inserted into dom')
143
+           $('.modal-backdrop').click()
144
+           equal($('.modal-backdrop').length, 1, 'modal backdrop still in dom')
145
+           start()
146
+           div.remove()
147
+           $('.modal-backdrop').remove()
148
+         })
149
+         .modal("show")
150
+     })
151
+})
0 152
new file mode 100755
... ...
@@ -0,0 +1,76 @@
1
+$(function () {
2
+
3
+    module("bootstrap-popover")
4
+
5
+      test("should be defined on jquery object", function () {
6
+        var div = $('<div></div>')
7
+        ok(div.popover, 'popover method is defined')
8
+      })
9
+
10
+      test("should return element", function () {
11
+        var div = $('<div></div>')
12
+        ok(div.popover() == div, 'document.body returned')
13
+      })
14
+
15
+      test("should render popover element", function () {
16
+        $.support.transition = false
17
+        var popover = $('<a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a>')
18
+          .appendTo('#qunit-runoff')
19
+          .popover()
20
+          .popover('show')
21
+
22
+        ok($('.popover').length, 'popover was inserted')
23
+        popover.popover('hide')
24
+        ok(!$(".popover").length, 'popover removed')
25
+        $('#qunit-runoff').empty()
26
+      })
27
+
28
+      test("should store popover instance in popover data object", function () {
29
+        $.support.transition = false
30
+        var popover = $('<a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a>')
31
+          .popover()
32
+
33
+        ok(!!popover.data('popover'), 'popover instance exists')
34
+      })
35
+
36
+      test("should get title and content from options", function () {
37
+        $.support.transition = false
38
+        var popover = $('<a href="#">@fat</a>')
39
+          .appendTo('#qunit-runoff')
40
+          .popover({
41
+            title: function () {
42
+              return '@fat'
43
+            }
44
+          , content: function () {
45
+              return 'loves writing tests (╯°□°)╯︵ ┻━┻'
46
+            }
47
+          })
48
+
49
+        popover.popover('show')
50
+
51
+        ok($('.popover').length, 'popover was inserted')
52
+        equals($('.popover .title').text(), '@fat', 'title correctly inserted')
53
+        equals($('.popover .content').text(), 'loves writing tests (╯°□°)╯︵ ┻━┻', 'content correctly inserted')
54
+
55
+        popover.popover('hide')
56
+        ok(!$('.popover').length, 'popover was removed')
57
+        $('#qunit-runoff').empty()
58
+      })
59
+
60
+      test("should get title and content from attributes", function () {
61
+        $.support.transition = false
62
+        var popover = $('<a href="#" title="@mdo" data-content="loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻" >@mdo</a>')
63
+          .appendTo('#qunit-runoff')
64
+          .popover()
65
+          .popover('show')
66
+
67
+        ok($('.popover').length, 'popover was inserted')
68
+        equals($('.popover .title').text(), '@mdo', 'title correctly inserted')
69
+        equals($('.popover .content').text(), "loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻", 'content correctly inserted')
70
+
71
+        popover.popover('hide')
72
+        ok(!$('.popover').length, 'popover was removed')
73
+        $('#qunit-runoff').empty()
74
+      })
75
+
76
+})
0 77
new file mode 100755
... ...
@@ -0,0 +1,31 @@
1
+$(function () {
2
+
3
+    module("bootstrap-scrollspy")
4
+
5
+      test("should be defined on jquery object", function () {
6
+        ok($(document.body).scrollspy, 'scrollspy method is defined')
7
+      })
8
+
9
+      test("should return element", function () {
10
+        ok($(document.body).scrollspy()[0] == document.body, 'document.body returned')
11
+      })
12
+
13
+      test("should switch active class on scroll", function () {
14
+        var sectionHTML = '<div id="masthead"></div>'
15
+          , $section = $(sectionHTML).append('#qunit-runoff')
16
+          , topbarHTML ='<div class="topbar">'
17
+          + '<div class="topbar-inner">'
18
+          + '<div class="container">'
19
+          + '<h3><a href="#">Bootstrap</a></h3>'
20
+          + '<ul class="nav">'
21
+          + '<li><a href="#masthead">Overview</a></li>'
22
+          + '</ul>'
23
+          + '</div>'
24
+          + '</div>'
25
+          + '</div>'
26
+          , $topbar = $(topbarHTML).topbar()
27
+
28
+        ok(topbar.find('.active', true)
29
+      })
30
+
31
+})
0 32
\ No newline at end of file
1 33
new file mode 100755
... ...
@@ -0,0 +1,77 @@
1
+$(function () {
2
+
3
+    module("bootstrap-tabs")
4
+
5
+      test("should be defined on jquery object", function () {
6
+        ok($(document.body).tabs, 'tabs method is defined')
7
+      })
8
+
9
+      test("should return element", function () {
10
+        ok($(document.body).tabs()[0] == document.body, 'document.body returned')
11
+      })
12
+
13
+      test("should activate element by tab id", function () {
14
+        var $tabsHTML = $('<ul class="tabs">'
15
+          + '<li class="active"><a href="#home">Home</a></li>'
16
+          + '<li><a href="#profile">Profile</a></li>'
17
+          + '</ul>')
18
+
19
+
20
+        $('<ul><li id="home"></li><li id="profile"></li></ul>').appendTo("#qunit-runoff")
21
+
22
+        $tabsHTML.tabs().find('a').last().click()
23
+        equals($("#qunit-runoff").find('.active').attr('id'), "profile")
24
+
25
+        $tabsHTML.tabs().find('a').first().click()
26
+        equals($("#qunit-runoff").find('.active').attr('id'), "home")
27
+
28
+        $("#qunit-runoff").empty()
29
+      })
30
+
31
+      test("should activate element by pill id", function () {
32
+        var $pillsHTML = $('<ul class="pills">'
33
+          + '<li class="active"><a href="#home">Home</a></li>'
34
+          + '<li><a href="#profile">Profile</a></li>'
35
+          + '</ul>')
36
+
37
+
38
+        $('<ul><li id="home"></li><li id="profile"></li></ul>').appendTo("#qunit-runoff")
39
+
40
+        $pillsHTML.pills().find('a').last().click()
41
+        equals($("#qunit-runoff").find('.active').attr('id'), "profile")
42
+
43
+        $pillsHTML.pills().find('a').first().click()
44
+        equals($("#qunit-runoff").find('.active').attr('id'), "home")
45
+
46
+        $("#qunit-runoff").empty()
47
+      })
48
+
49
+      test( "should trigger change event on activate", function () {
50
+        var $tabsHTML = $('<ul class="tabs">'
51
+          + '<li class="active"><a href="#home">Home</a></li>'
52
+          + '<li><a href="#profile">Profile</a></li>'
53
+          + '</ul>')
54
+          , $target
55
+          , count = 0
56
+          , relatedTarget
57
+          , target
58
+
59
+        $tabsHTML
60
+          .tabs()
61
+          .bind( "change", function (e) {
62
+            target = e.target
63
+            relatedTarget = e.relatedTarget
64
+            count++
65
+          })
66
+
67
+        $target = $tabsHTML
68
+          .find('a')
69
+          .last()
70
+          .click()
71
+
72
+        equals(relatedTarget, $tabsHTML.find('a').first()[0])
73
+        equals(target, $target[0])
74
+        equals(count, 1)
75
+      })
76
+
77
+})
0 78
\ No newline at end of file
1 79
new file mode 100755
... ...
@@ -0,0 +1,81 @@
1
+$(function () {
2
+
3
+    module("bootstrap-twipsy")
4
+
5
+      test("should be defined on jquery object", function () {
6
+        var div = $("<div></div>")
7
+        ok(div.twipsy, 'popover method is defined')
8
+      })
9
+
10
+      test("should return element", function () {
11
+        var div = $("<div></div>")
12
+        ok(div.twipsy() == div, 'document.body returned')
13
+      })
14
+
15
+      test("should expose default settings", function () {
16
+        ok(!!$.fn.twipsy.defaults, 'defaults is defined')
17
+      })
18
+
19
+      test("should remove title attribute", function () {
20
+        var twipsy = $('<a href="#" rel="twipsy" title="Another twipsy"></a>').twipsy()
21
+        ok(!twipsy.attr('title'), 'title tag was removed')
22
+      })
23
+
24
+      test("should add data attribute for referencing original title", function () {
25
+        var twipsy = $('<a href="#" rel="twipsy" title="Another twipsy"></a>').twipsy()
26
+        equals(twipsy.attr('data-original-title'), 'Another twipsy', 'original title preserved in data attribute')
27
+      })
28
+
29
+      test("should place tooltips relative to placement option", function () {
30
+        $.support.transition = false
31
+        var twipsy = $('<a href="#" rel="twipsy" title="Another twipsy"></a>')
32
+          .appendTo('#qunit-runoff')
33
+          .twipsy({placement: 'below'})
34
+          .twipsy('show')
35
+
36
+        ok($(".twipsy").hasClass('fade below in'), 'has correct classes applied')
37
+        twipsy.twipsy('hide')
38
+        ok(!$(".twipsy").length, 'twipsy removed')
39
+        $('#qunit-runoff').empty()
40
+      })
41
+
42
+      test("should add a fallback in cases where elements have no title tag", function () {
43
+        $.support.transition = false
44
+        var twipsy = $('<a href="#" rel="twipsy"></a>')
45
+          .appendTo('#qunit-runoff')
46
+          .twipsy({fallback: '@fat'})
47
+          .twipsy('show')
48
+
49
+        equals($(".twipsy").text(), "@fat", 'has correct default text')
50
+        twipsy.twipsy('hide')
51
+        ok(!$(".twipsy").length, 'twipsy removed')
52
+        $('#qunit-runoff').empty()
53
+      })
54
+
55
+      test("should not allow html entities", function () {
56
+        $.support.transition = false
57
+        var twipsy = $('<a href="#" rel="twipsy" title="<b>@fat</b>"></a>')
58
+          .appendTo('#qunit-runoff')
59
+          .twipsy()
60
+          .twipsy('show')
61
+
62
+        ok(!$('.twipsy b').length, 'b tag was not inserted')
63
+        twipsy.twipsy('hide')
64
+        ok(!$(".twipsy").length, 'twipsy removed')
65
+        $('#qunit-runoff').empty()
66
+      })
67
+
68
+      test("should allow html entities if html option set to true", function () {
69
+        $.support.transition = false
70
+        var twipsy = $('<a href="#" rel="twipsy" title="<b>@fat</b>"></a>')
71
+          .appendTo('#qunit-runoff')
72
+          .twipsy({html: true})
73
+          .twipsy('show')
74
+
75
+        ok($('.twipsy b').length, 'b tag was inserted')
76
+        twipsy.twipsy('hide')
77
+        ok(!$(".twipsy").length, 'twipsy removed')
78
+        $('#qunit-runoff').empty()
79
+      })
80
+
81
+})
0 82
\ No newline at end of file
1 83
new file mode 100755
... ...
@@ -0,0 +1,232 @@
1
+/**
2
+ * QUnit - A JavaScript Unit Testing Framework
3
+ *
4
+ * http://docs.jquery.com/QUnit
5
+ *
6
+ * Copyright (c) 2011 John Resig, Jörn Zaefferer
7
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
8
+ * or GPL (GPL-LICENSE.txt) licenses.
9
+ */
10
+
11
+/** Font Family and Sizes */
12
+
13
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
14
+	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
15
+}
16
+
17
+#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
18
+#qunit-tests { font-size: smaller; }
19
+
20
+
21
+/** Resets */
22
+
23
+#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
24
+	margin: 0;
25
+	padding: 0;
26
+}
27
+
28
+
29
+/** Header */
30
+
31
+#qunit-header {
32
+	padding: 0.5em 0 0.5em 1em;
33
+
34
+	color: #8699a4;
35
+	background-color: #0d3349;
36
+
37
+	font-size: 1.5em;
38
+	line-height: 1em;
39
+	font-weight: normal;
40
+
41
+	border-radius: 15px 15px 0 0;
42
+	-moz-border-radius: 15px 15px 0 0;
43
+	-webkit-border-top-right-radius: 15px;
44
+	-webkit-border-top-left-radius: 15px;
45
+}
46
+
47
+#qunit-header a {
48
+	text-decoration: none;
49
+	color: #c2ccd1;
50
+}
51
+
52
+#qunit-header a:hover,
53
+#qunit-header a:focus {
54
+	color: #fff;
55
+}
56
+
57
+#qunit-banner {
58
+	height: 5px;
59
+}
60
+
61
+#qunit-testrunner-toolbar {
62
+	padding: 0.5em 0 0.5em 2em;
63
+	color: #5E740B;
64
+	background-color: #eee;
65
+}
66
+
67
+#qunit-userAgent {
68
+	padding: 0.5em 0 0.5em 2.5em;
69
+	background-color: #2b81af;
70
+	color: #fff;
71
+	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
72
+}
73
+
74
+
75
+/** Tests: Pass/Fail */
76
+
77
+#qunit-tests {
78
+	list-style-position: inside;
79
+}
80
+
81
+#qunit-tests li {
82
+	padding: 0.4em 0.5em 0.4em 2.5em;
83
+	border-bottom: 1px solid #fff;
84
+	list-style-position: inside;
85
+}
86
+
87
+#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running  {
88
+	display: none;
89
+}
90
+
91
+#qunit-tests li strong {
92
+	cursor: pointer;
93
+}
94
+
95
+#qunit-tests li a {
96
+	padding: 0.5em;
97
+	color: #c2ccd1;
98
+	text-decoration: none;
99
+}
100
+#qunit-tests li a:hover,
101
+#qunit-tests li a:focus {
102
+	color: #000;
103
+}
104
+
105
+#qunit-tests ol {
106
+	margin-top: 0.5em;
107
+	padding: 0.5em;
108
+
109
+	background-color: #fff;
110
+
111
+	border-radius: 15px;
112
+	-moz-border-radius: 15px;
113
+	-webkit-border-radius: 15px;
114
+
115
+	box-shadow: inset 0px 2px 13px #999;
116
+	-moz-box-shadow: inset 0px 2px 13px #999;
117
+	-webkit-box-shadow: inset 0px 2px 13px #999;
118
+}
119
+
120
+#qunit-tests table {
121
+	border-collapse: collapse;
122
+	margin-top: .2em;
123
+}
124
+
125
+#qunit-tests th {
126
+	text-align: right;
127
+	vertical-align: top;
128
+	padding: 0 .5em 0 0;
129
+}
130
+
131
+#qunit-tests td {
132
+	vertical-align: top;
133
+}
134
+
135
+#qunit-tests pre {
136
+	margin: 0;
137
+	white-space: pre-wrap;
138
+	word-wrap: break-word;
139
+}
140
+
141
+#qunit-tests del {
142
+	background-color: #e0f2be;
143
+	color: #374e0c;
144
+	text-decoration: none;
145
+}
146
+
147
+#qunit-tests ins {
148
+	background-color: #ffcaca;
149
+	color: #500;
150
+	text-decoration: none;
151
+}
152
+
153
+/*** Test Counts */
154
+
155
+#qunit-tests b.counts                       { color: black; }
156
+#qunit-tests b.passed                       { color: #5E740B; }
157
+#qunit-tests b.failed                       { color: #710909; }
158
+
159
+#qunit-tests li li {
160
+	margin: 0.5em;
161
+	padding: 0.4em 0.5em 0.4em 0.5em;
162
+	background-color: #fff;
163
+	border-bottom: none;
164
+	list-style-position: inside;
165
+}
166
+
167
+/*** Passing Styles */
168
+
169
+#qunit-tests li li.pass {
170
+	color: #5E740B;
171
+	background-color: #fff;
172
+	border-left: 26px solid #C6E746;
173
+}
174
+
175
+#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
176
+#qunit-tests .pass .test-name               { color: #366097; }
177
+
178
+#qunit-tests .pass .test-actual,
179
+#qunit-tests .pass .test-expected           { color: #999999; }
180
+
181
+#qunit-banner.qunit-pass                    { background-color: #C6E746; }
182
+
183
+/*** Failing Styles */
184
+
185
+#qunit-tests li li.fail {
186
+	color: #710909;
187
+	background-color: #fff;
188
+	border-left: 26px solid #EE5757;
189
+	white-space: pre;
190
+}
191
+
192
+#qunit-tests > li:last-child {
193
+	border-radius: 0 0 15px 15px;
194
+	-moz-border-radius: 0 0 15px 15px;
195
+	-webkit-border-bottom-right-radius: 15px;
196
+	-webkit-border-bottom-left-radius: 15px;
197
+}
198
+
199
+#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
200
+#qunit-tests .fail .test-name,
201
+#qunit-tests .fail .module-name             { color: #000000; }
202
+
203
+#qunit-tests .fail .test-actual             { color: #EE5757; }
204
+#qunit-tests .fail .test-expected           { color: green;   }
205
+
206
+#qunit-banner.qunit-fail                    { background-color: #EE5757; }
207
+
208
+
209
+/** Result */
210
+
211
+#qunit-testresult {
212
+	padding: 0.5em 0.5em 0.5em 2.5em;
213
+
214
+	color: #2b81af;
215
+	background-color: #D2E0E6;
216
+
217
+	border-bottom: 1px solid white;
218
+}
219
+
220
+/** Fixture */
221
+
222
+#qunit-fixture {
223
+	position: absolute;
224
+	top: -10000px;
225
+	left: -10000px;
226
+}
227
+
228
+/** Runoff */
229
+
230
+#qunit-runoff {
231
+  display:none;
232
+}
0 233
\ No newline at end of file
1 234
new file mode 100755
... ...
@@ -0,0 +1,1510 @@
1
+/**
2
+ * QUnit - A JavaScript Unit Testing Framework
3
+ *
4
+ * http://docs.jquery.com/QUnit
5
+ *
6
+ * Copyright (c) 2011 John Resig, Jörn Zaefferer
7
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
8
+ * or GPL (GPL-LICENSE.txt) licenses.
9
+ */
10
+
11
+(function(window) {
12
+
13
+var defined = {
14
+	setTimeout: typeof window.setTimeout !== "undefined",
15
+	sessionStorage: (function() {
16
+		try {
17
+			return !!sessionStorage.getItem;
18
+		} catch(e) {
19
+			return false;
20
+		}
21
+	})()
22
+};
23
+
24
+var testId = 0;
25
+
26
+var Test = function(name, testName, expected, testEnvironmentArg, async, callback) {
27
+	this.name = name;
28
+	this.testName = testName;
29
+	this.expected = expected;
30
+	this.testEnvironmentArg = testEnvironmentArg;
31
+	this.async = async;
32
+	this.callback = callback;
33
+	this.assertions = [];
34
+};
35
+Test.prototype = {
36
+	init: function() {
37
+		var tests = id("qunit-tests");
38
+		if (tests) {
39
+			var b = document.createElement("strong");
40
+				b.innerHTML = "Running " + this.name;
41
+			var li = document.createElement("li");
42
+				li.appendChild( b );
43
+				li.className = "running";
44
+				li.id = this.id = "test-output" + testId++;
45
+			tests.appendChild( li );
46
+		}
47
+	},
48
+	setup: function() {
49
+		if (this.module != config.previousModule) {
50
+			if ( config.previousModule ) {
51
+				QUnit.moduleDone( {
52
+					name: config.previousModule,
53
+					failed: config.moduleStats.bad,
54
+					passed: config.moduleStats.all - config.moduleStats.bad,
55
+					total: config.moduleStats.all
56
+				} );
57
+			}
58
+			config.previousModule = this.module;
59
+			config.moduleStats = { all: 0, bad: 0 };
60
+			QUnit.moduleStart( {
61
+				name: this.module
62
+			} );
63
+		}
64
+
65
+		config.current = this;
66
+		this.testEnvironment = extend({
67
+			setup: function() {},
68
+			teardown: function() {}
69
+		}, this.moduleTestEnvironment);
70
+		if (this.testEnvironmentArg) {
71
+			extend(this.testEnvironment, this.testEnvironmentArg);
72
+		}
73
+
74
+		QUnit.testStart( {
75
+			name: this.testName
76
+		} );
77
+
78
+		// allow utility functions to access the current test environment
79
+		// TODO why??
80
+		QUnit.current_testEnvironment = this.testEnvironment;
81
+
82
+		try {
83
+			if ( !config.pollution ) {
84
+				saveGlobal();
85
+			}
86
+
87
+			this.testEnvironment.setup.call(this.testEnvironment);
88
+		} catch(e) {
89
+			QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message );
90
+		}
91
+	},
92
+	run: function() {
93
+		if ( this.async ) {
94
+			QUnit.stop();
95
+		}
96
+
97
+		if ( config.notrycatch ) {
98
+			this.callback.call(this.testEnvironment);
99
+			return;
100
+		}
101
+		try {
102
+			this.callback.call(this.testEnvironment);
103
+		} catch(e) {
104
+			fail("Test " + this.testName + " died, exception and test follows", e, this.callback);
105
+			QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) );
106
+			// else next test will carry the responsibility
107
+			saveGlobal();
108
+
109
+			// Restart the tests if they're blocking
110
+			if ( config.blocking ) {
111
+				start();
112
+			}
113
+		}
114
+	},
115
+	teardown: function() {
116
+		try {
117
+			this.testEnvironment.teardown.call(this.testEnvironment);
118
+			checkPollution();
119
+		} catch(e) {
120
+			QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message );
121
+		}
122
+	},
123
+	finish: function() {
124
+		if ( this.expected && this.expected != this.assertions.length ) {
125
+			QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" );
126
+		}
127
+
128
+		var good = 0, bad = 0,
129
+			tests = id("qunit-tests");
130
+
131
+		config.stats.all += this.assertions.length;
132
+		config.moduleStats.all += this.assertions.length;
133
+
134
+		if ( tests ) {
135
+			var ol = document.createElement("ol");
136
+
137
+			for ( var i = 0; i < this.assertions.length; i++ ) {
138
+				var assertion = this.assertions[i];
139
+
140
+				var li = document.createElement("li");
141
+				li.className = assertion.result ? "pass" : "fail";
142
+				li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed");
143
+				ol.appendChild( li );
144
+
145
+				if ( assertion.result ) {
146
+					good++;
147
+				} else {
148
+					bad++;
149
+					config.stats.bad++;
150
+					config.moduleStats.bad++;
151
+				}
152
+			}
153
+
154
+			// store result when possible
155
+			if ( QUnit.config.reorder && defined.sessionStorage ) {
156
+				if (bad) {
157
+					sessionStorage.setItem("qunit-" + this.module + "-" + this.testName, bad);
158
+				} else {
159
+					sessionStorage.removeItem("qunit-" + this.module + "-" + this.testName);
160
+				}
161
+			}
162
+
163
+			if (bad == 0) {
164
+				ol.style.display = "none";
165
+			}
166
+
167
+			var b = document.createElement("strong");
168
+			b.innerHTML = this.name + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
169
+
170
+			var a = document.createElement("a");
171
+			a.innerHTML = "Rerun";
172
+			a.href = QUnit.url({ filter: getText([b]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") });
173
+
174
+			addEvent(b, "click", function() {
175
+				var next = b.nextSibling.nextSibling,
176
+					display = next.style.display;
177
+				next.style.display = display === "none" ? "block" : "none";
178
+			});
179
+
180
+			addEvent(b, "dblclick", function(e) {
181
+				var target = e && e.target ? e.target : window.event.srcElement;
182
+				if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) {
183
+					target = target.parentNode;
184
+				}
185
+				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
186
+					window.location = QUnit.url({ filter: getText([target]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") });
187
+				}
188
+			});
189
+
190
+			var li = id(this.id);
191
+			li.className = bad ? "fail" : "pass";
192
+			li.removeChild( li.firstChild );
193
+			li.appendChild( b );
194
+			li.appendChild( a );
195
+			li.appendChild( ol );
196
+
197
+		} else {
198
+			for ( var i = 0; i < this.assertions.length; i++ ) {
199
+				if ( !this.assertions[i].result ) {
200
+					bad++;
201
+					config.stats.bad++;
202
+					config.moduleStats.bad++;
203
+				}
204
+			}
205
+		}
206
+
207
+		try {
208
+			QUnit.reset();
209
+		} catch(e) {
210
+			fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset);
211
+		}
212
+
213
+		QUnit.testDone( {
214
+			name: this.testName,
215
+			failed: bad,
216
+			passed: this.assertions.length - bad,
217
+			total: this.assertions.length
218
+		} );
219
+	},
220
+
221
+	queue: function() {
222
+		var test = this;
223
+		synchronize(function() {
224
+			test.init();
225
+		});
226
+		function run() {
227
+			// each of these can by async
228
+			synchronize(function() {
229
+				test.setup();
230
+			});
231
+			synchronize(function() {
232
+				test.run();
233
+			});
234
+			synchronize(function() {
235
+				test.teardown();
236
+			});
237
+			synchronize(function() {
238
+				test.finish();
239
+			});
240
+		}
241
+		// defer when previous test run passed, if storage is available
242
+		var bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.module + "-" + this.testName);
243
+		if (bad) {
244
+			run();
245
+		} else {
246
+			synchronize(run);
247
+		};
248
+	}
249
+
250
+};
251
+
252
+var QUnit = {
253
+
254
+	// call on start of module test to prepend name to all tests
255
+	module: function(name, testEnvironment) {
256
+		config.currentModule = name;
257
+		config.currentModuleTestEnviroment = testEnvironment;
258
+	},
259
+
260
+	asyncTest: function(testName, expected, callback) {
261
+		if ( arguments.length === 2 ) {
262
+			callback = expected;
263
+			expected = 0;
264
+		}
265
+
266
+		QUnit.test(testName, expected, callback, true);
267
+	},
268
+
269
+	test: function(testName, expected, callback, async) {
270
+		var name = '<span class="test-name">' + testName + '</span>', testEnvironmentArg;
271
+
272
+		if ( arguments.length === 2 ) {
273
+			callback = expected;
274
+			expected = null;
275
+		}
276
+		// is 2nd argument a testEnvironment?
277
+		if ( expected && typeof expected === 'object') {
278
+			testEnvironmentArg = expected;
279
+			expected = null;
280
+		}
281
+
282
+		if ( config.currentModule ) {
283
+			name = '<span class="module-name">' + config.currentModule + "</span>: " + name;
284
+		}
285
+
286
+		if ( !validTest(config.currentModule + ": " + testName) ) {
287
+			return;
288
+		}
289
+
290
+		var test = new Test(name, testName, expected, testEnvironmentArg, async, callback);
291
+		test.module = config.currentModule;
292
+		test.moduleTestEnvironment = config.currentModuleTestEnviroment;
293
+		test.queue();
294
+	},
295
+
296
+	/**
297
+	 * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
298
+	 */
299
+	expect: function(asserts) {
300
+		config.current.expected = asserts;
301
+	},
302
+
303
+	/**
304
+	 * Asserts true.
305
+	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
306
+	 */
307
+	ok: function(a, msg) {
308
+		a = !!a;
309
+		var details = {
310
+			result: a,
311
+			message: msg
312
+		};
313
+		msg = escapeHtml(msg);
314
+		QUnit.log(details);
315
+		config.current.assertions.push({
316
+			result: a,
317
+			message: msg
318
+		});
319
+	},
320
+
321
+	/**
322
+	 * Checks that the first two arguments are equal, with an optional message.
323
+	 * Prints out both actual and expected values.
324
+	 *
325
+	 * Prefered to ok( actual == expected, message )
326
+	 *
327
+	 * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
328
+	 *
329
+	 * @param Object actual
330
+	 * @param Object expected
331
+	 * @param String message (optional)
332
+	 */
333
+	equal: function(actual, expected, message) {
334
+		QUnit.push(expected == actual, actual, expected, message);
335
+	},
336
+
337
+	notEqual: function(actual, expected, message) {
338
+		QUnit.push(expected != actual, actual, expected, message);
339
+	},
340
+
341
+	deepEqual: function(actual, expected, message) {
342
+		QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
343
+	},
344
+
345
+	notDeepEqual: function(actual, expected, message) {
346
+		QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message);
347
+	},
348
+
349
+	strictEqual: function(actual, expected, message) {
350
+		QUnit.push(expected === actual, actual, expected, message);
351
+	},
352
+
353
+	notStrictEqual: function(actual, expected, message) {
354
+		QUnit.push(expected !== actual, actual, expected, message);
355
+	},
356
+
357
+	raises: function(block, expected, message) {
358
+		var actual, ok = false;
359
+
360
+		if (typeof expected === 'string') {
361
+			message = expected;
362
+			expected = null;
363
+		}
364
+
365
+		try {
366
+			block();
367
+		} catch (e) {
368
+			actual = e;
369
+		}
370
+
371
+		if (actual) {
372
+			// we don't want to validate thrown error
373
+			if (!expected) {
374
+				ok = true;
375
+			// expected is a regexp
376
+			} else if (QUnit.objectType(expected) === "regexp") {
377
+				ok = expected.test(actual);
378
+			// expected is a constructor
379
+			} else if (actual instanceof expected) {
380
+				ok = true;
381
+			// expected is a validation function which returns true is validation passed
382
+			} else if (expected.call({}, actual) === true) {
383
+				ok = true;
384
+			}
385
+		}
386
+
387
+		QUnit.ok(ok, message);
388
+	},
389
+
390
+	start: function() {
391
+		config.semaphore--;
392
+		if (config.semaphore > 0) {
393
+			// don't start until equal number of stop-calls
394
+			return;
395
+		}
396
+		if (config.semaphore < 0) {
397
+			// ignore if start is called more often then stop
398
+			config.semaphore = 0;
399
+		}
400
+		// A slight delay, to avoid any current callbacks
401
+		if ( defined.setTimeout ) {
402
+			window.setTimeout(function() {
403
+				if (config.semaphore > 0) {
404
+					return;
405
+				}
406
+				if ( config.timeout ) {
407
+					clearTimeout(config.timeout);
408
+				}
409
+
410
+				config.blocking = false;
411
+				process();
412
+			}, 13);
413
+		} else {
414
+			config.blocking = false;
415
+			process();
416
+		}
417
+	},
418
+
419
+	stop: function(timeout) {
420
+		config.semaphore++;
421
+		config.blocking = true;
422
+
423
+		if ( timeout && defined.setTimeout ) {
424
+			clearTimeout(config.timeout);
425
+			config.timeout = window.setTimeout(function() {
426
+				QUnit.ok( false, "Test timed out" );
427
+				QUnit.start();
428
+			}, timeout);
429
+		}
430
+	}
431
+};
432
+
433
+// Backwards compatibility, deprecated
434
+QUnit.equals = QUnit.equal;
435
+QUnit.same = QUnit.deepEqual;
436
+
437
+// Maintain internal state
438
+var config = {
439
+	// The queue of tests to run
440
+	queue: [],
441
+
442
+	// block until document ready
443
+	blocking: true,
444
+
445
+	// when enabled, show only failing tests
446
+	// gets persisted through sessionStorage and can be changed in UI via checkbox
447
+	hidepassed: false,
448
+
449
+	// by default, run previously failed tests first
450
+	// very useful in combination with "Hide passed tests" checked
451
+	reorder: true,
452
+
453
+	// by default, modify document.title when suite is done
454
+	altertitle: true,
455
+
456
+	urlConfig: ['noglobals', 'notrycatch']
457
+};
458
+
459
+// Load paramaters
460
+(function() {
461
+	var location = window.location || { search: "", protocol: "file:" },
462
+		params = location.search.slice( 1 ).split( "&" ),
463
+		length = params.length,
464
+		urlParams = {},
465
+		current;
466
+
467
+	if ( params[ 0 ] ) {
468
+		for ( var i = 0; i < length; i++ ) {
469
+			current = params[ i ].split( "=" );
470
+			current[ 0 ] = decodeURIComponent( current[ 0 ] );
471
+			// allow just a key to turn on a flag, e.g., test.html?noglobals
472
+			current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
473
+			urlParams[ current[ 0 ] ] = current[ 1 ];
474
+		}
475
+	}
476
+
477
+	QUnit.urlParams = urlParams;
478
+	config.filter = urlParams.filter;
479
+
480
+	// Figure out if we're running the tests from a server or not
481
+	QUnit.isLocal = !!(location.protocol === 'file:');
482
+})();
483
+
484
+// Expose the API as global variables, unless an 'exports'
485
+// object exists, in that case we assume we're in CommonJS
486
+if ( typeof exports === "undefined" || typeof require === "undefined" ) {
487
+	extend(window, QUnit);
488
+	window.QUnit = QUnit;
489
+} else {
490
+	extend(exports, QUnit);
491
+	exports.QUnit = QUnit;
492
+}
493
+
494
+// define these after exposing globals to keep them in these QUnit namespace only
495
+extend(QUnit, {
496
+	config: config,
497
+
498
+	// Initialize the configuration options
499
+	init: function() {
500
+		extend(config, {
501
+			stats: { all: 0, bad: 0 },
502
+			moduleStats: { all: 0, bad: 0 },
503
+			started: +new Date,
504
+			updateRate: 1000,
505
+			blocking: false,
506
+			autostart: true,
507
+			autorun: false,
508
+			filter: "",
509
+			queue: [],
510
+			semaphore: 0
511
+		});
512
+
513
+		var tests = id( "qunit-tests" ),
514
+			banner = id( "qunit-banner" ),
515
+			result = id( "qunit-testresult" );
516
+
517
+		if ( tests ) {
518
+			tests.innerHTML = "";
519
+		}
520
+
521
+		if ( banner ) {
522
+			banner.className = "";
523
+		}
524
+
525
+		if ( result ) {
526
+			result.parentNode.removeChild( result );
527
+		}
528
+
529
+		if ( tests ) {
530
+			result = document.createElement( "p" );
531
+			result.id = "qunit-testresult";
532
+			result.className = "result";
533
+			tests.parentNode.insertBefore( result, tests );
534
+			result.innerHTML = 'Running...<br/>&nbsp;';
535
+		}
536
+	},
537
+
538
+	/**
539
+	 * Resets the test setup. Useful for tests that modify the DOM.
540
+	 *
541
+	 * If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
542
+	 */
543
+	reset: function() {
544
+		if ( window.jQuery ) {
545
+			jQuery( "#qunit-fixture" ).html( config.fixture );
546
+		} else {
547
+			var main = id( 'qunit-fixture' );
548
+			if ( main ) {
549
+				main.innerHTML = config.fixture;
550
+			}
551
+		}
552
+	},
553
+
554
+	/**
555
+	 * Trigger an event on an element.
556
+	 *
557
+	 * @example triggerEvent( document.body, "click" );
558
+	 *
559
+	 * @param DOMElement elem
560
+	 * @param String type
561
+	 */
562
+	triggerEvent: function( elem, type, event ) {
563
+		if ( document.createEvent ) {
564
+			event = document.createEvent("MouseEvents");
565
+			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
566
+				0, 0, 0, 0, 0, false, false, false, false, 0, null);
567
+			elem.dispatchEvent( event );
568
+
569
+		} else if ( elem.fireEvent ) {
570
+			elem.fireEvent("on"+type);
571
+		}
572
+	},
573
+
574
+	// Safe object type checking
575
+	is: function( type, obj ) {
576
+		return QUnit.objectType( obj ) == type;
577
+	},
578
+
579
+	objectType: function( obj ) {
580
+		if (typeof obj === "undefined") {
581
+				return "undefined";
582
+
583
+		// consider: typeof null === object
584
+		}
585
+		if (obj === null) {
586
+				return "null";
587
+		}
588
+
589
+		var type = Object.prototype.toString.call( obj )
590
+			.match(/^\[object\s(.*)\]$/)[1] || '';
591
+
592
+		switch (type) {
593
+				case 'Number':
594
+						if (isNaN(obj)) {
595
+								return "nan";
596
+						} else {
597
+								return "number";
598
+						}
599
+				case 'String':
600
+				case 'Boolean':
601
+				case 'Array':
602
+				case 'Date':
603
+				case 'RegExp':
604
+				case 'Function':
605
+						return type.toLowerCase();
606
+		}
607
+		if (typeof obj === "object") {
608
+				return "object";
609
+		}
610
+		return undefined;
611
+	},
612
+
613
+	push: function(result, actual, expected, message) {
614
+		var details = {
615
+			result: result,
616
+			message: message,
617
+			actual: actual,
618
+			expected: expected
619
+		};
620
+
621
+		message = escapeHtml(message) || (result ? "okay" : "failed");
622
+		message = '<span class="test-message">' + message + "</span>";
623
+		expected = escapeHtml(QUnit.jsDump.parse(expected));
624
+		actual = escapeHtml(QUnit.jsDump.parse(actual));
625
+		var output = message + '<table><tr class="test-expected"><th>Expected: </th><td><pre>' + expected + '</pre></td></tr>';
626
+		if (actual != expected) {
627
+			output += '<tr class="test-actual"><th>Result: </th><td><pre>' + actual + '</pre></td></tr>';
628
+			output += '<tr class="test-diff"><th>Diff: </th><td><pre>' + QUnit.diff(expected, actual) +'</pre></td></tr>';
629
+		}
630
+		if (!result) {
631
+			var source = sourceFromStacktrace();
632
+			if (source) {
633
+				details.source = source;
634
+				output += '<tr class="test-source"><th>Source: </th><td><pre>' + escapeHtml(source) + '</pre></td></tr>';
635
+			}
636
+		}
637
+		output += "</table>";
638
+
639
+		QUnit.log(details);
640
+
641
+		config.current.assertions.push({
642
+			result: !!result,
643
+			message: output
644
+		});
645
+	},
646
+
647
+	url: function( params ) {
648
+		params = extend( extend( {}, QUnit.urlParams ), params );
649
+		var querystring = "?",
650
+			key;
651
+		for ( key in params ) {
652
+			querystring += encodeURIComponent( key ) + "=" +
653
+				encodeURIComponent( params[ key ] ) + "&";
654
+		}
655
+		return window.location.pathname + querystring.slice( 0, -1 );
656
+	},
657
+
658
+	extend: extend,
659
+	id: id,
660
+	addEvent: addEvent,
661
+
662
+	// Logging callbacks; all receive a single argument with the listed properties
663
+	// run test/logs.html for any related changes
664
+	begin: function() {},
665
+	// done: { failed, passed, total, runtime }
666
+	done: function() {},
667
+	// log: { result, actual, expected, message }
668
+	log: function() {},
669
+	// testStart: { name }
670
+	testStart: function() {},
671
+	// testDone: { name, failed, passed, total }
672
+	testDone: function() {},
673
+	// moduleStart: { name }
674
+	moduleStart: function() {},
675
+	// moduleDone: { name, failed, passed, total }
676
+	moduleDone: function() {}
677
+});
678
+
679
+if ( typeof document === "undefined" || document.readyState === "complete" ) {
680
+	config.autorun = true;
681
+}
682
+
683
+QUnit.load = function() {
684
+	QUnit.begin({});
685
+
686
+	// Initialize the config, saving the execution queue
687
+	var oldconfig = extend({}, config);
688
+	QUnit.init();
689
+	extend(config, oldconfig);
690
+
691
+	config.blocking = false;
692
+
693
+	var urlConfigHtml = '', len = config.urlConfig.length;
694
+	for ( var i = 0, val; i < len, val = config.urlConfig[i]; i++ ) {
695
+		config[val] = QUnit.urlParams[val];
696
+		urlConfigHtml += '<label><input name="' + val + '" type="checkbox"' + ( config[val] ? ' checked="checked"' : '' ) + '>' + val + '</label>';
697
+	}
698
+
699
+	var userAgent = id("qunit-userAgent");
700
+	if ( userAgent ) {
701
+		userAgent.innerHTML = navigator.userAgent;
702
+	}
703
+	var banner = id("qunit-header");
704
+	if ( banner ) {
705
+		banner.innerHTML = '<a href="' + QUnit.url({ filter: undefined }) + '"> ' + banner.innerHTML + '</a> ' + urlConfigHtml;
706
+		addEvent( banner, "change", function( event ) {
707
+			var params = {};
708
+			params[ event.target.name ] = event.target.checked ? true : undefined;
709
+			window.location = QUnit.url( params );
710
+		});
711
+	}
712
+
713
+	var toolbar = id("qunit-testrunner-toolbar");
714
+	if ( toolbar ) {
715
+		var filter = document.createElement("input");
716
+		filter.type = "checkbox";
717
+		filter.id = "qunit-filter-pass";
718
+		addEvent( filter, "click", function() {
719
+			var ol = document.getElementById("qunit-tests");
720
+			if ( filter.checked ) {
721
+				ol.className = ol.className + " hidepass";
722
+			} else {
723
+				var tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
724
+				ol.className = tmp.replace(/ hidepass /, " ");
725
+			}
726
+			if ( defined.sessionStorage ) {
727
+				if (filter.checked) {
728
+					sessionStorage.setItem("qunit-filter-passed-tests", "true");
729
+				} else {
730
+					sessionStorage.removeItem("qunit-filter-passed-tests");
731
+				}
732
+			}
733
+		});
734
+		if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) {
735
+			filter.checked = true;
736
+			var ol = document.getElementById("qunit-tests");
737
+			ol.className = ol.className + " hidepass";
738
+		}
739
+		toolbar.appendChild( filter );
740
+
741
+		var label = document.createElement("label");
742
+		label.setAttribute("for", "qunit-filter-pass");
743
+		label.innerHTML = "Hide passed tests";
744
+		toolbar.appendChild( label );
745
+	}
746
+
747
+	var main = id('qunit-fixture');
748
+	if ( main ) {
749
+		config.fixture = main.innerHTML;
750
+	}
751
+
752
+	if (config.autostart) {
753
+		QUnit.start();
754
+	}
755
+};
756
+
757
+addEvent(window, "load", QUnit.load);
758
+
759
+function done() {
760
+	config.autorun = true;
761
+
762
+	// Log the last module results
763
+	if ( config.currentModule ) {
764
+		QUnit.moduleDone( {
765
+			name: config.currentModule,
766
+			failed: config.moduleStats.bad,
767
+			passed: config.moduleStats.all - config.moduleStats.bad,
768
+			total: config.moduleStats.all
769
+		} );
770
+	}
771
+
772
+	var banner = id("qunit-banner"),
773
+		tests = id("qunit-tests"),
774
+		runtime = +new Date - config.started,
775
+		passed = config.stats.all - config.stats.bad,
776
+		html = [
777
+			'Tests completed in ',
778
+			runtime,
779
+			' milliseconds.<br/>',
780
+			'<span class="passed">',
781
+			passed,
782
+			'</span> tests of <span class="total">',
783
+			config.stats.all,
784
+			'</span> passed, <span class="failed">',
785
+			config.stats.bad,
786
+			'</span> failed.'
787
+		].join('');
788
+
789
+	if ( banner ) {
790
+		banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");
791
+	}
792
+
793
+	if ( tests ) {
794
+		id( "qunit-testresult" ).innerHTML = html;
795
+	}
796
+
797
+	if ( config.altertitle && typeof document !== "undefined" && document.title ) {
798
+		// show ✖ for good, ✔ for bad suite result in title
799
+		// use escape sequences in case file gets loaded with non-utf-8-charset
800
+		document.title = [
801
+			(config.stats.bad ? "\u2716" : "\u2714"),
802
+			document.title.replace(/^[\u2714\u2716] /i, "")
803
+		].join(" ");
804
+	}
805
+
806
+	QUnit.done( {
807
+		failed: config.stats.bad,
808
+		passed: passed,
809
+		total: config.stats.all,
810
+		runtime: runtime
811
+	} );
812
+}
813
+
814
+function validTest( name ) {
815
+	var filter = config.filter,
816
+		run = false;
817
+
818
+	if ( !filter ) {
819
+		return true;
820
+	}
821
+
822
+	var not = filter.charAt( 0 ) === "!";
823
+	if ( not ) {
824
+		filter = filter.slice( 1 );
825
+	}
826
+
827
+	if ( name.indexOf( filter ) !== -1 ) {
828
+		return !not;
829
+	}
830
+
831
+	if ( not ) {
832
+		run = true;
833
+	}
834
+
835
+	return run;
836
+}
837
+
838
+// so far supports only Firefox, Chrome and Opera (buggy)
839
+// could be extended in the future to use something like https://github.com/csnover/TraceKit
840
+function sourceFromStacktrace() {
841
+	try {
842
+		throw new Error();
843
+	} catch ( e ) {
844
+		if (e.stacktrace) {
845
+			// Opera
846
+			return e.stacktrace.split("\n")[6];
847
+		} else if (e.stack) {
848
+			// Firefox, Chrome
849
+			return e.stack.split("\n")[4];
850
+		} else if (e.sourceURL) {
851
+			// Safari, PhantomJS
852
+			// TODO sourceURL points at the 'throw new Error' line above, useless
853
+			//return e.sourceURL + ":" + e.line;
854
+		}
855
+	}
856
+}
857
+
858
+function escapeHtml(s) {
859
+	if (!s) {
860
+		return "";
861
+	}
862
+	s = s + "";
863
+	return s.replace(/[\&"<>\\]/g, function(s) {
864
+		switch(s) {
865
+			case "&": return "&amp;";
866
+			case "\\": return "\\\\";
867
+			case '"': return '\"';
868
+			case "<": return "&lt;";
869
+			case ">": return "&gt;";
870
+			default: return s;
871
+		}
872
+	});
873
+}
874
+
875
+function synchronize( callback ) {
876
+	config.queue.push( callback );
877
+
878
+	if ( config.autorun && !config.blocking ) {
879
+		process();
880
+	}
881
+}
882
+
883
+function process() {
884
+	var start = (new Date()).getTime();
885
+
886
+	while ( config.queue.length && !config.blocking ) {
887
+		if ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) {
888
+			config.queue.shift()();
889
+		} else {
890
+			window.setTimeout( process, 13 );
891
+			break;
892
+		}
893
+	}
894
+	if (!config.blocking && !config.queue.length) {
895
+		done();
896
+	}
897
+}
898
+
899
+function saveGlobal() {
900
+	config.pollution = [];
901
+
902
+	if ( config.noglobals ) {
903
+		for ( var key in window ) {
904
+			config.pollution.push( key );
905
+		}
906
+	}
907
+}
908
+
909
+function checkPollution( name ) {
910
+	var old = config.pollution;
911
+	saveGlobal();
912
+
913
+	var newGlobals = diff( config.pollution, old );
914
+	if ( newGlobals.length > 0 ) {
915
+		ok( false, "Introduced global variable(s): " + newGlobals.join(", ") );
916
+	}
917
+
918
+	var deletedGlobals = diff( old, config.pollution );
919
+	if ( deletedGlobals.length > 0 ) {
920
+		ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") );
921
+	}
922
+}
923
+
924
+// returns a new Array with the elements that are in a but not in b
925
+function diff( a, b ) {
926
+	var result = a.slice();
927
+	for ( var i = 0; i < result.length; i++ ) {
928
+		for ( var j = 0; j < b.length; j++ ) {
929
+			if ( result[i] === b[j] ) {
930
+				result.splice(i, 1);
931
+				i--;
932
+				break;
933
+			}
934
+		}
935
+	}
936
+	return result;
937
+}
938
+
939
+function fail(message, exception, callback) {
940
+	if ( typeof console !== "undefined" && console.error && console.warn ) {
941
+		console.error(message);
942
+		console.error(exception);
943
+		console.warn(callback.toString());
944
+
945
+	} else if ( window.opera && opera.postError ) {
946
+		opera.postError(message, exception, callback.toString);
947
+	}
948
+}
949
+
950
+function extend(a, b) {
951
+	for ( var prop in b ) {
952
+		if ( b[prop] === undefined ) {
953
+			delete a[prop];
954
+		} else {
955
+			a[prop] = b[prop];
956
+		}
957
+	}
958
+
959
+	return a;
960
+}
961
+
962
+function addEvent(elem, type, fn) {
963
+	if ( elem.addEventListener ) {
964
+		elem.addEventListener( type, fn, false );
965
+	} else if ( elem.attachEvent ) {
966
+		elem.attachEvent( "on" + type, fn );
967
+	} else {
968
+		fn();
969
+	}
970
+}
971
+
972
+function id(name) {
973
+	return !!(typeof document !== "undefined" && document && document.getElementById) &&
974
+		document.getElementById( name );
975
+}
976
+
977
+// Test for equality any JavaScript type.
978
+// Discussions and reference: http://philrathe.com/articles/equiv
979
+// Test suites: http://philrathe.com/tests/equiv
980
+// Author: Philippe Rathé <prathe@gmail.com>
981
+QUnit.equiv = function () {
982
+
983
+	var innerEquiv; // the real equiv function
984
+	var callers = []; // stack to decide between skip/abort functions
985
+	var parents = []; // stack to avoiding loops from circular referencing
986
+
987
+	// Call the o related callback with the given arguments.
988
+	function bindCallbacks(o, callbacks, args) {
989
+		var prop = QUnit.objectType(o);
990
+		if (prop) {
991
+			if (QUnit.objectType(callbacks[prop]) === "function") {
992
+				return callbacks[prop].apply(callbacks, args);
993
+			} else {
994
+				return callbacks[prop]; // or undefined
995
+			}
996
+		}
997
+	}
998
+
999
+	var callbacks = function () {
1000
+
1001
+		// for string, boolean, number and null
1002
+		function useStrictEquality(b, a) {
1003
+			if (b instanceof a.constructor || a instanceof b.constructor) {
1004
+				// to catch short annotaion VS 'new' annotation of a
1005
+				// declaration
1006
+				// e.g. var i = 1;
1007
+				// var j = new Number(1);
1008
+				return a == b;
1009
+			} else {
1010
+				return a === b;
1011
+			}
1012
+		}
1013
+
1014
+		return {
1015
+			"string" : useStrictEquality,
1016
+			"boolean" : useStrictEquality,
1017
+			"number" : useStrictEquality,
1018
+			"null" : useStrictEquality,
1019
+			"undefined" : useStrictEquality,
1020
+
1021
+			"nan" : function(b) {
1022
+				return isNaN(b);
1023
+			},
1024
+
1025
+			"date" : function(b, a) {
1026
+				return QUnit.objectType(b) === "date"
1027
+						&& a.valueOf() === b.valueOf();
1028
+			},
1029
+
1030
+			"regexp" : function(b, a) {
1031
+				return QUnit.objectType(b) === "regexp"
1032
+						&& a.source === b.source && // the regex itself
1033
+						a.global === b.global && // and its modifers
1034
+													// (gmi) ...
1035
+						a.ignoreCase === b.ignoreCase
1036
+						&& a.multiline === b.multiline;
1037
+			},
1038
+
1039
+			// - skip when the property is a method of an instance (OOP)
1040
+			// - abort otherwise,
1041
+			// initial === would have catch identical references anyway
1042
+			"function" : function() {
1043
+				var caller = callers[callers.length - 1];
1044
+				return caller !== Object && typeof caller !== "undefined";
1045
+			},
1046
+
1047
+			"array" : function(b, a) {
1048
+				var i, j, loop;
1049
+				var len;
1050
+
1051
+				// b could be an object literal here
1052
+				if (!(QUnit.objectType(b) === "array")) {
1053
+					return false;
1054
+				}
1055
+
1056
+				len = a.length;
1057
+				if (len !== b.length) { // safe and faster
1058
+					return false;
1059
+				}
1060
+
1061
+				// track reference to avoid circular references
1062
+				parents.push(a);
1063
+				for (i = 0; i < len; i++) {
1064
+					loop = false;
1065
+					for (j = 0; j < parents.length; j++) {
1066
+						if (parents[j] === a[i]) {
1067
+							loop = true;// dont rewalk array
1068
+						}
1069
+					}
1070
+					if (!loop && !innerEquiv(a[i], b[i])) {
1071
+						parents.pop();
1072
+						return false;
1073
+					}
1074
+				}
1075
+				parents.pop();
1076
+				return true;
1077
+			},
1078
+
1079
+			"object" : function(b, a) {
1080
+				var i, j, loop;
1081
+				var eq = true; // unless we can proove it
1082
+				var aProperties = [], bProperties = []; // collection of
1083
+														// strings
1084
+
1085
+				// comparing constructors is more strict than using
1086
+				// instanceof
1087
+				if (a.constructor !== b.constructor) {
1088
+					return false;
1089
+				}
1090
+
1091
+				// stack constructor before traversing properties
1092
+				callers.push(a.constructor);
1093
+				// track reference to avoid circular references
1094
+				parents.push(a);
1095
+
1096
+				for (i in a) { // be strict: don't ensures hasOwnProperty
1097
+								// and go deep
1098
+					loop = false;
1099
+					for (j = 0; j < parents.length; j++) {
1100
+						if (parents[j] === a[i])
1101
+							loop = true; // don't go down the same path
1102
+											// twice
1103
+					}
1104
+					aProperties.push(i); // collect a's properties
1105
+
1106
+					if (!loop && !innerEquiv(a[i], b[i])) {
1107
+						eq = false;
1108
+						break;
1109
+					}
1110
+				}
1111
+
1112
+				callers.pop(); // unstack, we are done
1113
+				parents.pop();
1114
+
1115
+				for (i in b) {
1116
+					bProperties.push(i); // collect b's properties
1117
+				}
1118
+
1119
+				// Ensures identical properties name
1120
+				return eq
1121
+						&& innerEquiv(aProperties.sort(), bProperties
1122
+								.sort());
1123
+			}
1124
+		};
1125
+	}();
1126
+
1127
+	innerEquiv = function() { // can take multiple arguments
1128
+		var args = Array.prototype.slice.apply(arguments);
1129
+		if (args.length < 2) {
1130
+			return true; // end transition
1131
+		}
1132
+
1133
+		return (function(a, b) {
1134
+			if (a === b) {
1135
+				return true; // catch the most you can
1136
+			} else if (a === null || b === null || typeof a === "undefined"
1137
+					|| typeof b === "undefined"
1138
+					|| QUnit.objectType(a) !== QUnit.objectType(b)) {
1139
+				return false; // don't lose time with error prone cases
1140
+			} else {
1141
+				return bindCallbacks(a, callbacks, [ b, a ]);
1142
+			}
1143
+
1144
+			// apply transition with (1..n) arguments
1145
+		})(args[0], args[1])
1146
+				&& arguments.callee.apply(this, args.splice(1,
1147
+						args.length - 1));
1148
+	};
1149
+
1150
+	return innerEquiv;
1151
+
1152
+}();
1153
+
1154
+/**
1155
+ * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
1156
+ * http://flesler.blogspot.com Licensed under BSD
1157
+ * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
1158
+ *
1159
+ * @projectDescription Advanced and extensible data dumping for Javascript.
1160
+ * @version 1.0.0
1161
+ * @author Ariel Flesler
1162
+ * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
1163
+ */
1164
+QUnit.jsDump = (function() {
1165
+	function quote( str ) {
1166
+		return '"' + str.toString().replace(/"/g, '\\"') + '"';
1167
+	};
1168
+	function literal( o ) {
1169
+		return o + '';
1170
+	};
1171
+	function join( pre, arr, post ) {
1172
+		var s = jsDump.separator(),
1173
+			base = jsDump.indent(),
1174
+			inner = jsDump.indent(1);
1175
+		if ( arr.join )
1176
+			arr = arr.join( ',' + s + inner );
1177
+		if ( !arr )
1178
+			return pre + post;
1179
+		return [ pre, inner + arr, base + post ].join(s);
1180
+	};
1181
+	function array( arr, stack ) {
1182
+		var i = arr.length, ret = Array(i);
1183
+		this.up();
1184
+		while ( i-- )
1185
+			ret[i] = this.parse( arr[i] , undefined , stack);
1186
+		this.down();
1187
+		return join( '[', ret, ']' );
1188
+	};
1189
+
1190
+	var reName = /^function (\w+)/;
1191
+
1192
+	var jsDump = {
1193
+		parse:function( obj, type, stack ) { //type is used mostly internally, you can fix a (custom)type in advance
1194
+			stack = stack || [ ];
1195
+			var parser = this.parsers[ type || this.typeOf(obj) ];
1196
+			type = typeof parser;
1197
+			var inStack = inArray(obj, stack);
1198
+			if (inStack != -1) {
1199
+				return 'recursion('+(inStack - stack.length)+')';
1200
+			}
1201
+			//else
1202
+			if (type == 'function')  {
1203
+					stack.push(obj);
1204
+					var res = parser.call( this, obj, stack );
1205
+					stack.pop();
1206
+					return res;
1207
+			}
1208
+			// else
1209
+			return (type == 'string') ? parser : this.parsers.error;
1210
+		},
1211
+		typeOf:function( obj ) {
1212
+			var type;
1213
+			if ( obj === null ) {
1214
+				type = "null";
1215
+			} else if (typeof obj === "undefined") {
1216
+				type = "undefined";
1217
+			} else if (QUnit.is("RegExp", obj)) {
1218
+				type = "regexp";
1219
+			} else if (QUnit.is("Date", obj)) {
1220
+				type = "date";
1221
+			} else if (QUnit.is("Function", obj)) {
1222
+				type = "function";
1223
+			} else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") {
1224
+				type = "window";
1225
+			} else if (obj.nodeType === 9) {
1226
+				type = "document";
1227
+			} else if (obj.nodeType) {
1228
+				type = "node";
1229
+			} else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) {
1230
+				type = "array";
1231
+			} else {
1232
+				type = typeof obj;
1233
+			}
1234
+			return type;
1235
+		},
1236
+		separator:function() {
1237
+			return this.multiline ?	this.HTML ? '<br />' : '\n' : this.HTML ? '&nbsp;' : ' ';
1238
+		},
1239
+		indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing
1240
+			if ( !this.multiline )
1241
+				return '';
1242
+			var chr = this.indentChar;
1243
+			if ( this.HTML )
1244
+				chr = chr.replace(/\t/g,'   ').replace(/ /g,'&nbsp;');
1245
+			return Array( this._depth_ + (extra||0) ).join(chr);
1246
+		},
1247
+		up:function( a ) {
1248
+			this._depth_ += a || 1;
1249
+		},
1250
+		down:function( a ) {
1251
+			this._depth_ -= a || 1;
1252
+		},
1253
+		setParser:function( name, parser ) {
1254
+			this.parsers[name] = parser;
1255
+		},
1256
+		// The next 3 are exposed so you can use them
1257
+		quote:quote,
1258
+		literal:literal,
1259
+		join:join,
1260
+		//
1261
+		_depth_: 1,
1262
+		// This is the list of parsers, to modify them, use jsDump.setParser
1263
+		parsers:{
1264
+			window: '[Window]',
1265
+			document: '[Document]',
1266
+			error:'[ERROR]', //when no parser is found, shouldn't happen
1267
+			unknown: '[Unknown]',
1268
+			'null':'null',
1269
+			'undefined':'undefined',
1270
+			'function':function( fn ) {
1271
+				var ret = 'function',
1272
+					name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE
1273
+				if ( name )
1274
+					ret += ' ' + name;
1275
+				ret += '(';
1276
+
1277
+				ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join('');
1278
+				return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' );
1279
+			},
1280
+			array: array,
1281
+			nodelist: array,
1282
+			arguments: array,
1283
+			object:function( map, stack ) {
1284
+				var ret = [ ];
1285
+				QUnit.jsDump.up();
1286
+				for ( var key in map ) {
1287
+				    var val = map[key];
1288
+					ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(val, undefined, stack));
1289
+                }
1290
+				QUnit.jsDump.down();
1291
+				return join( '{', ret, '}' );
1292
+			},
1293
+			node:function( node ) {
1294
+				var open = QUnit.jsDump.HTML ? '&lt;' : '<',
1295
+					close = QUnit.jsDump.HTML ? '&gt;' : '>';
1296
+
1297
+				var tag = node.nodeName.toLowerCase(),
1298
+					ret = open + tag;
1299
+
1300
+				for ( var a in QUnit.jsDump.DOMAttrs ) {
1301
+					var val = node[QUnit.jsDump.DOMAttrs[a]];
1302
+					if ( val )
1303
+						ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' );
1304
+				}
1305
+				return ret + close + open + '/' + tag + close;
1306
+			},
1307
+			functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function
1308
+				var l = fn.length;
1309
+				if ( !l ) return '';
1310
+
1311
+				var args = Array(l);
1312
+				while ( l-- )
1313
+					args[l] = String.fromCharCode(97+l);//97 is 'a'
1314
+				return ' ' + args.join(', ') + ' ';
1315
+			},
1316
+			key:quote, //object calls it internally, the key part of an item in a map
1317
+			functionCode:'[code]', //function calls it internally, it's the content of the function
1318
+			attribute:quote, //node calls it internally, it's an html attribute value
1319
+			string:quote,
1320
+			date:quote,
1321
+			regexp:literal, //regex
1322
+			number:literal,
1323
+			'boolean':literal
1324
+		},
1325
+		DOMAttrs:{//attributes to dump from nodes, name=>realName
1326
+			id:'id',
1327
+			name:'name',
1328
+			'class':'className'
1329
+		},
1330
+		HTML:false,//if true, entities are escaped ( <, >, \t, space and \n )
1331
+		indentChar:'  ',//indentation unit
1332
+		multiline:true //if true, items in a collection, are separated by a \n, else just a space.
1333
+	};
1334
+
1335
+	return jsDump;
1336
+})();
1337
+
1338
+// from Sizzle.js
1339
+function getText( elems ) {
1340
+	var ret = "", elem;
1341
+
1342
+	for ( var i = 0; elems[i]; i++ ) {
1343
+		elem = elems[i];
1344
+
1345
+		// Get the text from text nodes and CDATA nodes
1346
+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
1347
+			ret += elem.nodeValue;
1348
+
1349
+		// Traverse everything else, except comment nodes
1350
+		} else if ( elem.nodeType !== 8 ) {
1351
+			ret += getText( elem.childNodes );
1352
+		}
1353
+	}
1354
+
1355
+	return ret;
1356
+};
1357
+
1358
+//from jquery.js
1359
+function inArray( elem, array ) {
1360
+	if ( array.indexOf ) {
1361
+		return array.indexOf( elem );
1362
+	}
1363
+
1364
+	for ( var i = 0, length = array.length; i < length; i++ ) {
1365
+		if ( array[ i ] === elem ) {
1366
+			return i;
1367
+		}
1368
+	}
1369
+
1370
+	return -1;
1371
+}
1372
+
1373
+/*
1374
+ * Javascript Diff Algorithm
1375
+ *  By John Resig (http://ejohn.org/)
1376
+ *  Modified by Chu Alan "sprite"
1377
+ *
1378
+ * Released under the MIT license.
1379
+ *
1380
+ * More Info:
1381
+ *  http://ejohn.org/projects/javascript-diff-algorithm/
1382
+ *
1383
+ * Usage: QUnit.diff(expected, actual)
1384
+ *
1385
+ * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
1386
+ */
1387
+QUnit.diff = (function() {
1388
+	function diff(o, n) {
1389
+		var ns = {};
1390
+		var os = {};
1391
+
1392
+		for (var i = 0; i < n.length; i++) {
1393
+			if (ns[n[i]] == null)
1394
+				ns[n[i]] = {
1395
+					rows: [],
1396
+					o: null
1397
+				};
1398
+			ns[n[i]].rows.push(i);
1399
+		}
1400
+
1401
+		for (var i = 0; i < o.length; i++) {
1402
+			if (os[o[i]] == null)
1403
+				os[o[i]] = {
1404
+					rows: [],
1405
+					n: null
1406
+				};
1407
+			os[o[i]].rows.push(i);
1408
+		}
1409
+
1410
+		for (var i in ns) {
1411
+			if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
1412
+				n[ns[i].rows[0]] = {
1413
+					text: n[ns[i].rows[0]],
1414
+					row: os[i].rows[0]
1415
+				};
1416
+				o[os[i].rows[0]] = {
1417
+					text: o[os[i].rows[0]],
1418
+					row: ns[i].rows[0]
1419
+				};
1420
+			}
1421
+		}
1422
+
1423
+		for (var i = 0; i < n.length - 1; i++) {
1424
+			if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null &&
1425
+			n[i + 1] == o[n[i].row + 1]) {
1426
+				n[i + 1] = {
1427
+					text: n[i + 1],
1428
+					row: n[i].row + 1
1429
+				};
1430
+				o[n[i].row + 1] = {
1431
+					text: o[n[i].row + 1],
1432
+					row: i + 1
1433
+				};
1434
+			}
1435
+		}
1436
+
1437
+		for (var i = n.length - 1; i > 0; i--) {
1438
+			if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
1439
+			n[i - 1] == o[n[i].row - 1]) {
1440
+				n[i - 1] = {
1441
+					text: n[i - 1],
1442
+					row: n[i].row - 1
1443
+				};
1444
+				o[n[i].row - 1] = {
1445
+					text: o[n[i].row - 1],
1446
+					row: i - 1
1447
+				};
1448
+			}
1449
+		}
1450
+
1451
+		return {
1452
+			o: o,
1453
+			n: n
1454
+		};
1455
+	}
1456
+
1457
+	return function(o, n) {
1458
+		o = o.replace(/\s+$/, '');
1459
+		n = n.replace(/\s+$/, '');
1460
+		var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/));
1461
+
1462
+		var str = "";
1463
+
1464
+		var oSpace = o.match(/\s+/g);
1465
+		if (oSpace == null) {
1466
+			oSpace = [" "];
1467
+		}
1468
+		else {
1469
+			oSpace.push(" ");
1470
+		}
1471
+		var nSpace = n.match(/\s+/g);
1472
+		if (nSpace == null) {
1473
+			nSpace = [" "];
1474
+		}
1475
+		else {
1476
+			nSpace.push(" ");
1477
+		}
1478
+
1479
+		if (out.n.length == 0) {
1480
+			for (var i = 0; i < out.o.length; i++) {
1481
+				str += '<del>' + out.o[i] + oSpace[i] + "</del>";
1482
+			}
1483
+		}
1484
+		else {
1485
+			if (out.n[0].text == null) {
1486
+				for (n = 0; n < out.o.length && out.o[n].text == null; n++) {
1487
+					str += '<del>' + out.o[n] + oSpace[n] + "</del>";
1488
+				}
1489
+			}
1490
+
1491
+			for (var i = 0; i < out.n.length; i++) {
1492
+				if (out.n[i].text == null) {
1493
+					str += '<ins>' + out.n[i] + nSpace[i] + "</ins>";
1494
+				}
1495
+				else {
1496
+					var pre = "";
1497
+
1498
+					for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) {
1499
+						pre += '<del>' + out.o[n] + oSpace[n] + "</del>";
1500
+					}
1501
+					str += " " + out.n[i].text + nSpace[i] + pre;
1502
+				}
1503
+			}
1504
+		}
1505
+
1506
+		return str;
1507
+	};
1508
+})();
1509
+
1510
+})(this);
0 1511
\ No newline at end of file
1 1512
new file mode 100644
... ...
@@ -0,0 +1,23 @@
1
+<?php
2
+ob_start();
3
+?>
4
+ 	<?php ob_start();?>
5
+	<head><title>test</title></head>
6
+ 	<?php
7
+	 $head = ob_get_contents();
8
+	 ob_end_clean();
9
+	?>
10
+<!DOCTYPE h2 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
11
+ <html><?php var_dump($head);?><body>
12
+    <h2><?php phpinfo();?></h2>
13
+ </body></html>
14
+ 
15
+<?php 
16
+$content = ob_get_contents();
17
+ob_end_clean();
18
+include '../application/includes/session.php';
19
+header('test:KO');
20
+
21
+var_dump($content);
22
+
23
+?>
0 24
\ No newline at end of file
1 25
new file mode 100644
... ...
@@ -0,0 +1,33 @@
1
+ 	<?php
2
+	include '../application/includes/session.php';
3
+	header('test:KO');
4
+	
5
+	//il faut faire attention, on peut imbriquzer les vecteurs de temporisation, et pas faire
6
+	// ce genre de script ( où les temporisations sont accolées....)
7
+	
8
+ 	ob_start();
9
+ 	?>
10
+	<head><title>test</title></head>
11
+ 	<?php
12
+	 $head = ob_get_contents();
13
+	 ob_end_clean();
14
+	?>
15
+
16
+<?php
17
+ob_start();
18
+?>
19
+<!DOCTYPE h2 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
20
+ <html><body>
21
+    <h2>ob</h2>
22
+ </body></html>
23
+ 
24
+<?php 
25
+var_dump($head);
26
+$content = ob_get_contents();
27
+ob_end_clean();
28
+
29
+
30
+
31
+var_dump($content);
32
+
33
+?>
0 34
\ No newline at end of file
1 35
new file mode 100755
... ...
@@ -0,0 +1,55 @@
1
+# [HTML5 Boilerplate](http://html5boilerplate.com)
2
+
3
+HTML5 Boilerplate is a professional front-end template that helps you build fast, robust, adaptable, and future-proof websites. Spend more time developing and less time reinventing the wheel.
4
+
5
+This project is the product of many years of iterative development and combined community knowledge. It does not impose a specific development philosophy or framework, so you're free to architect your code in the way that you want.
6
+
7
+
8
+## Quick start
9
+
10
+Clone the git repo - `git clone git://github.com/h5bp/html5-boilerplate.git` - or [download it](https://github.com/h5bp/html5-boilerplate/zipball/master)
11
+
12
+
13
+## Features
14
+
15
+* HTML5 ready. Use the new elements with confidence.
16
+* Cross-browser compatible (Chrome, Opera, Safari, Firefox 3.6+, IE6+).
17
+* Designed with progressive enhancement in mind.
18
+* CSS normalizations and common bug fixes.
19
+* IE-specific classes for easier cross-browser control.
20
+* A default print stylesheet, performance optimized.
21
+* Mobile browser optimizations.
22
+* Protection against any stray `console.log` causing JavaScript errors in IE6/7.
23
+* The latest jQuery via CDN, with a local fallback.
24
+* A custom Modernizr build for feature detection.
25
+* An optimized Google Analytics snippet.
26
+* Apache server caching, compression, and other configuration defaults for Grade-A performance.
27
+* Cross-domain Ajax and Flash.
28
+* "Delete-key friendly." Easy to strip out parts you don't need.
29
+* Extensive inline and accompanying documentation.
30
+
31
+
32
+## Contributing
33
+
34
+Anyone and everyone is welcome to [contribute](https://github.com/h5bp/html5-boilerplate/wiki/contribute). Hundreds of developers have helped make the HTML5 Boilerplate what it is today.
35
+
36
+
37
+## Project information
38
+
39
+* Source: http://github.com/h5bp/html5-boilerplate
40
+* Web: http://html5boilerplate.com
41
+* Docs: http://html5boilerplate.com/docs
42
+* Twitter: http://twitter.com/h5bp
43
+
44
+
45
+## License
46
+
47
+### Major components:
48
+
49
+* jQuery: MIT/GPL license
50
+* Modernizr: MIT/BSD license
51
+* Normalize.css: Public Domain
52
+
53
+### Everything else:
54
+
55
+The Unlicense (aka: public domain)
0 56
new file mode 100755
... ...
@@ -0,0 +1,4 @@
1
+# www.robotstxt.org/
2
+# http://code.google.com/web/controlcrawlindex/
3
+
4
+User-agent: *