]> git.ipfire.org Git - people/shoehn/ipfire.org.git/commitdiff
Website update.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 15 Jul 2012 09:18:08 +0000 (11:18 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 15 Jul 2012 09:18:08 +0000 (11:18 +0200)
136 files changed:
www/.gitignore [new file with mode: 0644]
www/Makefile [new file with mode: 0644]
www/static/css/bootstrap.min.css [new file with mode: 0644]
www/static/css/style.css
www/static/images/glyphicons-halflings-white.png [new file with mode: 0644]
www/static/images/glyphicons-halflings.png [new file with mode: 0644]
www/static/images/icons/social/facebook.png [new file with mode: 0644]
www/static/images/icons/social/rss.png [new file with mode: 0644]
www/static/images/icons/social/twitter.png [new file with mode: 0644]
www/static/images/page_icons/artwork.png [deleted file]
www/static/images/page_icons/development.png [deleted file]
www/static/images/page_icons/donation.png [deleted file]
www/static/images/page_icons/download-all.png [deleted file]
www/static/images/page_icons/download-developmemt.png [deleted file]
www/static/images/page_icons/download-mirrors.png [deleted file]
www/static/images/page_icons/download-mirrors_16.png [deleted file]
www/static/images/page_icons/download-torrents.png [deleted file]
www/static/images/page_icons/download-torrents_orginal.png [deleted file]
www/static/images/page_icons/downloads_torrents.png [deleted file]
www/static/images/page_icons/features.png [deleted file]
www/static/images/page_icons/imprint.png [deleted file]
www/static/images/page_icons/license.png [deleted file]
www/static/images/page_icons/news.png [deleted file]
www/static/images/page_icons/pr.png [deleted file]
www/static/images/page_icons/screenshots.png [deleted file]
www/static/images/page_icons/screenshots_orginal.png [deleted file]
www/static/js/bootstrap.min.js [new file with mode: 0644]
www/static/js/jquery.js
www/static/js/site.js [new file with mode: 0644]
www/templates/admin-base.html
www/templates/admin-downloads-base.html [new file with mode: 0644]
www/templates/admin-downloads-mirrors.html [new file with mode: 0644]
www/templates/admin-downloads.html [new file with mode: 0644]
www/templates/admin-index.html
www/templates/admin-login.html
www/templates/admin-planet-compose.html
www/templates/admin-planet.html
www/templates/base-1.html
www/templates/base-2.html
www/templates/base-feature.html
www/templates/base.html
www/templates/download-mirror-detail.html
www/templates/download-splash.html [new file with mode: 0644]
www/templates/downloads-all.html
www/templates/downloads-index.html
www/templates/downloads-mirrors.html
www/templates/downloads-older.html
www/templates/downloads.html
www/templates/error-500.html
www/templates/error.html
www/templates/index.html
www/templates/mirrors-item.html
www/templates/mirrors.html
www/templates/modules/download-button.html [new file with mode: 0644]
www/templates/modules/menu.html
www/templates/modules/mirrors-table.html
www/templates/modules/news-item.html
www/templates/modules/planet-entry.html
www/templates/modules/release-item.html
www/templates/modules/sidebar-release.html
www/templates/modules/stasy-table-devices.html
www/templates/modules/stasy-table-geo.html
www/templates/modules/stasy-table.html
www/templates/modules/tracker-peerlist.html
www/templates/news-author.html
www/templates/news-item.html
www/templates/news.html
www/templates/planet-main.html
www/templates/planet-posting.html
www/templates/planet-user.html
www/templates/stasy-index.html
www/templates/stasy-model-detail.html
www/templates/stasy-profile-detail.html
www/templates/stasy-profile-notfound.html
www/templates/stasy-profile.html
www/templates/stasy-stats-admin.html
www/templates/stasy-stats-cpu-flags.html
www/templates/stasy-stats-cpus.html
www/templates/stasy-stats-geo.html
www/templates/stasy-stats-memory.html
www/templates/stasy-stats-network.html
www/templates/stasy-stats-oses.html
www/templates/stasy-stats-virtual.html
www/templates/stasy-stats.html
www/templates/stasy-vendor-detail.html
www/templates/static/about.html [deleted file]
www/templates/static/artwork.html
www/templates/static/cebit.html
www/templates/static/chat.html [new file with mode: 0644]
www/templates/static/development.html
www/templates/static/donation.html
www/templates/static/features.html
www/templates/static/features/dial-in.html [deleted file]
www/templates/static/features/dialup.html [new file with mode: 0644]
www/templates/static/features/firewall.html
www/templates/static/features/hardware.html
www/templates/static/features/ids.html
www/templates/static/features/itsfree.html
www/templates/static/features/pakfire.html
www/templates/static/features/proxy.html
www/templates/static/features/proxy/content-filter.html
www/templates/static/features/proxy/update-accelerator.html
www/templates/static/features/proxy/virus-scanner.html
www/templates/static/features/qos.html
www/templates/static/features/security.html
www/templates/static/features/updates.html
www/templates/static/features/virtualization.html
www/templates/static/features/vpn.html
www/templates/static/features/vpn/ipsec.html
www/templates/static/features/vpn/openvpn.html
www/templates/static/features/wireless.html
www/templates/static/getinvolved.html [new file with mode: 0644]
www/templates/static/imprint.html
www/templates/static/pr.html [deleted file]
www/templates/static/press.html [new file with mode: 0644]
www/templates/static/screenshots.html [deleted file]
www/templates/static/support.html [deleted file]
www/templates/tracker-torrent-detail.html
www/templates/tracker-torrents.html
www/translations/de_DE.csv [deleted file]
www/translations/de_DE/LC_MESSAGES/webapp.po [new file with mode: 0644]
www/translations/webapp.pot [new file with mode: 0644]
www/webapp/__init__.py
www/webapp/backend/__init__.py
www/webapp/backend/accounts.py
www/webapp/backend/databases.py
www/webapp/backend/menu.py [deleted file]
www/webapp/backend/mirrors.py
www/webapp/backend/releases.py
www/webapp/backend/stasy.py
www/webapp/handlers.py
www/webapp/handlers_admin.py
www/webapp/handlers_base.py
www/webapp/handlers_download.py
www/webapp/handlers_nopaste.py [new file with mode: 0644]
www/webapp/ui_modules.py

diff --git a/www/.gitignore b/www/.gitignore
new file mode 100644 (file)
index 0000000..cd1f2c9
--- /dev/null
@@ -0,0 +1 @@
+*.mo
diff --git a/www/Makefile b/www/Makefile
new file mode 100644 (file)
index 0000000..1002c1e
--- /dev/null
@@ -0,0 +1,24 @@
+
+PO_PATH = translations
+POTFILE = $(PO_PATH)/webapp.pot
+POFILES = $(wildcard $(PO_PATH)/*/LC_MESSAGES/*.po)
+
+ALL_FILES = $(shell find . /usr/lib*/python*/site-packages/tornado -name "*.py" -or -name "*.html")
+
+.PHONY: pot
+pot: $(POTFILE)
+
+$(POTFILE): $(ALL_FILES)
+       xgettext --language=Python --from-code=UTF-8 --keyword=_:1,2 --keyword=N_ -d pakfire -o $(POTFILE) \
+               $(ALL_FILES)
+
+.PHONY: po
+po: $(POTFILE) $(patsubst %.po, %.mo, $(POFILES))
+
+%.po: $(POTFILE)
+       # Merge the POTFILE.
+       msgmerge $@ $(POTFILE) -o $@
+
+%.mo: %.po
+       # Compile the translations.
+       msgfmt $< -o $@
diff --git a/www/static/css/bootstrap.min.css b/www/static/css/bootstrap.min.css
new file mode 100644 (file)
index 0000000..cd444d6
--- /dev/null
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap v2.0.4
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Ubuntu","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;line-height:19px;color:#333;background-color:#fff}a{color:#880400;text-decoration:none}a:hover{color:#3c0200;text-decoration:underline}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.127659574%;*margin-left:2.0744680846382977%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.99999998999999%;*width:99.94680850063828%}.row-fluid .span11{width:91.489361693%;*width:91.4361702036383%}.row-fluid .span10{width:82.97872339599999%;*width:82.92553190663828%}.row-fluid .span9{width:74.468085099%;*width:74.4148936096383%}.row-fluid .span8{width:65.95744680199999%;*width:65.90425531263828%}.row-fluid .span7{width:57.446808505%;*width:57.3936170156383%}.row-fluid .span6{width:48.93617020799999%;*width:48.88297871863829%}.row-fluid .span5{width:40.425531911%;*width:40.3723404216383%}.row-fluid .span4{width:31.914893614%;*width:31.8617021246383%}.row-fluid .span3{width:23.404255317%;*width:23.3510638276383%}.row-fluid .span2{width:14.89361702%;*width:14.8404255306383%}.row-fluid .span1{width:6.382978723%;*width:6.329787233638298%}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:""}.container-fluid:after{clear:both}p{margin:0 0 9.5px}p small{font-size:14px;color:#999}.lead{margin-bottom:19px;font-size:20px;font-weight:200;line-height:28.5px}h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999}h1{font-size:30px;line-height:38px}h1 small{font-size:18px}h2{font-size:24px;line-height:38px}h2 small{font-size:18px}h3{font-size:18px;line-height:28.5px}h3 small{font-size:14px}h4,h5,h6{line-height:19px}h4{font-size:14px}h4 small{font-size:12px}h5{font-size:12px}h6{font-size:11px;color:#999;text-transform:uppercase}.page-header{padding-bottom:18px;margin:19px 0;border-bottom:1px solid #eee}.page-header h1{line-height:1}ul,ol{padding:0;margin:0 0 9.5px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}ul{list-style:disc}ol{list-style:decimal}li{line-height:19px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:19px}dt,dd{line-height:19px}dt{font-weight:bold;line-height:18px}dd{margin-left:9.5px}.dl-horizontal dt{float:left;width:120px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:130px}hr{margin:19px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}strong{font-weight:bold}em{font-style:italic}.muted{color:#999}abbr[title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 19px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:23.75px}blockquote small{display:block;line-height:19px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:19px;font-style:normal;line-height:19px}small{font-size:100%}cite{font-style:normal}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:15px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9px;margin:0 0 9.5px;font-size:14.8px;line-height:19px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:19px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 19px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:28.5px;font-size:24px;line-height:38px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:14.25px;color:#999}label,input,button,select,textarea{font-size:16px;font-weight:normal;line-height:19px}input,button,select,textarea{font-family:"Ubuntu","Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:19px;padding:4px;margin-bottom:9px;font-size:16px;line-height:19px;color:#555}input,textarea{width:210px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-ms-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer}input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}.uneditable-textarea{width:auto;height:auto}select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px}select{width:220px;border:1px solid #bbb}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.radio,.checkbox{min-height:18px;padding-left:18px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:930px}input.span11,textarea.span11,.uneditable-input.span11{width:850px}input.span10,textarea.span10,.uneditable-input.span10{width:770px}input.span9,textarea.span9,.uneditable-input.span9{width:690px}input.span8,textarea.span8,.uneditable-input.span8{width:610px}input.span7,textarea.span7,.uneditable-input.span7{width:530px}input.span6,textarea.span6,.uneditable-input.span6{width:450px}input.span5,textarea.span5,.uneditable-input.span5{width:370px}input.span4,textarea.span4,.uneditable-input.span4{width:290px}input.span3,textarea.span3,.uneditable-input.span3{width:210px}input.span2,textarea.span2,.uneditable-input.span2{width:130px}input.span1,textarea.span1,.uneditable-input.span1{width:50px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee;border-color:#ddd}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853}.control-group.warning .checkbox:focus,.control-group.warning .radio:focus,.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48}.control-group.error .checkbox:focus,.control-group.error .radio:focus,.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847}.control-group.success .checkbox:focus,.control-group.success .radio:focus,.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:18px 20px 19px;margin-top:19px;margin-bottom:19px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:""}.form-actions:after{clear:both}.uneditable-input{overflow:hidden;white-space:nowrap;cursor:not-allowed;background-color:#fff;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)}:-moz-placeholder{color:#999}:-ms-input-placeholder{color:#999}::-webkit-input-placeholder{color:#999}.help-block,.help-inline{color:#555}.help-block{display:block;margin-bottom:9.5px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-prepend,.input-append{margin-bottom:5px}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:middle;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{z-index:2}.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc}.input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;height:19px;min-width:16px;padding:4px 5px;font-weight:normal;line-height:19px;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:1px solid #ccc}.input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append .uneditable-input{border-right-color:#ccc;border-left-color:#eee}.input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:9.5px}legend+.control-group{margin-top:19px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:19px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:160px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:160px}.form-horizontal .help-block{margin-top:9.5px;margin-bottom:0}.form-horizontal .form-actions{padding-left:160px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:19px}.table th,.table td{padding:8px;line-height:19px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child 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;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5}table .span1{float:none;width:44px;margin-left:0}table .span2{float:none;width:124px;margin-left:0}table .span3{float:none;width:204px;margin-left:0}table .span4{float:none;width:284px;margin-left:0}table .span5{float:none;width:364px;margin-left:0}table .span6{float:none;width:444px;margin-left:0}table .span7{float:none;width:524px;margin-left:0}table .span8{float:none;width:604px;margin-left:0}table .span9{float:none;width:684px;margin-left:0}table .span10{float:none;width:764px;margin-left:0}table .span11{float:none;width:844px;margin-left:0}table .span12{float:none;width:924px;margin-left:0}table .span13{float:none;width:1004px;margin-left:0}table .span14{float:none;width:1084px;margin-left:0}table .span15{float:none;width:1164px;margin-left:0}table .span16{float:none;width:1244px;margin-left:0}table .span17{float:none;width:1324px;margin-left:0}table .span18{float:none;width:1404px;margin-left:0}table .span19{float:none;width:1484px;margin-left:0}table .span20{float:none;width:1564px;margin-left:0}table .span21{float:none;width:1644px;margin-left:0}table .span22{float:none;width:1724px;margin-left:0}table .span23{float:none;width:1804px;margin-left:0}table .span24{float:none;width:1884px;margin-left:0}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../images/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0}.icon-white{background-image:url("../images/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px}.icon-folder-open{background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:.3;filter:alpha(opacity=30)}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown:hover .caret,.open .caret{opacity:1;filter:alpha(opacity=100)}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:4px 0;margin:1px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:8.5px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:19px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;background-color:#880400}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:"\2191"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;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)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-ms-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-ms-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:19px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 10px 4px;margin-bottom:0;*margin-left:.3em;font-size:16px;line-height:19px;*line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-ms-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(top,#fff,#e6e6e6);background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff',endColorstr='#e6e6e6',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false);*zoom:1;-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)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-ms-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:9px 14px;font-size:18px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-large [class^="icon-"]{margin-top:1px}.btn-small{padding:5px 9px;font-size:14px;line-height:17px}.btn-small [class^="icon-"]{margin-top:-1px}.btn-mini{padding:2px 6px;font-size:14px;line-height:15px}.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn{border-color:#ccc;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.btn-primary{background-color:#881200;*background-color:#882600;background-image:-ms-linear-gradient(top,#880400,#882600);background-image:-webkit-gradient(linear,0 0,0 100%,from(#880400),to(#882600));background-image:-webkit-linear-gradient(top,#880400,#882600);background-image:-o-linear-gradient(top,#880400,#882600);background-image:-moz-linear-gradient(top,#880400,#882600);background-image:linear-gradient(top,#880400,#882600);background-repeat:repeat-x;border-color:#882600 #882600 #3c1100;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#880400',endColorstr='#882600',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#882600;*background-color:#6f1f00}.btn-primary:active,.btn-primary.active{background-color:#551800 \9}.btn-warning{background-color:#faa732;*background-color:#f89406;background-image:-ms-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(top,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450',endColorstr='#f89406',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{background-color:#da4f49;*background-color:#bd362f;background-image:-ms-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(top,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#bd362f',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{background-color:#5bb75b;*background-color:#51a351;background-image:-ms-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(top,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#62c462',endColorstr='#51a351',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{background-color:#49afcd;*background-color:#2f96b4;background-image:-ms-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(top,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de',endColorstr='#2f96b4',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{background-color:#414141;*background-color:#222;background-image:-ms-linear-gradient(top,#555,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#555),to(#222));background-image:-webkit-linear-gradient(top,#555,#222);background-image:-o-linear-gradient(top,#555,#222);background-image:-moz-linear-gradient(top,#555,#222);background-image:linear-gradient(top,#555,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#555555',endColorstr='#222222',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-group{position:relative;*margin-left:.3em;*zoom:1}.btn-group:before,.btn-group:after{display:table;content:""}.btn-group:after{clear:both}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:9.5px;margin-bottom:9.5px}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1}.btn-group>.btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.dropdown-toggle{*padding-top:4px;padding-right:8px;*padding-bottom:4px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini.dropdown-toggle{padding-right:5px;padding-left:5px}.btn-group>.btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px}.btn-group>.btn-large.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#882600}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:7px;margin-left:0}.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100)}.btn-mini .caret{margin-top:5px}.btn-small .caret{margin-top:6px}.btn-large .caret{margin-top:6px;border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-top:0;border-bottom:5px solid #000}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:.75;filter:alpha(opacity=75)}.alert{padding:8px 35px 8px 14px;margin-bottom:19px;color:#c09853;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert-heading{color:inherit}.alert .close{position:relative;top:-2px;right:-21px;line-height:18px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:19px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>.pull-right{float:right}.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:19px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#880400}.nav-list [class^="icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:8.5px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:19px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#fff;background-color:#880400}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{margin-top:6px;border-top-color:#880400;border-bottom-color:#880400}.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#3c0200;border-bottom-color:#3c0200}.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333;border-bottom-color:#333}.nav>.dropdown.active>a:hover{color:#000;cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.navbar{*position:relative;*z-index:2;margin-bottom:19px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#333333',endColorstr='#222222',GradientType=0);-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)}.navbar .container{width:auto}.nav-collapse.collapse{height:auto}.navbar{color:#999}.navbar .brand:hover{text-decoration:none}.navbar .brand{display:block;float:left;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#999}.navbar .navbar-text{margin-bottom:0;line-height:40px}.navbar .navbar-link{color:#999}.navbar .navbar-link:hover{color:#fff}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn{margin:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0}.navbar-search .search-query{padding:4px 9px;font-family:"Ubuntu","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#fff;background-color:#626262;border:1px solid #151515;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}.navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-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)}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right}.navbar .nav>li{display:block;float:left}.navbar .nav>li>a{float:none;padding:9px 10px 11px;line-height:19px;color:#999;text-decoration:none;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar .btn{display:inline-block;padding:4px 10px 4px;margin:5px 5px 6px;line-height:19px}.navbar .btn-group{padding:5px 5px 6px;margin:0}.navbar .nav>li>a:hover{color:#fff;text-decoration:none;background-color:transparent}.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#fff;text-decoration:none;background-color:#222}.navbar .divider-vertical{width:1px;height:40px;margin:0 9px;overflow:hidden;background-color:#222;border-right:1px solid #333}.navbar .nav.pull-right{margin-right:0;margin-left:10px}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;background-color:#2c2c2c;*background-color:#222;background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-image:-moz-linear-gradient(top,#333,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#333333',endColorstr='#222222',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{background-color:#222;*background-color:#151515}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#080808 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown .dropdown-toggle .caret,.navbar .nav li.dropdown.open .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.active .caret{opacity:1;filter:alpha(opacity=100)}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:transparent}.navbar .nav li.dropdown.active>.dropdown-toggle:hover{color:#fff}.navbar .pull-right .dropdown-menu,.navbar .dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right .dropdown-menu:before,.navbar .dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right .dropdown-menu:after,.navbar .dropdown-menu.pull-right:after{right:13px;left:auto}.breadcrumb{padding:7px 14px;margin:0 0 19px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top,#fff,#f5f5f5);background-image:-ms-linear-gradient(top,#fff,#f5f5f5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#fff,#f5f5f5);background-image:-o-linear-gradient(top,#fff,#f5f5f5);background-image:linear-gradient(top,#fff,#f5f5f5);background-repeat:repeat-x;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff',endColorstr='#f5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.breadcrumb li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb .divider{padding:0 5px;color:#999}.breadcrumb .active a{color:#333}.pagination{height:38px;margin:19px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*zoom:1;-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)}.pagination li{display:inline}.pagination a{float:left;padding:0 14px;line-height:36px;text-decoration:none;border:1px solid #ddd;border-left-width:0}.pagination a:hover,.pagination .active a{background-color:#f5f5f5}.pagination .active a{color:#999;cursor:default}.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999;cursor:default;background-color:transparent}.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pager{margin-bottom:19px;margin-left:0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;content:""}.pager:after{clear:both}.pager li{display:inline}.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager a:hover{text-decoration:none;background-color:#f5f5f5}.pager .next a{float:right}.pager .previous a{float:left}.pager .disabled a,.pager .disabled a:hover{color:#999;cursor:default;background-color:#fff}.modal-open .dropdown-menu{z-index:2050}.modal-open .dropdown.open{*z-index:2050}.modal-open .popover{z-index:2060}.modal-open .tooltip{z-index:2070}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:50%;left:50%;z-index:1050;width:560px;margin:-250px 0 0 -280px;overflow:auto;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-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}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-body{max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;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;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.tooltip{position:absolute;z-index:1020;display:block;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-2px}.tooltip.right{margin-left:2px}.tooltip.bottom{margin-top:2px}.tooltip.left{margin-left:-2px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top:5px solid #000;border-right:5px solid transparent;border-left:5px solid transparent}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-right:5px solid transparent;border-bottom:5px solid #000;border-left:5px solid transparent}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-right:5px solid #000;border-bottom:5px solid transparent}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px}.popover.top{margin-top:-5px}.popover.right{margin-left:5px}.popover.bottom{margin-top:5px}.popover.left{margin-left:-5px}.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-top:5px solid #000;border-right:5px solid transparent;border-left:5px solid transparent}.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-right:5px solid #000;border-bottom:5px solid transparent}.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-right:5px solid transparent;border-bottom:5px solid #000;border-left:5px solid transparent}.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000}.popover .arrow{position:absolute;width:0;height:0}.popover-inner{width:280px;padding:3px;overflow:hidden;background:#000;background:rgba(0,0,0,0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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)}.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.popover-content{padding:14px;background-color:#fff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:19px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:1;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)}a.thumbnail:hover{border-color:#880400;-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)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px}.label,.badge{font-size:13.536px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:18px;margin-bottom:18px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-ms-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(top,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#f9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{width:0;height:18px;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(top,#149bdf,#0480be);background-image:-ms-linear-gradient(top,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#149bdf',endColorstr='#0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-ms-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .bar{background-color:#149bdf;background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-ms-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(top,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#c43c35',GradientType=0)}.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-ms-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(top,#62c462,#57a957);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#62c462',endColorstr='#57a957',GradientType=0)}.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-ms-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(top,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de',endColorstr='#339bb9',GradientType=0)}.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-ms-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(top,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450',endColorstr='#f89406',GradientType=0)}.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:19px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:19px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel .item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-ms-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel .item>img{display:block;line-height:1}.carousel .active,.carousel .next,.carousel .prev{display:block}.carousel .active{left:0}.carousel .next,.carousel .prev{position:absolute;top:0;width:100%}.carousel .next{left:100%}.carousel .prev{left:-100%}.carousel .next.left,.carousel .prev.right{left:0}.carousel .active.left{left:-100%}.carousel .active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:10px 15px 5px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{color:#fff}.hero-unit{padding:60px;margin-bottom:30px;background-color:#eee;-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;color:inherit}.hero-unit p{font-size:18px;font-weight:200;line-height:28.5px;color:inherit}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}
index dfefa2ee0b9da89177685888a8ef0b73c9b70daf..28e8a0129d06f3a5f4c63edc61c888c71e3f022c 100644 (file)
-
-/* This controls the width of the fluid width layouts */
-
-div.fluid {
-       width: 90% !important;
-}
-
-/* This controls the width of the fixed width layouts */
-div.fixed {
-       width: 980px !important;
-       margin: 0;
-}
-
-/* Basic Stuff */
-
-* {
-       margin: 0em;
-       padding: 0em;
-}
-html { overflow-y: scroll }
 body {
-  font-family: "Verdana", "Deja-Vu Sans", "Bitstream Vera Sans", sans-serif;
-  font-size: 0.9em;
-  background: #880400;
-  color: #585858;
-}
-
-h1,h2,h3,h4,h5,h6 {
-       font-weight: normal;
-       letter-spacing: -1px;
-       text-transform: lowercase;
-}
-
-h3,h4,h5,h6 {
-       color: #66000F;
-}
-
-h1 span {
-       font-weight: bold;
-}
-
-h3 span {
-       font-weight: bold;
-}
-
-h4 span {
-       font-weight: bold;
-}
-
-br.clear {
-       clear: both;
-}
-
-div.line {
-       border-top: 1px dotted #e1e1e1;
-       height: 0;
-       width: 100%;
-
-       margin-top: 1em;
-       margin-bottom: 0.8em;
-}
-
-img {
-       padding: 3px;
-       border: 0;
-}
-
-img.floatTL {
-       float: left;
-       margin-right: 1.5em;
-       margin-bottom: 1.5em;
-       margin-top: 0.5em;
-}
-
-img.floatTR {
-       float: right;
-       margin-left: 1.5em;
-       margin-bottom: 1.5em;
-       margin-top: 0.5em;
-}
-
-img.symbol {
-       float: left;
-       margin-bottom: 0em;
-       border: 0;
-}
-
-a {
-       text-decoration: underline;
-       color: #D90000;
-       border-style: none;
-}
-
-a:hover {
-       text-decoration: none;
-}
-
-ul.links {
-       /* list-style: none; */
-       padding-left: 1em;
-}
-
-ul.links li {
-       line-height: 1.5em;
-       font-size: 0.9em;
-       /* display: inline; */
-}
-
-ul.links li.first {
-}
-
-p {
-       line-height: 1.5em;
-}
-
-p.left {
-       float: left;
-}
-
-p.right {
-       float: right;
-}
-
-div.screenshots {
-       text-align: center;
-       margin-bottom: 1em;
-}
-
-div.screenshots img {
-       border: 1px dotted #e1e1e1;
-       padding: 0.5em;
-       margin-left: 1em;
-       margin-right: 1em;
-       vertical-align: text-top;
-}
-
-/* Header */
-
-#header {
-       width:100%;
-       height:102px;
-       background: url('../images/bg-menu99.png') repeat-x;
-}
-
-#header_inner {
-       position: relative;
-       width: 980px;
-       height:102px;
-       margin: 0 auto;
-}
-
-img.symbol {
-       margin: 0;
-       padding: 0;
-}
-
-/* Logo */
-
-#logo {
-       position: absolute;
-       top: 0;
-       float: left;
-}
-
-#header h1 {
-       float: left;
-       margin-left: 105px;
-       color: #eee;
-       font-size: 150%;
-}
-
-#header h2 {
-       float: left;
-       margin-left: 105px;
-       color: #E5CCD0;
-       font-size: 1.0em;
-       vertical-align: bottom;
-}
-
-/* Header Line's */
-#header_menu {
-       height: 37px;
-}
-
-#header_hostname {
-       height: 32px;
-}
-
-#header_slogan {
-       height: 31px;
-}
-
-/* Menu */
-
-#menu {
-       position: absolute;
-       left: 105px;
-       top: 0em;
-}
-
-#menu ul {
-       list-style: none;
-}
-
-#menu li {
-       float: left;
-}
-
-#menu li {
-       vertical-align: middle;
-       background: #333 url('../images/btn-break.png') center;
-}
-
-#menu li a {
-       margin-left: 1px; /*0.5em;*/
-       margin-right: 1px;
-       display: block;
-       padding: 10px 5px 0 8px;
-       height: 26px;
-       background: #333 url('../images/btn-empty.png') repeat-x center;
-       color: #ddd;
-       font-weight: bolder;
-       vertical-align: middle;
-       font-size: 0.8em;
-       text-decoration: none;
-}
-
-#menu li a.active {
-       background: #CA2F2F url('../images/btn-red2.png') repeat-x center;
-       color: #ddd;
-}
-
-#menu li a:hover {
-       background: #333 url('../images/btn-red2.png') repeat-x center;
-       color: #fff;
-}
-
-/* Main */
-
-#main_inner p {
-       text-align: justify;
-       margin-bottom: 0.5em;
-}
-
-#main_inner ul.list {
-       padding-left: 1.5em;
-       line-height: 1.5em;
-       text-align: justify;
-}
-
-#main_inner {
-       position: relative;
-       width: 950px;
-       margin: 0 auto;
-}
-
-#main_inner h3,h4 {
-       border-bottom: dotted 1px #E1E1E1;
-       position: relative;
-}
-
-#main_inner h3 {
-       font-size: 1.5em;
-       padding-bottom: 0.1em;
-       margin-bottom: 0.5em;
-}
-
-#main_inner h4 {
-       font-size: 1.2em;
-       padding-bottom: 0.175em;
-       margin-bottom: 0.25em;
-       margin-top: 0.95em;
-}
-
-#main_frame {
-       border: 0px;
-       border-collapse: collapse;
-       border-spacing: 0px;
-       margin: 0em;
-       padding: 0em;
-       width: 980px;
-       max-width: 980px;
-}
-
-#sh-tl {
-       background: url("../images/sh-tl.png") no-repeat right bottom;
-}
-
-#sh-top {
-       background: url("../images/sh-top.png") repeat-x bottom;
-}
-
-#sh-tr {
-       background: url("../images/sh-tr.png") no-repeat left bottom;
-}
-
-#sh-lft {
-       background: url("../images/sh-lft.png") repeat-y right;
-}
-
-#sh-rgt {
-       background: url("../images/sh-rgt.png") repeat-y left;
-}
-
-#sh-bl {
-       background: url("../images/sh-bl.png") no-repeat right top;
-}
-
-#sh-btn {
-       background: url("../images/sh-btn.png") repeat-x top;
-}
-
-#sh-br {
-       background: url("../images/sh-br.png") no-repeat left top;
-}
-
-#no-sh {
-       background-color: #fbfbfb;
-       width: 980px;
-}
-
-#sh-tl, #sh-top, #sh-tr, #sh-lft, #sh-rgt, #sh-bl, #sh-btn, #sh-br {
-  width: 16px;
-  height: 16px;
-  padding: 0px;
-  border-width: 0px;
-  border-style: none;
-}
-
-.banner {
-  border: 0;
-}
-
-.post {
-       margin-bottom: 40px;
-}
-
-.post .title {
-       text-transform: lowercase;
-       font-size: 1.5em;
-       font-weight: normal;
-       color: #606060;
-}
-
-.post .title a {
-       border: none;
-       color: #606060;
-}
-
-.post .meta {
-       padding-left: 2px;
-       padding-bottom: 2px;
-       text-align: left;
-       text-transform: lowercase;
-}
-
-.post .meta a {
-}
-
-.post .entry {
-       padding: 1.2em 1.2em;
-       border: 1px dotted #E4E4E4;
-       text-align: justify;
-}
-
-.post .entry ul {
-       padding-left: 1em;
-       padding-bottom: 0.5em;
-}
-
-.links {
-       padding-top: 20px;
-       text-transform: lowercase;
-}
-
-/* News */
-
-ul.news {
-       list-style: none;
-}
-
-/* Footer */
-
-#footer {
-       clear: both;
-       height: 26px;
-       color: #ddd;
-       text-align: center;
-       background: url("../images/ft.png") left top;
-       margin-top: 0em;
-       margin-bottom: 0em;
-       padding-top: 0.5em;
-       padding-bottom: 0.5em;
-       text-transform: lowercase;
-}
-
-.thumbnail {
-       position: relative;
-       z-index: 0;
-}
-
-.thumbnail:hover {
-       background-color: transparent;
-       z-index: 50;
-}
-
-.thumbnail span {
-       position: absolute;
-       background-color: #ffffe0;
-       padding: 5px;
-       left: -1000px;
-       border: 1px dashed gray;
-       visibility: hidden;
-       color: black;
-       text-decoration: none;
-}
-
-.thumbnail span img {
-       border-width: 0;
-       padding: 2px;
-}
-
-.thumbnail:hover span {
-       visibility: visible;
-       top: 0;
-       left: 60px;
-}
-
-a.feed {
-  margin-left: 3px;
-  padding: 0 0 0 19px;
-  background: url("../images/feed.png") no-repeat 0 50%;
-}
-
-/* LAYOUT - 2 COLUMNS */
-
-       /* Primary content */
-
-#columns2_primary {    
-       position: relative;
-       /* margin-right: 17em; */
-}
-
-#columns2_columnA {
        position: relative;
-       float: left;
-       padding: 1em 0.5em 0.5em 1em;
-       width: 710px;
-}
-
-#columns2_secondary {  
-       float: right;
-}
-       
-#columns2_columnB
-{
-       width: 12.0em;
-       float: left;
-       padding: 0em 1em 0.5em 1em;
-       border-left: dotted 1px #E1E1E1;
-}
-
-#columns2_columnB ul {
-       margin-left: 1em;
-}
-
-#columns2_columnB ul li {
-       margin-bottom: 0.2em;
-}
-
-#columns1_primary {
-       position: relative;
-}
-       
-#columns1_columnA {
-       position: relative;
-       padding: 1em 1em 0.5em 1em;
-       border: 1px solid white;
-}
-
-/* Tabs */
-.ui-tabs {
-       padding: .2em;
-       zoom: 1;
-}
-.ui-tabs .ui-tabs-nav {
-       list-style: none;
-       position: relative;
-       padding: .2em .2em 0;
-}
-.ui-tabs .ui-tabs-nav li {
-       position: relative;
-       float: left;
-       border-bottom-width: 0 !important;
-       margin: 0 .2em -1px 0;
-       padding: 0;
-}
-.ui-tabs .ui-tabs-nav li a {
-       float: left;
-       text-decoration: none;
-       padding: .5em .3em;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected {
-       padding-bottom: 1px;
-       border-bottom-width: 0;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a {
-       cursor: text;
-}
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a {
-       cursor: pointer;
-} /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel {
-       padding: 1em 0.6em;
-       display: block;
-       border-width: 0;
-       background: none;
-}
-.ui-tabs .ui-tabs-hide {
-       display: none !important;
-}
-/* Component containers */
-.ui-widget-content {
-    border: 1px solid #999/*{borderColorContent}*/;
-       background: #F5F5F5/*{bgColorContent}*/ 50%/*{bgContentXPos}*/ url(../images/ui-bg_flat_75_f5f5f5_40x100.png)/*{bgImgUrlDefault}*/50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/;
-       color: #222222/*{fcContent}*/;
-}
-.ui-widget-content a {
-       color: #222222/*{fcContent}*/;
-}
-.ui-widget-header {
-       border: 1px solid #aaaaaa/*{borderColorHeader}*/;
-       background: #cccccc/*{bgColorHeader}*/ url(/../images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/;
-       color: #222222/*{fcHeader}*/;
-       font-weight: bold;
-}
-.ui-widget-header a {
-       color: #222222/*{fcHeader}*/;
-}
-/* Interaction states */
-.ui-state-default, .ui-widget-content .ui-state-default {
-       border: 1px solid #d3d3d3/*{borderColorDefault}*/;
-       background: #e6e6e6/*{bgColorDefault}*/ url(../images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/;
-       font-weight: normal/*{fwDefault}*/;
-       color: #555555/*{fcDefault}*/;
-       outline: none;
-}
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited {
-       color: #555555/*{fcDefault}*/;
-       text-decoration: none;
-       outline: none;
-}
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus {
-       border: 1px solid #999999/*{borderColorHover}*/;
-       background: #dadada/*{bgColorHover}*/ url(../images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/;
-       font-weight: normal/*{fwDefault}*/;
-       color: #212121/*{fcHover}*/;
-       outline: none;
-}
-.ui-state-hover a, .ui-state-hover a:hover {
-       color: #212121/*{fcHover}*/;
-       text-decoration: none;
-       outline: none;
-}
-.ui-state-active, .ui-widget-content .ui-state-active {
-       border: 1px solid #aaaaaa/*{borderColorActive}*/;
-       background: #F5F5F5/*{bgColorActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/;
-       font-weight: normal/*{fwDefault}*/;
-       color: #212121/*{fcActive}*/;
-       outline: none;
-}
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {
-       color: #212121/*{fcActive}*/;
-       outline: none;
-       text-decoration: none;
-}
-/* Layout helpers */
-.ui-helper-clearfix:after {
-       content: ".";
-       display: block;
-       height: 0;
-       clear: both;
-       visibility: hidden;
-}
-.ui-helper-clearfix {
-       display: inline-block;
-}
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix {
-       height:1%;
-}
-.ui-helper-clearfix {
-       display:block;
-}
-/* end clearfix */
-.ui-helper-zfix {
-       width: 100%;
-       height: 100%;
-       top: 0;
-       left: 0;
-       position: absolute;
-       opacity: 0;
-       filter:Alpha(Opacity=0);
-}
-
-/* alternate */
-.odd {
-       background-color: #F9F9F9;
-}
-.even { 
-       background-color: #F1F1F1;
-}
-
-#screenshots {
-       background-color: #444;
-       padding: 10px;
-       width: 520px;
-}
-#screenshots ul { list-style: none; }
-#screenshots ul li { display: inline; }
-#screenshots ul img {
-       border: 5px solid #3e3e3e;
-       border-width: 5px 5px 20px;
-}
-#screenshots ul a:hover img {
-       border: 5px solid #fff;
-       border-width: 5px 5px 20px;
-       color: #fff;
-}
-#screenshots ul a:hover { color: #fff; }
-
-#jquery-overlay {
-       position: absolute;
-       top: 0;
-       left: 0;
-       z-index: 90;
-       width: 100%;
-       height: 500px;
-}
-#jquery-lightbox {
-       position: absolute;
-       top: 0;
-       left: 0;
-       width: 100%;
-       z-index: 100;
-       text-align: center;
-       line-height: 0;
-}
-#jquery-lightbox a img { border: none; }
-#lightbox-container-image-box {
-       position: relative;
-       background-color: #fff;
-       width: 250px;
-       height: 250px;
-       margin: 0 auto;
-}
-#lightbox-container-image { padding: 10px; }
-#lightbox-loading {
-       position: absolute;
-       top: 40%;
-       left: 0%;
-       height: 25%;
-       width: 100%;
-       text-align: center;
-       line-height: 0;
-}
-#lightbox-nav {
-       position: absolute;
-       top: 0;
-       left: 0;
-       height: 100%;
-       width: 100%;
-       z-index: 10;
-}
-#lightbox-container-image-box > #lightbox-nav { left: 0; }
-#lightbox-nav a { outline: none;}
-#lightbox-nav-btnPrev, #lightbox-nav-btnNext {
-       width: 49%;
-       height: 100%;
-       zoom: 1;
-       display: block;
-}
-#lightbox-nav-btnPrev { 
-       left: 0; 
-       float: left;
-}
-#lightbox-nav-btnNext { 
-       right: 0; 
-       float: right;
-}
-#lightbox-container-image-data-box {
-       font: 10px Verdana, Helvetica, sans-serif;
-       background-color: #fff;
-       margin: 0 auto;
-       line-height: 1.4em;
-       overflow: auto;
-       width: 100%;
-       padding: 0 10px 0;
-}
-#lightbox-container-image-data {
-       padding: 0 10px; 
-       color: #666; 
-}
-#lightbox-container-image-data #lightbox-image-details { 
-       width: 70%; 
-       float: left; 
-       text-align: left; 
-}      
-#lightbox-image-details-caption { font-weight: bold; }
-#lightbox-image-details-currentNumber {
-       display: block; 
-       clear: left; 
-       padding-bottom: 1.0em;  
-}                      
-#lightbox-secNav-btnClose {
-       width: 66px; 
-       float: right;
-       padding-bottom: 0.7em;  
-}
-
-/* IPFire Download Button */
-.button {
-    background: url(../images/buttons/download_core_96x320.png);
-    background-repeat: no-repeat;
-    background-position: right;
-    width: 700px;
-    height: 96px;
-}
-.button a, .button a:link, .button  a:visited {
-       color:#333;
-       text-decoration:none;
-}
-.button a:hover {
-       text-decoration: underline;
-}
-.button_text {
-       color:#333; 
-       font-size: 20px !important;
-       text-shadow: #666 1px 2px 2px;
-    padding: 51px 0px 0px 430px;
-}
-
-/* CeBIT Button */
-.cebit_button {
-    background: url(../images/buttons/cebit_96x320.png);
-    background-repeat: no-repeat;
-    background-position: right;
-    width: 700px;
-    height: 96px;
-}
-.cebit_button a, .cebit_button a:link, .cebit_button  a:visited {
-       color:#333;
-       text-decoration:none;
-}
-.cebit_button a:hover {
-       text-decoration: underline;
-}
-.cebit_button_text {
-       color:#333; 
-       font-size: 20px !important;
-       text-shadow: #666 1px 2px 2px;
-    padding: 51px 0px 0px 465px;
-}
-
-/* Public Relations linklists */
-.pr_li {
-    padding: 0px 0px 0px 20px;
-       line-height: 1.2em;  
-}
-
-div.bigdownload {
-       margin-top: 50px;
-       margin-left: 100px;
-       padding-top: 15px;
-       background: url(../images/download_button.png) no-repeat;
-       height: 84px;
-       width: 255px;
-       text-align: center;
-}
-
-div.bigdownload a {
-       color: white;
-       font-size: 1.3em;
-       font-weight: bold;
-       text-decoration: none;
-}
-
-div.bigdownload a:hover {
-       text-decoration: underline;
-}
-
-table.download {
-       width: 660px;
-       margin-left: 75px;
-}
-
-table.download td.icon {
-       width: 50px;
-}
-
-table.download td.link {
-       width: 180px;
-}
-
-table.download-torrents {
-       margin-bottom: 25px;
-       margin-left: 50px;
-       margin-top: 25px;
-       width: 600px;
-}
-
-table.download-torrents tr {
-       height: 24px;
-}
-
-table.download-torrents th {
-       text-align: left;
-}
-
-table.download-torrents th.peers, td.peers {
-       text-align: right;
-}
-
-table.download-torrents th.seeds, td.seeds {
-       text-align: right;
-}
-
-table.download-torrents th.peers,td.peers {
-       padding-left: 5px;
-}
-
-table.tracker-peerlist {
-       width: 85%;
-}
-
-table.tracker-peerlist th {
-       text-align: left;
-}
-
-table.download-torrents td {
-       padding: 1em;
-}
-
-table.tracker-peerlist td.ip {
-       text-align: right;
-       padding-right: 1em;
-}
-
-table.download-mirrors {
-       margin-bottom: 25px;
-       margin-left: 15px;
-       margin-top: 25px;
-       width: 700px;
-}
-
-table.download-mirrors tr {
-       height: 32px;
-}
-
-table.download-mirrors tr.legend {
-       text-align: right;
-}
-
-table.download-mirrors td {
-       padding-left: 10px;
-       padding-right: 10px;
-}
-
-/*
-table.download-mirrors tr.unreachable, td.unreachable {
-       border: 1px solid #f55;
-       background-color: #f99;
-}
-*/
-
-table.download-mirrors tr.ok, td.ok {
-       border: 1px solid #5f5;
-       background-color: #9f9;
-}
-
-table.download-mirrors tr.outdated, td.outdated {
-       border: 1px solid #55f;
-       background-color: #99f;
-}
-
-table.download-mirrors td.latency {
-       width: 70px;
-       text-align: right;
-}
-
-ul.sources li {
-       font-family: courier;
-       list-style-type: none;
-}
-
-table.mirrors {
-       /* border: 1px solid #606060; */
-}
-
-table.mirrors tr {
-       line-height: 2em;
-}
-
-table.mirrors td {
-       padding-left: 0.5em;
-       padding-right: 0.5em;
-}
-
-table.mirrors td.hostname {
-       text-align: right;
-       padding-left: 2em;
-       width: 10em;
-}
-
-table.mirrors td.down {
-       border: 1px solid #ff8888;
-       background-color: #ff9999;
-}
-
-table.mirrors td.outofsync {
-       border: 1px solid #ffffaa;
-       background-color: #ffff99;
-}
-
-table.mirrors td.up {
-       border: 1px solid #88ff88;
-       background-color: #aaffaa;
-}
-
-table.blocks {
-       width: 100%;
-       border: 1px solid #E4E4E4;
-}
-
-table.blocks td.block {
-       width: 33%;
-       padding: 1.5em;
-       vertical-align: top;
-}
-
-table.blocks td.block p {
-       text-align: justify;
-}
-
-table.blocks td.block span {
-       text-align: center;
-       font-size: 1.2em;
-}
-
-table.blocks td.block1,td.block3 {
+       padding-top: 50px;
+
+       /* SVG as background image (IE9/Chrome/Safari/Opera) */ 
+       background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAxIDEiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiPgo8bGluZWFyR3JhZGllbnQgaWQ9Imc2ODQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTAwJSIgeTE9IjEwMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMDAwMDAwIiBvZmZzZXQ9IjAiLz48c3RvcCBzdG9wLWNvbG9yPSIjODgwNDAwIiBvZmZzZXQ9IjU3JSIvPgo8L2xpbmVhckdyYWRpZW50Pgo8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2c2ODQpIiAvPgo8L3N2Zz4=);
+
+       background-image: linear-gradient(
+               bottom,
+               #000000 0%,
+               #880400 57%
+       );
+       background-image: -o-linear-gradient(
+               bottom,
+               #000000 0%,
+               #880400 57%
+       );
+       background-image: -moz-linear-gradient(
+               bottom,
+               #000000 0%,
+               #880400 57%
+       );
+       background-image: -webkit-linear-gradient(
+               bottom,
+               #000000 0%,
+               #880400 57
+       );
+       background-image: -ms-linear-gradient(
+               bottom,
+               #000000 0%,
+               #880400 57%
+       );
+       background-image: -webkit-gradient(
+               linear,
+               left bottom,
+               left top,
+               color-stop(0, #000000),
+               color-stop(0.57, #880400)
+       );
+       background-attachment: fixed;
+}
+
+.container-body {
        background-color: white;
-}
-
-table.blocks td.block2 {
-       background-color: #f5f5f5;
-}
-
-table.fireinfo {
-       width: 45em;
-       margin-left: 1.5em;
-}
-
-table.fireinfo td.key {
-       width: 12.5em;
-}
-
-table.fireinfo td.value {
-       width: 32.5em;
-}
-
-table.cpufeatures tr {
-       line-height: 1.2em;
-}
-
-table.cpufeatures td {
-       padding-left: 0.1em;
-       padding-right: 0.1em;
-}
-
-table.cpufeatures td.enabled {
-       border: 1px solid #88ff88;
-       background-color: #aaffaa;
-}
-
-table.cpufeatures td.disabled {
-       border: 1px solid #ff8888;
-       background-color: #ff9999;
-}
-
-table.stats {
-       width: 45em;
-       margin-left: 1.5em;
-}
-
-table.stats td.key {
-       width: 12.5em;
-}
-
-table.stats td.value {
-       width: 2.5em;
-       text-align: right;
-}
 
-table.stats td.bar {
-       width: 30em;
+       padding-top: 10px;
+       padding-left: 15px;
+       padding-right: 15px;
+       padding-bottom: 10px;
 }
 
-table.stats td.bar p {
-       background-color: #880400;
+table.table-fireinfo td.bar {
+       width: 70%;
 }
 
-table.dial-in {
-       border: 2px solid #e1e1e1;
-       margin-left: 2em;
+table.table-fireinfo td.key {
+       width: 20%;
 }
 
-table.dial-in td {
-       border: 1px solid #e1e1e1;
+table.table-fireinfo td.val {
+       width: 10%;
 }
diff --git a/www/static/images/glyphicons-halflings-white.png b/www/static/images/glyphicons-halflings-white.png
new file mode 100644 (file)
index 0000000..3bf6484
Binary files /dev/null and b/www/static/images/glyphicons-halflings-white.png differ
diff --git a/www/static/images/glyphicons-halflings.png b/www/static/images/glyphicons-halflings.png
new file mode 100644 (file)
index 0000000..79bc568
Binary files /dev/null and b/www/static/images/glyphicons-halflings.png differ
diff --git a/www/static/images/icons/social/facebook.png b/www/static/images/icons/social/facebook.png
new file mode 100644 (file)
index 0000000..791d9e0
Binary files /dev/null and b/www/static/images/icons/social/facebook.png differ
diff --git a/www/static/images/icons/social/rss.png b/www/static/images/icons/social/rss.png
new file mode 100644 (file)
index 0000000..6e0f166
Binary files /dev/null and b/www/static/images/icons/social/rss.png differ
diff --git a/www/static/images/icons/social/twitter.png b/www/static/images/icons/social/twitter.png
new file mode 100644 (file)
index 0000000..6d6f3d9
Binary files /dev/null and b/www/static/images/icons/social/twitter.png differ
diff --git a/www/static/images/page_icons/artwork.png b/www/static/images/page_icons/artwork.png
deleted file mode 100644 (file)
index b913e81..0000000
Binary files a/www/static/images/page_icons/artwork.png and /dev/null differ
diff --git a/www/static/images/page_icons/development.png b/www/static/images/page_icons/development.png
deleted file mode 100644 (file)
index 5417ad1..0000000
Binary files a/www/static/images/page_icons/development.png and /dev/null differ
diff --git a/www/static/images/page_icons/donation.png b/www/static/images/page_icons/donation.png
deleted file mode 100644 (file)
index 5f7717c..0000000
Binary files a/www/static/images/page_icons/donation.png and /dev/null differ
diff --git a/www/static/images/page_icons/download-all.png b/www/static/images/page_icons/download-all.png
deleted file mode 100644 (file)
index 496a6f7..0000000
Binary files a/www/static/images/page_icons/download-all.png and /dev/null differ
diff --git a/www/static/images/page_icons/download-developmemt.png b/www/static/images/page_icons/download-developmemt.png
deleted file mode 100644 (file)
index cb58eae..0000000
Binary files a/www/static/images/page_icons/download-developmemt.png and /dev/null differ
diff --git a/www/static/images/page_icons/download-mirrors.png b/www/static/images/page_icons/download-mirrors.png
deleted file mode 100644 (file)
index 39fc17f..0000000
Binary files a/www/static/images/page_icons/download-mirrors.png and /dev/null differ
diff --git a/www/static/images/page_icons/download-mirrors_16.png b/www/static/images/page_icons/download-mirrors_16.png
deleted file mode 100644 (file)
index 7055ddc..0000000
Binary files a/www/static/images/page_icons/download-mirrors_16.png and /dev/null differ
diff --git a/www/static/images/page_icons/download-torrents.png b/www/static/images/page_icons/download-torrents.png
deleted file mode 100644 (file)
index 885e20f..0000000
Binary files a/www/static/images/page_icons/download-torrents.png and /dev/null differ
diff --git a/www/static/images/page_icons/download-torrents_orginal.png b/www/static/images/page_icons/download-torrents_orginal.png
deleted file mode 100644 (file)
index 88a18db..0000000
Binary files a/www/static/images/page_icons/download-torrents_orginal.png and /dev/null differ
diff --git a/www/static/images/page_icons/downloads_torrents.png b/www/static/images/page_icons/downloads_torrents.png
deleted file mode 100644 (file)
index 65315ee..0000000
Binary files a/www/static/images/page_icons/downloads_torrents.png and /dev/null differ
diff --git a/www/static/images/page_icons/features.png b/www/static/images/page_icons/features.png
deleted file mode 100644 (file)
index 010b0d1..0000000
Binary files a/www/static/images/page_icons/features.png and /dev/null differ
diff --git a/www/static/images/page_icons/imprint.png b/www/static/images/page_icons/imprint.png
deleted file mode 100644 (file)
index 09e078f..0000000
Binary files a/www/static/images/page_icons/imprint.png and /dev/null differ
diff --git a/www/static/images/page_icons/license.png b/www/static/images/page_icons/license.png
deleted file mode 100644 (file)
index e1920d6..0000000
Binary files a/www/static/images/page_icons/license.png and /dev/null differ
diff --git a/www/static/images/page_icons/news.png b/www/static/images/page_icons/news.png
deleted file mode 100644 (file)
index f6a539e..0000000
Binary files a/www/static/images/page_icons/news.png and /dev/null differ
diff --git a/www/static/images/page_icons/pr.png b/www/static/images/page_icons/pr.png
deleted file mode 100644 (file)
index 2608d27..0000000
Binary files a/www/static/images/page_icons/pr.png and /dev/null differ
diff --git a/www/static/images/page_icons/screenshots.png b/www/static/images/page_icons/screenshots.png
deleted file mode 100644 (file)
index 054929d..0000000
Binary files a/www/static/images/page_icons/screenshots.png and /dev/null differ
diff --git a/www/static/images/page_icons/screenshots_orginal.png b/www/static/images/page_icons/screenshots_orginal.png
deleted file mode 100644 (file)
index c5b0b46..0000000
Binary files a/www/static/images/page_icons/screenshots_orginal.png and /dev/null differ
diff --git a/www/static/js/bootstrap.min.js b/www/static/js/bootstrap.min.js
new file mode 100644 (file)
index 0000000..1435698
--- /dev/null
@@ -0,0 +1,6 @@
+/*!
+* Bootstrap.js by @fat & @mdo
+* Copyright 2012 Twitter, Inc.
+* http://www.apache.org/licenses/LICENSE-2.0.txt
+*/
+!function(a){a(function(){"use strict",a.support.transition=function(){var a=function(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd",transition:"transitionend"},c;for(c in b)if(a.style[c]!==undefined)return b[c]}();return a&&{end:a}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=c,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(b){return b||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(a){return a||(this.paused=!0),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this,j=a.Event("slide");this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h]();if(e.hasClass("active"))return;if(a.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(j);if(j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{this.$element.trigger(j);if(j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=a.extend({},a.fn.carousel.defaults,typeof c=="object"&&c);e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():f.interval&&e.cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b,c,d,e;if(this.transitioning)return;b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find("> .accordion-group > .in");if(d&&d.length){e=d.data("collapse");if(e&&e.transitioning)return;d.collapse("hide"),e||d.data("collapse",null)}this.$element[b](0),this.transition("addClass",a.Event("show"),"shown"),this.$element[b](this.$element[0][c])},hide:function(){var b;if(this.transitioning)return;b=this.dimension(),this.reset(this.$element[b]()),this.transition("removeClass",a.Event("hide"),"hidden"),this.$element[b](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a!==null?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c.type=="show"&&e.reset(),e.transitioning=0,e.$element.trigger(d)};this.$element.trigger(c);if(c.isDefaultPrevented())return;this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e,f,g;if(c.is(".disabled, :disabled"))return;return f=c.attr("data-target"),f||(f=c.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,"")),e=a(f),e.length||(e=c.parent()),g=e.hasClass("open"),d(),g||e.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown",".dropdown form",function(a){a.stopPropagation()}).on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(f,this)):f.call(this)):b&&b()}function f(){this.$backdrop.remove(),this.$backdrop=null}function g(){var b=this;this.isShown&&this.options.keyboard?a(document).on("keyup.dismiss.modal",function(a){a.which==27&&b.hide()}):this.isShown||a(document).off("keyup.dismiss.modal")}"use strict";var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this))};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this,c=a.Event("show");this.$element.trigger(c);if(this.isShown||c.isDefaultPrevented())return;a("body").addClass("modal-open"),this.isShown=!0,g.call(this),e.call(this,function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in"),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();var e=this;b=a.Event("hide"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,a("body").removeClass("modal-open"),g.call(this),this.$element.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?c.call(this):d.call(this)}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({},e.data(),c.data());b.preventDefault(),e.modal(f)})})}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},isHTML:function(a){return typeof a!="string"||a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3||/^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(a)},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.isHTML(b)?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0}}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.isHTML(b)?"html":"text"](b),a.find(".popover-content > *")[this.isHTML(c)?"html":"text"](c),a.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body"),this.refresh(),this.process()}"use strict",b.prototype={constructor:b,refresh:function(){var b=this,c;this.offsets=a([]),this.targets=a([]),c=this.$body.find(this.selector).map(function(){var b=a(this),c=b.data("target")||b.attr("href"),d=/^#\w/.test(c)&&a(c);return d&&c.length&&[[d.position().top,c]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},activate:function(b){var c,d;this.activeTarget=b,a(this.selector).parent(".active").removeClass("active"),d=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',c=a(d).parent("li").addClass("active"),c.parent(".dropdown-menu")&&(c=c.closest("li.dropdown").addClass("active")),c.trigger("activate")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f,g;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],g=a.Event("show",{relatedTarget:e}),b.trigger(g);if(g.isDefaultPrevented())return;f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(a)).change(),this.hide()},updater:function(a){return a},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c=this,d,e;return this.query=this.$element.val(),this.query?(d=a.grep(this.source,function(a){return c.matcher(a)}),d=this.sorter(d),d.length?this.render(d.slice(0,this.options.items)).show():this.shown?this.hide():this):this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){var b=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return a.replace(new RegExp("("+b+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keypress,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},keyup:function(a){switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},keypress:function(a){if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:if(a.type!="keydown")break;a.preventDefault(),this.prev();break;case 40:if(a.type!="keydown")break;a.preventDefault(),this.next()}a.stopPropagation()},blur:function(a){var b=this;setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>'},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery);
\ No newline at end of file
index 8f3ca2e2daf435edb66e57a0b8681aeda957c865..16ad06c5acaad09ee4d6e9d7c428506db028aeeb 100644 (file)
@@ -1,167 +1,4 @@
-/*!
- * jQuery JavaScript Library v1.4.4
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu Nov 11 19:04:53 2010 -0500
- */
-(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
-h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
-h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
-"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
-e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
-"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
-a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
-s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
-j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
-toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
--1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
-if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
-if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
-b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
-!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
-l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
-z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
-s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
-s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
-[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
-false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
-k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
-scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
-1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
-"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
-c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
-else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
-a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
-c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
-a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
-colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
-1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
-l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
-"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
-if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
-a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
-attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
-b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
-c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
-arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
-d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
-c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
-w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
-8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
-"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
-d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
-Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
-c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
-var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
-"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
-xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
-B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
-"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
-0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
-a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
-1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
-"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
-c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
-(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
-[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
-break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
-q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
-l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
-return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
-B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
-POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
-i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
-i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
-"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
-m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
-true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
-g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
-0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
-"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
-i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
-if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
-g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
-for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
-i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
-n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
-function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
-p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
-t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
-function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
-c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
-not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
-h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
-c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
-2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
-b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
-e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={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,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
-else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
-c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
-b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
-this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
-prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
-b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
-1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
-d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
-jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
-zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
-h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
-if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
-d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
-e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
-"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
-!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
-getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
-script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
-!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
-false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
-A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
-b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
-c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
-c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
-encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
-[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
-e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
-if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
-3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
-d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
-d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
-"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
-1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
-d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
-Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
-var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
-this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
-this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
-c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
-b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
-h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
-for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
-parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
-height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
-f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
-"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
-e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
-c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
-c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
-b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);
+/*! jQuery v1.7.2 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(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 ca(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 b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(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 bZ(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===bS,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=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),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 bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}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;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}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])}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)?+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.2",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!=null&&a==a.window},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){if(typeof c!="string"||!c)return null;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,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},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,n=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"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(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]){j&&f<=l&&(l--,f<=m&&m--),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)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};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=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.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:p.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,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});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,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},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){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this: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(c)}});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,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},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.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];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,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&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,coords:!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=/(?:^|\s)hover(\.\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")};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,g=p.selector),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(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=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);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){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!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=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(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.origType+"."+e.namespace:e.origType,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||d===11){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));o.match.globalPOS=p;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.globalPOS,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|bdi|canvas|data|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+")[\\s/>]","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){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},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(){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){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.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(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},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,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}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||f.isXMLDoc(a)||!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,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},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 bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"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=bu.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(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$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))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=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)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.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(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),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)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.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(bM,"")).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||bN.test(this.nodeName)||bH.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(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\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:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},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:bY(bS),ajaxTransport:bY(bT),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?ca(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=cb(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=bG.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(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.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]!=="*"?", "+bW+"; 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=bZ(bT,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)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.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(cd,l),b.url===j&&(e&&(k=k.replace(cd,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 ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,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,ce&&delete cg[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);try{m.text=h.responseText}catch(a){}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=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("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.contains(d.ownerDocument.documentElement,d))&&f._data(d,"olddisplay",cu(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(ct("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(ct("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,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&"expand"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){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||cu(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],cm.test(h)?(q=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),q?(f._data(this,"toggle"+i,q==="show"?"hide":"show"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?"":"px"),p!=="px"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]==="-="?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,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:ct("show",1),slideUp:ct("hide",1),slideToggle:ct("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){return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},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=cq||cr(),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(){f._data(e.elem,"fxshow"+e.prop)===b&&(e.options.hide?f._data(e.elem,"fxshow"+e.prop,e.start):e.options.show&&f._data(e.elem,"fxshow"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=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=cq||cr(),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(co),co=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(cp.concat.apply([],cp),function(a,b){b.indexOf("margin")&&(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 cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position==="fixed")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position==="relative"||j.position==="static")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position==="fixed"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},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({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/www/static/js/site.js b/www/static/js/site.js
new file mode 100644 (file)
index 0000000..79e77bf
--- /dev/null
@@ -0,0 +1,38 @@
+$.query = function(name){
+       var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
+       return results[1] || 0;
+}
+
+$("a.download-splash").click(function(event) {
+       event.preventDefault();
+       linkLocation = this.href;
+
+       window.location = "http://downloads.ipfire.org/download-splash?file="+linkLocation;
+});
+
+if (/.*download-splash.*/i.test(window.location.href)) {
+       $("p.download-path").ready(function(){
+               var valid = false;
+               var allowed_prefixes = [
+                       "http://downloads.ipfire.org/",
+               ]
+
+               var file_url = $.query("file");
+
+               // Only accept URLs beginning with our known prefix.
+               for (i in allowed_prefixes) {
+                       prefix = allowed_prefixes[i];
+                       if (file_url.substring(0, prefix.length) == prefix) {
+                               valid = true;
+                       }
+        }
+
+        if (valid) {
+                       $("p.download-path").prepend($("<a>", {
+                               href: encodeURI(file_url),
+                               text: file_url
+                       }))
+                       setTimeout(function() { window.location = file_url }, "2000");
+               }
+       });
+}
index c069b536f14daf01d343b9f5f0685fb0f772f3b1..f144d455d420b9232ebae10e30fa65a2d9c1ebfe 100644 (file)
@@ -2,12 +2,13 @@
  
 {% block title %}{{ _("IPFire Admin Area") }}{% end %}
 
-{% block sidebar %}
+{% block bodyB %}
        <h4>{{ _("Options") }}</h4>
 
        <ul class="list">
                <!-- <li><a href="/accounts">{{ _("Accounts") }}</a></li> -->
                <!-- <li><a href="/mirrors">{{ _("Mirrors") }}</a></li> -->
                <li><a href="/planet">{{ _("Planet") }}</a></li>
+               <li><a href="/downloads">{{ _("Downloads") }}</a></li>
        </ul>
 {% end %}
diff --git a/www/templates/admin-downloads-base.html b/www/templates/admin-downloads-base.html
new file mode 100644 (file)
index 0000000..e73fb14
--- /dev/null
@@ -0,0 +1,13 @@
+{% extends "admin-base.html" %}
+
+{% block sidebar %}
+       <p>
+               <a href="/">{{ _("Back to home") }}</a>
+       </p>
+
+       <h4>{{ _("Options") }}</h4>
+
+       <ul class="list">
+               <li><a href="/downloads/mirrors">{{ _("Mirror stats") }}</a></li>
+       </ul>
+{% end block %}
diff --git a/www/templates/admin-downloads-mirrors.html b/www/templates/admin-downloads-mirrors.html
new file mode 100644 (file)
index 0000000..c83be77
--- /dev/null
@@ -0,0 +1,13 @@
+{% extends "admin-downloads-base.html" %}
+
+{% block content %}
+       <div id="post">
+               <h3>{{ _("Download statistics") }}</h3>
+
+               <h4>{{ _("Mirror load from today") }}</h4>
+               {{ modules.StasyTable(mirror_load_today, sortby="percentage") }}
+
+               <h4>{{ _("Mirror load") }}</h4>
+               {{ modules.StasyTable(mirror_load_total, sortby="percentage") }}
+       </div>
+{% end %}
diff --git a/www/templates/admin-downloads.html b/www/templates/admin-downloads.html
new file mode 100644 (file)
index 0000000..ea4d5b9
--- /dev/null
@@ -0,0 +1,27 @@
+{% extends "admin-downloads-base.html" %}
+
+{% block body %}
+       <div id="post">
+               <h3>{{ _("Download statistics") }}</h3>
+
+               <h4>{{ _("Download counters") }}</h4>
+               <table>
+                       <tr>
+                               <td>{{ _("Today") }}</td>
+                               <td>{{ downloads_today }}</td>
+                       </tr>
+                       <tr>
+                               <td>{{ _("Yesterday") }}</td>
+                               <td>{{ downloads_yesterday }}</td>
+                       </tr>
+                       <tr>
+                               <td>{{ _("Total") }}</td>
+                               <td>{{ downloads_total }}</td>
+                       </tr>
+               </table>
+
+               <h4>{{ _("Downloads by country") }}</h4>
+               {{ modules.StasyGeoTable(downloads_locations_today) }}
+               {{ modules.StasyGeoTable(downloads_locations_total) }}
+       </div>
+{% end %}
index e0ee87ef77aa735020d0ad63409b8bae36444fa1..999a34660377650e05e6be6d06ff90557b21d57f 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "admin-base.html" %}
 
-{% block content %}
+{% block bodyA %}
        <div id="post">
                <h3>{{ _("Admin Area") }}</h3>
        </div>
index 581a799a4c7ecb9d37db49d027c4b234ee6eb250..55bd4877384784c176f7f27e3dc06a791bffa73e 100644 (file)
@@ -2,7 +2,7 @@
 
 {% block title %}{{ _("Please login") }}{% end block %}
 
-{% block content %}
+{% block body %}
        <!-- XXX needs styling -->
        <form name="login" method="POST">
                <input type="text" name="name" />
index edf5d3020e2f77dae5746fe7f8381b2aceebf220..0a8ef63f93126800ea6c803f2cb11916f6982ba4 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "admin-base.html" %}
 
-{% block content %}
+{% block bodyA %}
        <div class="post">
                <h3>{{ _("Compose new entry") }}</h3>
                <form name="entry" method="post">
                }
        </script>
 {% end block %}
-
-{% block sidebar %}
-       <h4>Syntax info</h4>
-       <ul>
-               <li>
-                       <a href="http://de.wikipedia.org/wiki/Markdown" target="_blank">Wikipedia</a>
-               </li>
-       </ul>
-{% end block %}
index 6a225d3398c6a0300ed5051d7f15d9aa2f59c154..def3f3da38eac6af8024fca40bea4921b579b810 100644 (file)
@@ -1,9 +1,9 @@
 {% extends "admin-base.html" %}
 
-{% block content %}
+{% block bodyA %}
        <div id="post">
                <h3>{{ _("Planet Administrator") }}</h3>
-               
+
                <p>
                        <a href="/planet/compose">{{ _("Compose new entry") }}</a>
                </p>
index f3ad838c1756822ea4b77089328ceb2737988a28..94d9808cc760156cb7ab46e326c0267f3406125e 100644 (file)
@@ -1,10 +1 @@
 {% extends "base.html" %}
-
-{% block columns %}
-       <div id="columns1_primary">
-               <div id="columns1_columnA">
-                       {% block content %}{% end block %}
-                       <br class="clear" />
-               </div>
-       </div>
-{% end block %}
index 5fdf682701394a8eb2585fe1f2ff87603b3d281e..11b05fef1ab8a2cd770b0a03715ff9e66e5f706f 100644 (file)
@@ -1,18 +1,13 @@
 {% extends "base.html" %}
 
-{% block columns %}
-       <div id="columns2_primary">
-               <div id="columns2_columnA">
-                       {% block content %}{% end block %}
-                       <br class="clear" />
+{% block body %}
+       <div class="row">
+               <div class="span9">
+                       {% block bodyA %}{% end block %}
                </div>
-       </div>
-       <div id="columns2_secondary">
-               <div id="columns2_columnB">
-                       {% block sidebar %}
-                               {{ modules.SidebarBanner() }}
-                       {% end block %}
-                       <br class="clear" />
+
+               <div class="span3">
+                       {% block bodyB %}{% end block %}
                </div>
        </div>
 {% end block %}
index 5534665bde40202a459f5c48c1fc592dcd33458d..219a052b18464a03f2f3a94d61cf8492cad0f676 100644 (file)
@@ -1,53 +1,71 @@
 {% extends "base-2.html" %}
 
-{% block sidebar %}
-       <h4>{{ _("Highlights") }}</h4>
+{% block bodyB %}
        <ul>
-               <li><a href="/about">{{ _("About IPFire") }}</a></li>
-               <li><a href="/features/security">{{ _("Security") }}</a></li>
-               <li><a href="/features/firewall">{{ _("Firewall") }}</a></li>
-               <li><a href="/features/pakfire">{{ _("Pakfire") }}</a></li>
-               <li><a href="/features/updates">{{ _("Updates") }}</a></li>
-               <li><a href="/features/itsfree">{{ _("It's free") }}</a></li>
+               <li>
+                       <a href="/features">{{ _("About IPFire") }}</a>
+               </li>
+               <li>
+                       <a href="/features/security">{{ _("Security") }}</a>
+               </li>
+               <li>
+                       <a href="/features/firewall">{{ _("Firewall") }}</a>
+               </li>
+               <li>
+                       <a href="/features/pakfire">{{ _("Pakfire") }}</a>
+               </li>
+               <li>
+                       <a href="/features/updates">{{ _("Updates") }}</a>
+               </li>
+               <li>
+                       <a href="/features/itsfree">{{ _("It's free") }}</a>
+               </li>
        </ul>
 
-       <h4>{{ _("Features") }}</h4>
+       <h3>{{ _("Features") }}</h3>
        <ul>
-               <li><a href="/features/dial-in">{{ _("Dial-in") }}</a></li>
-               <li><a href="/features/proxy">{{ _("Web proxy") }}</a></li>
+               <li>
+                       <a href="/features/dialup">{{ _("Dialup") }}</a>
+               </li>
+               <li>
+                       <a href="/features/proxy">{{ _("Web proxy") }}</a>
+               </li>
                <ul>
-                       <li><a href="/features/proxy/content-filter">{{ _("Content filter") }}</a></li>
-                       <li><a href="/features/proxy/update-accelerator">{{ _("Update accelerator") }}</a></li>
-                       <li><a href="/features/proxy/virus-scanner">{{ _("Virus scan") }}</a></li>
+                       <li>
+                               <a href="/features/proxy/content-filter">{{ _("Content filter") }}</a>
+                       </li>
+                       <li>
+                               <a href="/features/proxy/update-accelerator">{{ _("Update accelerator") }}</a>
+                       </li>
+                       <li>
+                               <a href="/features/proxy/virus-scanner">{{ _("Virus scan") }}</a>
+                       </li>
                </ul>
-               <li><a href="/features/vpn">{{ _("VPN") }}</a></li>
+               <li>
+                       <a href="/features/vpn">{{ _("VPN") }}</a>
+               </li>
                <ul>
-                       <li><a href="/features/vpn/ipsec">{{ _("IPsec") }}</a></li>
-                       <li><a href="/features/vpn/openvpn">{{ _("OpenVPN") }}</a></li>
+                       <li>
+                               <a href="/features/vpn/ipsec">{{ _("IPsec") }}</a>
+                       </li>
+                       <li>
+                               <a href="/features/vpn/openvpn">{{ _("OpenVPN") }}</a>
+                       </li>
                </ul>
-               <li><a href="/features/ids">{{ _("Intrusion detection") }}</a></li>
-               <li><a href="/features/qos">{{ _("Quality of Service") }}</a></li>
-               <li><a href="/features/hardware">{{ _("Hardware") }}</a></li>
-               <li><a href="/features/virtualization">{{ _("Virtualization") }}</a></li>
+               <li>
+                       <a href="/features/ids">{{ _("Intrusion detection") }}</a>
+               </li>
+               <li>
+                       <a href="/features/qos">{{ _("Quality of Service") }}</a>
+               </li>
+               <li>
+                       <a href="/features/hardware">{{ _("Hardware") }}</a>
+               </li>
+               <li>
+                       <a href="/features/virtualization">{{ _("Virtualization") }}</a>
+               </li>
+               <li>
+                       <a href="/features/wireless">{{ _("Wireless AP") }}</a>
+               </li>
        </ul>
-
-       <h4>{{ _("Addons") }}</h4>
-       <ul>
-               <li><a href="/features/addons">{{ _("All addons") }}</a></li>
-               <li><a href="/features/wireless">{{ _("Wireless AP") }}</a></li>
-               <li><a href="/features/fileserver">{{ _("File and print service") }}</a></li>
-               <li><a href="/features/mailserver">{{ _("Mail server") }}</a></li>
-       </ul>
-{% end block %}
-
-{% block javascript %}
-       <script type="text/javascript">
-               $(function() {
-                       $("a[rel=screens]").fancybox({
-                               'titlePosition' : 'inside',
-                               'transitionIn'  : 'elastic',
-                               'transitionOut' : 'elastic'
-                       });
-               });
-       </script>
 {% end block %}
index 80c83409ea540129fd928dbd98d908d80305869e..6f52ca95a336be6e67fdcde0b50a5c8809d381d3 100644 (file)
@@ -1,85 +1,79 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
+<!DOCTYPE html>
+<html lang="en">
        <head>
-               <title>{{ hostname }} - {% block title %}{% end block %}</title>
+               <title>{{ hostname }} - {% block title %}{{ _("No title given") }}{% end block %}</title>
+               <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+               <meta name="author" content="IPFire.org - IPFire Development Team" />
+               <meta name="verify-v1" content="2LEf3W8naILGWVy2dhedSVEHPXTpp2xFNVsHXZMH1JI=" />
 
                <!-- Your locale is {{ locale.code }} -->
 
-               <!-- Some meta information -->
-               <meta name="keywords" content="Linux, Firewall, IPFire, Security" />
+               <meta name="keywords" content="Linux, Firewall, IPFire, Security, IPCop, Open Source, Free, ARM, VPN, Proxy, IDS, IPS" />
                <meta name="description" content="{{ _("IPFire is a free firewall distribution based on Linux.") }}" />
 
-               <!-- Some browser specific stuff -->
-               <meta name="verify-v1" content="2LEf3W8naILGWVy2dhedSVEHPXTpp2xFNVsHXZMH1JI=" />
-               <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-               <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
-
-               <!-- Style information and javascript -->
+               <!-- styling stuff -->
+               <link rel="stylesheet" type="text/css" href="{{ static_url("css/bootstrap.min.css") }}" />
                <link rel="stylesheet" type="text/css" href="{{ static_url("css/style.css") }}" />
-               <link rel="stylesheet" type="text/css" href="{{ static_url("fancybox/jquery.fancybox-1.3.4.css") }}" />
-               <script type="text/javascript" src="{{ static_url("js/jquery.js") }}"></script>
-               <script type="text/javascript" src="{{ static_url("js/jquery-ui.js") }}"></script>
-               <script type="text/javascript" src="{{ static_url("fancybox/jquery.fancybox-1.3.4.pack.js") }}"></script>
-               <!--[if lt IE 7]>
-                       <link rel="stylesheet" type="text/css" href="{{ static_url("css/ie6.css") }}" />
-                       <script src="{{ static_url("js/correctpng.js") }}" type="text/javascript"></script>
-               <![endif]-->
+               <link href="http://fonts.googleapis.com/css?family=Ubuntu" rel="stylesheet" type="text/css">
 
                {% if rss_url %}
                        <link rel="alternate" type="application/rss+xml" title="RSS" href="{{ rss_url }}" />
                {% end %}
        </head>
+
        <body>
-               <div id="header">
-                       <div id="header_inner" class="fixed">
-                               <div id="logo">
-                                       <a href="http://www.ipfire.org/">
-                                               <img src="{{ static_url("images/tux_menu_99x100.png") }}" class="symbol" alt="IPFire" />
+               <div class="navbar navbar-fixed-top">
+                       <div class="navbar-inner">
+                               <div class="container">
+                                       <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+                                               <span class="icon-bar"></span>
+                                               <span class="icon-bar"></span>
+                                               <span class="icon-bar"></span>
                                        </a>
-                               </div>
-                               <div id="header_menu">
-                                       {% block menu %}
-                                               {{ modules.Menu() }}
-                                       {% end block %}
-                               </div>
-                               <div id="header_hostname">
-                                       <h1>{{ hostname }}</h1>
-                               </div>
-                               <div id="header_slogan">
-                                       <h2>{{ _("An Open Source Firewall Solution") }}</h2>
+                                       <a class="brand" href="/">{{ hostname }}</a>
+                                       <div class="nav-collapse">
+                                               {% block menu %}
+                                                       {{ modules.Menu() }}
+                                               {% end block %}
+                                       </div>
                                </div>
                        </div>
                </div>
-               <div id="main">
-                   <div id="main_inner" class="fixed">
-                               <table id="main_frame">
-                               <tr>
-                                               <td id="sh-tl"></td>
-                                               <td id="sh-top"></td>
-                                               <td id="sh-tr"></td>
-                                       </tr>
-                                       <tr>
-                                               <td id="sh-lft"></td>
-                                               <td id="no-sh">
-                                                       {% block columns %}{% end block %}
-                                               </td>
-                                               <td id="sh-rgt"></td>
-                                       </tr>
-                                       <tr>
-                                               <td id="sh-lft"></td>
-                                               <td id="footer" class="fixed2">
-                                                       Copyright &copy; {{ year }} IPFire.org. {{ _("All rights reserved.") }} <a href="http://www.ipfire.org/imprint">{{ _("imprint") }}</a>
-                                               </td>
-                                               <td id="sh-rgt"></td>
-                                       </tr>
-                                       <tr>
-                                               <td id="sh-bl"></td>
-                                               <td id="sh-btn"></td>
-                                               <td id="sh-br"></td>
-                                       </tr>
-                               </table>
+
+               {% block container %}
+                       <div class="container container-body">
+                               {% block body %}EMPTY BODY{% end block %}
+
+                               <hr />
+
+                               <footer class="footer">
+                                       {% if not hostname == "planet.ipfire.org" %}
+                                               <div class="pull-right">
+                                                       <p>
+                                                               {% for l in ("en", "de") %}
+                                                                       {% if not l == lang %}
+                                                                               <a href="?locale={{ l }}">
+                                                                                       <img src="{{ static_url("images/flags/%s.png" % l) }}" alt="{{ l }}">
+                                                                               </a>
+                                                                       {% end %}
+                                                               {% end %}
+                                                       </p>
+                                               </div>
+                                       {% end %}
+
+                                       <p>
+                                               &copy; {{ year }} - <a href="http://www.ipfire.org/">IPFire.org</a> -
+                                               {% if hostname in ("www.ipfire.org", "dev.ipfire.org") %}
+                                                       <a href="/press">{{ _("Press") }}</a> -
+                                               {% end %}
+                                               <a href="http://www.ipfire.org/imprint">{{ _("imprint") }}</a>
+                                       </p>
+                               </footer>
                        </div>
-               </div>
-       {% block javascript %}{% end block %}
+               {% end block %}
+
+               <script src="{{ static_url("js/jquery.js") }}"></script>
+               <script src="{{ static_url("js/bootstrap.min.js") }}"></script>
+               <script src="{{ static_url("js/site.js") }}"></script>
        </body>
 </html>
index 5110546aabc806ecba6c7bdbb44c25443362fb0b..2fcb64a9e139933b387ddc95a79923d9ea675b0a 100644 (file)
@@ -2,11 +2,10 @@
 
 {% block title %}{{ _("Mirror-Server") }}{% end block %}
 
-{% block content %}
+{% block body %}
        <div class="post">
                <a name="latest"></a>
                <h3>{{ _("IPFire Mirrors") }}</h3>
-               <img src="{{ static_url("images/page_icons/download-mirrors.png") }}" class="floatTR" border="0" alt="{{ _("IPFire Torrent Tracker") }}" />
 
                <table class="download-mirror-detail">
                        <tr>
diff --git a/www/templates/download-splash.html b/www/templates/download-splash.html
new file mode 100644 (file)
index 0000000..07cafdc
--- /dev/null
@@ -0,0 +1,117 @@
+{% extends "base-1.html" %}
+
+{% block title %}{{ _("Thanks for downloading IPFire!") }}{% end block %}
+
+{% block body %}
+       <div class="page-header">
+               <h1>
+                       {{ _("Thanks for downloading IPFire!") }}
+               </h1>
+       </div>
+
+       <div class="row">
+               <div class="span8 offset2">
+                       <div class="well">
+                               <h2>{{ _("Please consider donating!") }}</h2>
+                               {% if lang == "de" %}
+                                       <p>
+                                               Wir möchten jeden, der IPFire herunterlädt einladen,
+                                               sich in das Projekt einzubringen, zum Beispiel mit
+                                               einer Spende.
+                                       </p>
+                                       <p>
+                                               Daher bitten wir um ein paar Euro für das Projekt
+                                               <a href="http://www.ipfire.org/getinvolved">oder das
+                                               Projekt auf eine andere Weise zu unterstützen</a>.
+                                       </p>
+                               {% else %}
+                                       <p>
+                                               We encourage everyone who downloads and uses IPFire to
+                                               get involved for example by donating a small amount of
+                                               money.
+                                       </p>
+                                       <p>
+                                               Please consider donating a few bucks to the project.
+                                               <a href="http://www.ipfire.org/getinvolved">If you can't
+                                               afford to donate, there are other ways you can help</a>.
+                                       </p>
+                               {% end %}
+
+                               <p style="text-align: center;">
+                                       <a class="btn btn-success btn-large" href="http://www.ipfire.org/donate">
+                                               {{ _("Donate") }}
+                                       </a>
+                               </p>
+                       </div>
+                       <br>
+               </div>
+       </div>
+
+       <div class="row">
+               <div class="span12">
+                       <h3>
+                               {% if lang == "de" %}
+                                       Der Download beginnt in Kürze.
+                                       Falls nicht, auf den untenstehenden Link klicken.
+                               {% else %}
+                                       Your download should begin in a few seconds.
+                                       If not, click the link below.
+                               {% end %}
+                       </h3>
+                       <p class="download-path"></p>
+                       <hr>
+               </div>
+       </div>
+
+       <h3>{{ _("Next steps") }}</h3>
+       <div class="row">
+               <div class="span4">
+                       <h3>
+                               <a href="http://wiki.ipfire.org/{{ lang }}/installation/start">
+                                       {{ _("Install IPFire") }}
+                               </a>
+                       </h3>
+                       <p>
+                               {% if lang == "de" %}
+                                       Erfahre wie es nach dem Download des Images weitergeht.
+                               {% else %}
+                                       Learn how to install IPFire from the image file you just
+                                       downloaded.
+                               {% end %}
+                       </p>
+               </div>
+
+               <div class="span4">
+                       <h3>
+                               <a href="http://wiki.ipfire.org/">{{ _("Access documentation") }}</a>
+                       </h3>
+                       <p>
+                               {% if lang == "de" %}
+                                       Im Problemfall ist ein Blick in die Dokumentation immer
+                                       hilfreich. Diese wird übrigens vom Dokumentations-Team
+                                       gepflegt.
+                               {% else %}
+                                       In case you are stuck with a problem, have a look at
+                                       the documentation which is maintained by the IPFire
+                                       Documentation Team.
+                               {% end %}
+                       </p>
+               </div>
+
+               <div class="span4">
+                       <h3>
+                               <a href="http://www.ipfire.org/getinvolved">{{ _("Join the community") }}</a>
+                       </h3>
+                       <p>
+                               {% if lang == "de" %}
+                                       Egal, ob Neueinsteiger oder Linux-Experte. Es gibt
+                                       unzählige Wege beim Projekt mitzumachen.
+                               {% else %}
+                                       If you are using IPFire for the first time or if you are
+                                       a Linux expert, there are lots of ways to contribute to the
+                                       IPFire project.
+                               {% end %}
+                       </p>
+               </div>
+       </div>
+{% end %}
index 4dd6f8910a92ded2b25eb48f321e511a87528ca5..5d4f1147775d29ef52032ddf838d12274b7c19e9 100644 (file)
@@ -2,10 +2,9 @@
 
 {% block title %}{{ _("Ancient Downloads") }}{% end block %}
 
-{% block content %}
+{% block body %}
        <div class="post">
                <h3>{{ _("Download IPFire") }}</h3>
-               <img src="{{ static_url("images/page_icons/download-all.png") }}" class="floatTR" border="0" alt="{{ _("Download IPFire") }}" />
                <p>
                        {{ _("These are the ancient downloads of IPFire. They are just saved for historical reasons and should not be used in a productive environment.") }}
                </p>
index 28a84f2e61abfbc9d30484dcb4aba994e5e2f11f..b14ba9934bc1dd45f8d54602088cc0a154e00188 100644 (file)
@@ -2,7 +2,7 @@
 
 {% block title %}Index{% end block %}
 
-{% block content %}
+{% block body %}
        <h3>{{ _("IPFire Download Center") }}</h3>
 
        <!-- <img src="{{ static_url("images/box_ipfire.png") }}" alt="{{ _("CD-Box") }}" class="floatTR" /> -->
index 96cf434689b7173d2c8ecc5f7a6ac694528e17a2..c5e4a2b91485e16767ea09fa169afa90af04dd1d 100644 (file)
@@ -2,11 +2,10 @@
 
 {% block title %}{{ _("Mirror-Server") }}{% end block %}
 
-{% block content %}
+{% block body %}
        <div class="post">
                <a name="latest"></a>
                <h3>{{ _("IPFire Mirrors") }}</h3>
-               <img src="{{ static_url("images/page_icons/download-mirrors.png") }}" class="floatTR" border="0" alt="{{ _("IPFire Torrent Tracker") }}" />
                
                {% if lang == "de" %}
                        <p>
index c72981ee50fdbab86b1ae0e83447553e0ffcc145..9e0d64a75decc4c120f5c06175b9687f5ab4c215 100644 (file)
@@ -2,10 +2,9 @@
 
 {% block title %}{{ _("Ancient downloads") }}{% end block %}
 
-{% block content %}
+{% block body %}
        {% block information %}
                <h3>{{ _("Ancient downloads") }}</h3>
-               <img src="{{ static_url("images/page_icons/download-all.png") }}" class="floatTR" border="0" alt="{{ _("Download IPFire") }}" />
                <p>
                        {{ _("These are the ancient downloads of IPFire. They are just saved for historical reasons and should not be used in a productive environment.") }}
                </p>
index afad1a7e4cfaaa381b4803e39821a6f9a92fc33e..5b02058a594d66c028da19caef7e07bb2e5b02c9 100644 (file)
@@ -1,88 +1,73 @@
-{% extends "base-2.html" %}
+{% extends "base-1.html" %}
 
 {% block title %}{{ _("Downloads") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Download IPFire") }}</h3>
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Download IPFire") }}</h1>
+       </div>
 
-       <img src="{{ static_url("images/box_ipfire.png") }}" alt="{{ _("CD-Box") }}" class="floatTR" />
+       <div class="row">
+               <div class="span8">
+                       {% if lang == "de" %}
+                               <p>
+                                       Lade IPFire jetzt kostenlos herunter. Klicke dazu auf den
+                                       untenstehenden Link um den Download zu starten oder wähle
+                                       eine andere Architektur oder ein anderes Imageformat.
+                               </p>
+                               <p>
+                                       Wenn du IPFire das erste mal herunterlädst, dann zögere nicht
+                                       es endlich auszuprobieren. Es dauert nur 15 Minuten, bis
+                                       diese freie Firewall-Distribution auch dein Netzwerk schützt.
+                               </p>
+                       {% else %}
+                               <p>
+                                       Download IPFire now for free. Click on the link below to start
+                                       the download or choose an other architecture or image type.
+                               </p>
+                               <p>
+                                       If you are downloading IPFire for the first time, don't hesitate
+                                       to try it out. The installation process takes only 15 minutes
+                                       until you have got a free firewall distribution protecting your
+                                       network.
+                               </p>
+                       {% end %}
+               </div>
+       
+               <div class="span4">
+                       <h3>
+                               <a href="/getinvolved">{{ _("Get yourself involved") }}</a>
+                       </h3>
+                       {% if lang == "de" %}
+                               <p>
+                                       Wir wünschen uns von jedem, der IPFire herunterlädt sich
+                                       selbst in das Projekt mit einzubringen. Trete der Community
+                                       bei, unterstütze die Entwicklung oder <a href="/donate">spende</a>.
+                               </p>
+                       {% else %}
+                               <p>
+                                       We ask everyone who downloads IPFire to contribute
+                                       themselves to the project. Join the community, take
+                                       part in the development or <a href="/donate">donate</a>.
+                               </p>
+                       {% end %}
 
-       {% if lang == "de" %}
-               <p>
-                       Auf dieser Seite können Sie <strong>kostenlos</strong> die neueste
-                       Version von IPFire herunterladen.
-               </p>
-               <p>
-                       Ältere Versionen oder andere Downloadoptionen finden Sie im
-                       <a href="http://downloads.ipfire.org/">Download Center</a>.
-               </p>
-       {% else %}
-               <p>
-                       On this page one can download the latest version of IPFire
-                       <strong>for free</strong>.
-               </p>
-               <p>
-                       Older versions and other downloads can be found in the
-                       <a href="http://downloads.ipfire.org/">Download Center</a>.
-               </p>
-       {% end %}
+                       <h3>{{ _("Need help with the first steps?") }}</h3>
+                       {% if lang == "de" %}
+                               <p>
+                                       Lies die
+                                       <a href="http://wiki.ipfire.org/{{ lang }}/installation/start">Installationsanleitung</a>.
+                               </p>
+                       {% else %}
+                               <p>
+                                       Check out the
+                                       <a href="http://wiki.ipfire.org/{{ lang }}/installation/start">Installation guide</a>.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 
-       <br class="clear" />
+       <hr>
 
-       {{ modules.ReleaseItem(release) }}
-
-       <br class="clear" />
-
-       <h3>{{ _("Donation") }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       Wenn Ihnen IPFire gefällt, gibt es die Möglichkeit mit einer kleinen
-                       Menge Geld das Projekt zu unterstützen. Diese Unterstützung bedeutet
-                       sehr viel, denn sie hilft das Projekt fortzuführen.
-               </p>
-               <br class="clear" />
-               <p>
-                       <div align="center">
-                               <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
-                                       <input type="hidden" name="cmd" value="_s-xclick">
-                                       <input type="hidden" name="hosted_button_id" value="10781833">
-                                       <input type="image" src="https://www.paypal.com/de_DE/DE/i/btn/btn_donateCC_LG.gif"
-                                               border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
-                                       <img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1">
-                               </form>
-                       </div>
-               </p>
-               <br class="clear" />
-               <p>
-                       Um mehr darüber zu erfahren, wie Sie das Projekt unterstützen können,
-                       klicken Sie <a href="/donation">hier</a>.
-               </p>
-       {% else %}
-               <p>
-                       If you like IPFire, there is the opportunity to donate a small amount
-                       of money to the project. This will help the people that are running
-                       this project very much.
-               </p>
-               <br class="clear" />
-               <p>
-                       <div align="center">
-                               <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
-                                       <input type="hidden" name="cmd" value="_s-xclick">
-                                       <input type="hidden" name="hosted_button_id" value="10781833">
-                                       <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif"
-                                               border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
-                                       <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
-                               </form>
-                       </div>
-               </p>
-               <br class="clear" />
-               <p>
-                       If you want to know more about how you can help the IPFire project
-                       read <a href="/donation">this</a>.
-               </p>
-       {% end %}
-{% end block %}
-
-{% block sidebar %}
-       {{ modules.SidebarBanner() }}
+       {{ modules.ReleaseItem(release, latest=True) }}
 {% end block %}
index be9f5d47c9155b5bfe1c97d3c45573de8e338700..af62507c174c32f0f2fae0dae8014d16981012c5 100644 (file)
@@ -1,18 +1,21 @@
 {% extends "error.html" %}
 
 {% block explanation %}
-       <br class="clear" />
+       <div class="row">
+               <div class="span8 offset2">
+                       <h2>{{ _("Detailed information") }}</h2>
 
-       <h4>{{ _("Detailed information") }}</h4>
-       <p>
-               {% if lang == "de" %}
-                       Bei der Verarbeitung der Anfrage kam es zu einem internen Problem
-                       des Webservers.<br />Sollten nähere Informationen verfügbar sein, so
-                       sind diese untenstehend angehangen.
-               {% else %}
-                       While processing the request, there was an internal problem
-                       of the web server. <br /> If there are more information available,
-                       they would be appended below.
-               {% end %}
-       </p>
+                       <p>
+                               {% if lang == "de" %}
+                                       Bei der Verarbeitung der Anfrage kam es zu einem internen Problem
+                                       des Webservers.<br />Sollten nähere Informationen verfügbar sein, so
+                                       sind diese untenstehend angehangen.
+                               {% else %}
+                                       While processing the request, there was an internal problem
+                                       of the web server. <br /> If there are more information available,
+                                       they would be appended below.
+                               {% end %}
+                       </p>
+               </div>
+       </div>
 {% end block %}
index aeaf0f2cfa58df4fddead8fec963178f225e846c..4fb6c4e83a3fdabd7c7ecd9370b8b78c7380ff86 100644 (file)
@@ -2,40 +2,45 @@
 
 {% block title %}{{ _("Error") }} {{ code }}{% end block %}
 
-{% block content %}
-<div class=post>
-       <h3>{{ code }} - {{ message }}</h3>
-       <img class="floatTL" src="{{ static_url("images/error/%s.png" % code) }}"
-               alt="{{ _("Error") }} {{ code }}" />
-       <p>
-               {% if lang == "de" %}
-                       Leider ist ein unerwarteter Fehler beim Laden der Seite aufgetreten.
-                       <br /><br />
-                       Das ist erstmal kein Grund zur Panik.
-                       <br /><br />
-                       Sollte dies das erstmalige Auftreten des Fehlers sein, so bitten wir
-                       einige Zeit abzuwarten. Sollte der Fehler jedoch an dieser Stelle
-                       regelmäßig auftreten, so würden sich die Webmaster über eine kleine
-                       Benachrichtigung freuen.
-               {% else %}
-                       Unfortunately, an unexpected error has occurred during page load.
-                       <br /><br />
-                       At first this is no reason to panic.
-                       <br /><br />
-                       If this is the first occurrence of the error, please wait a little bit
-                       and try again. If the error occurres anyway the webmaster would be happy
-                       to get a notification about this.
-               {% end %}
-       </p>
-</div>
-<div class=post>
+{% block body %}
+       <img class="pull-right" src="{{ static_url("images/error/%s.png" % code) }}" alt="{{ _("Error") }} {{ code }}" />
+       <div class="page-header">
+               <h1>{{ code }} - {{ message }}</h1>
+       </div>
+
+       <div class="row">
+               <div class="span8 offset2">
+                       {% if lang == "de" %}
+                               <p>
+                                       Leider ist ein unerwarteter Fehler beim Laden der Seite aufgetreten.
+                               </p>
+                               <p>
+                                       Sollte dies das erstmalige Auftreten des Fehlers sein, so bitten wir
+                                       einige Zeit abzuwarten. Sollte der Fehler jedoch an dieser Stelle
+                                       regelmäßig auftreten, so würden sich die Webmaster über eine kleine
+                                       Benachrichtigung freuen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       Unfortunately, an unexpected error has occurred during page load.
+                               </p>
+                               <p>
+                                       If this is the first occurrence of the error, please wait a little bit
+                                       and try again. If the error occurres anyway the webmaster would be happy
+                                       to get a notification about this.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
+
+       <hr>
        {% block explanation %}{% end block %}
-</div>
+
        {% if exception %}
-               <div class=post>
-                       <p>
+               <div class="row">
+                       <div class="span8 offset2">
                                <pre>{{ exception }}</pre>
-                       </p>
+                       </div>
                </div>
        {% end %}
 {% end block %}
index 48027662a537eba14ea24b543c5aefb4eca00be3..dfeda5411576330721941075a305c060bd9b5fb1 100644 (file)
-{% extends "base-2.html" %}
+{% extends "base-1.html" %}
 
 {% block title %}{{ _("Home") }}{% end block %}
 
-{% block content %}
-       <h3>IPFire - {{ _("An open source firewall solution") }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       <strong>IPFire</strong> ist eine Server-Distribution mit primärem Einsatzzweck
-                       als Firewall mit besonderer Sicherheit. Ebenso ist IPFire sehr flexibel
-                       und skaliert hervorragend von kleinen bis mitteleren Unternehmensnetzwerken,
-                       Heimnetzen, Behörden und Schulen.
-               </p>
-       {% else %}
-               <p>
-                       <strong>IPFire</strong> is a server distribution which primary function
-                       is a firewall bundled with strong security. It focuses on
-                       flexibility as well and scales from small to middle sized business
-                       networks, home networks, authorities and schools.
-               </p>
-       {% end %}
+{% block body %}
+       <div class="pull-right">
+               <strong>{{ _("Follow us") }}</strong>
+               <a href="https://www.facebook.com/IPFire.org"><img src="{{ static_url("images/icons/social/facebook.png") }}" alt="Facebook"></a>
+               <a href="https://twitter.com/ipfire"><img src="{{ static_url("images/icons/social/twitter.png") }}" alt="Twitter"></a>
+               <a href="/news.rss"><img src="{{ static_url("images/icons/social/rss.png") }}" alt="RSS"></a>
+       </div>
 
-       <br class="clear" />
+       <div class="page-header">
+               <h1>
+                       IPFire
+                       <small>{{ _("An Open Source Firewall Solution") }}</small>
+               </h1>
+       </div>
 
-       <table class="blocks">
-               <tr>
-                       <td class="block block1">
-                               <img src="{{ static_url("images/icons/security.png") }}" alt="{{ _("Security") }}" />
-                               <br class="clear" />
-                               <span>{{ _("Security") }}</span>
-                               {% if lang == "de" %}
-                                       <p>
-                                               Die oberste Priorität ist die Sicherheit des Sys- tems.
-                                               Sicherheitsupdates werden regelmäßig und
-                                               zügig verteilt.
-                                       </p>
-                               {% else %}
-                                       <p>
-                                               As the most important issue: Security updates
-                                               are deployed regularly and promptly.
-                                       </p>
-                               {% end %}
-                               <a href="/about#security">{{ _("Learn more.") }}</a>
-                       </td>
-                       <td class="block block2">
-                               <img src="{{ static_url("images/icons/flexibility.png") }}" alt="{{ _("Flexibility") }}" />
-                               <br class="clear" />
-                               <span>{{ _("Flexibility") }}</span>
-                               {% if lang == "de" %}
-                                       <p>
-                                               IPFire ist ein schlankes System (Image ca. 60 MB),
-                                               welches ganz leicht durch zusätzliche Funk- tionen erweitert
-                                               werden kann.
-                                       </p>
-                               {% else %}
-                                       <p>
-                                               IPFire is a very small system (install image is about 60MB)
-                                               and can be easily customized with additional functions. 
-                                       </p>
-                               {% end %}
-                               <p>
-                                       <a href="/about#concept">{{ _("Learn more.") }}</a>
-                               </p>
-                       </td>
-                       <td class="block block3">
-                               <img src="{{ static_url("images/icons/community.png") }}" alt="{{ _("Community") }}" />
-                               <br class="clear" />
-                               <span>{{ _("Open Source") }}</span>
-                               {% if lang == "de" %}
-                                       <p>
-                                               IPFire ist freie Software, welche von einer offenen
-                                               Community tagtäglich verbessert wird.
-                                       </p>
-                               {% else %}
-                                       <p>
-                                               IPFire is free software and developed by an open community,
-                                               that makes IPFire better every single day.
-                                       </p>
-                               {% end %}
-                               <p>
-                                       <a href="/about#itsfree">{{ _("Get involved.") }}</a>
-                               </p>
-                       </td>
-               </tr>
-       </table>
+       {% if hostname == "dev.ipfire.org" %}
+               <div class="row">
+                       <div class="span12">
+                               <div style="text-align: center;">
+                                       <img src="http://placehold.it/640x380" alt="Thumbnail">
+                               </div>
+                               <hr>
+                       </div>
+               </div>
+       {% end %}
 
-       <br class="clear" />
+       <div class="row">
+               <div class="span9">
+                       <div class="row">
+                               <div class="span9">
+                                       {% if lang == "de" %}
+                                               <p>
+                                                       <strong>IPFire</strong> ist eine gehärtete Linux-Appliance-Distribution
+                                                       mit primärem Einsatzzweck als Firewall.
+                                               </p>
+                                               <p>
+                                                       Mit IPFire kommt eine unternehmensfähige Absicherung des Netzwerks
+                                                       für Jedermann - vom Heimnetzwerk bis zum großen Unternehmen,
+                                                       Schulnetzwerken und Behörden.
+                                                       IPFire fokussiert Sicherheit, Stabilität und einfache Benutzbarkeit.
+                                                       Die Core-Distribution erlaubt das nachinstallieren von Addons mit
+                                                       nur einem einzigen Klick.
+                                               </p>
+                                               <p>
+                                                       IPFire ist einfach, schnell und <a href="/features/itsfree">kostet nichts</a>.
+                                               </p>
+                                       {% else %}
+                                               <p>
+                                                       <strong>IPFire</strong> is a hardened Linux appliance distribution
+                                                       designed for use as a firewall.
+                                               </p>
+                                               <p>
+                                                       It offers corporate-level network protection for anyone who needs it,
+                                                       from homes users all the way up to large corporations, school networks
+                                                       and authorities.
+                                                       IPFire focusses on security, stability and ease of use. Along with the
+                                                       core distribution, there are a variety of add-ons which can be installed
+                                                       with a single click.
+                                               </p>
+                                               <p>
+                                                       IPFire is easily deployed, fast and <a href="/features/itsfree">costs nothing</a>.
+                                               </p>
+                                       {% end %}
+                                       <hr>
+                               </div>
+                       </div>
 
-       {% if lang == "de" %}
-               <p>
-                       Das sehr minimalistische, gehärtete System ist höchst anpassungsfähig und
-                       schnell zu konfigurieren. Mit nur einem Klick können kostenlos zusätzliche
-                       Funktionen nachinstalliert werden, was IPFire grundsätzlich von
-                       seinen Konkurrenten in Sachen einfacher Wartung und Funktionsvielfalt
-                       abgrenzt.
-               </p>
-               <p>
-                       Dabei ist IPFire, da es auf dem Linux-Kernel basiert, äußerst
-                       leistungsstark und sicher, um auch in großen Umgebungen betrieben werden
-                       zu können.
-               </p>
-       {% else %}
-               <p>
-                       IPFire is a minimal, hardened system which distinguishes itself by being
-                       very customizable and the possibility to install additional features with
-                       only a single click for free. It is very easy to install and maintain.
-               </p>
-               <p>
-                       Based on the Linux kernel, IPFire has got a lot of performance and
-                       is very secure that it can be used in large environments.
-               </p>
-       {% end %}
+                       <div class="row">
+                               <div class="span3">
+                                       <h3>
+                                               <img src="{{ static_url("images/icons/security.png") }}" alt="{{ _("Security") }}" />
+                                               {{ _("Security") }}
+                                       </h3>
 
-       <p class="links">
-               {{ _("Quick links") }} &bull;
-               <a href="/about">{{ _("About IPFire") }}</a>
-               &bull;
-               <a href="http://wiki.ipfire.org/" target="_blank">{{ _("wiki") }}</a>
-               &bull;
-               <a href="http://forum.ipfire.org/" target="_blank">{{ _("forum") }}</a>
-       </p>
+                                       {% if lang == "de" %}
+                                               <p>
+                                                       Das wichtigste: Sicherheits- updates werden
+                                                       regelmäßig und zügig bereitgestellt.
+                                               </p>
+                                       {% else %}
+                                               <p>
+                                                       As the most important issue: Security updates
+                                                       are deployed regularly and promptly.
+                                               </p>
+                                       {% end %}
+                               </div>
 
-       <div class="line"></div>
+                               <div class="span3">
+                                       <h3>
+                                               <img src="{{ static_url("images/icons/flexibility.png") }}" alt="{{ _("Flexibility") }}" />
+                                               {{ _("Flexibility") }}
+                                       </h3>
 
-       {% for item in latest_news %}
-               {{ modules.NewsItem(item) }}
-       {% end %}
+                                       {% if lang == "de" %}
+                                               <p>
+                                                       IPFire ist ein schlankes System, welches leicht durch
+                                                       zusätzliche Funktionen erweitert werden kann.
+                                               </p>
+                                       {% else %}
+                                               <p>
+                                                       IPFire is a very small system (the install image is about 60MB)
+                                                       and can be easily customized with additional functions.
+                                               </p>
+                                       {% end %}               
+                               </div>
 
-       <div class="line"></div>
+                               <div class="span3">
+                                       <h3>
+                                               <img src="{{ static_url("images/icons/community.png") }}" alt="{{ _("Community") }}" />
+                                               {{ _("Open Source") }}
+                                       </h3>
 
-       {% for item in recent_planets %}
-               <strong>{{ _("Have you already seen?") }}</strong>
-               <a href="http://planet.ipfire.org/user/{{ item.author.uid }}">{{ item.author.cn }}</a>
-               {{ _("talks about") }}
-               <a href="http://planet.ipfire.org/post/{{ item.slug }}">{{ item.title }}</a>
-               {{ _("on the IPFire planet.") }}
-       {% end %}
+                                       {% if lang == "de" %}
+                                               <p>
+                                                       IPFire ist freie Software, welche von einer offenen
+                                                       Community tagtäglich verbessert wird.
+                                               </p>
+                                       {% else %}
+                                               <p>
+                                                       IPFire is free software and developed by an open community,
+                                                       that makes IPFire better every single day.
+                                               </p>
+                                       {% end %}
+                               </div>
+                       </div>
+               </div>
 
-       <br class="clear" />
-       <br class="clear" />
+               <div class="span3">
+                       <img src="{{ static_url("images/tux/ipfire_tux_256x256.png") }}" alt="IPFire Logo" />
 
-       <p class="right">
-               <a class="feed" href="/news.rss">{{ _("Subscribe to the latest news of IPFire") }} (RSS)</a>
-               &bull;
-               <a href="/news">{{ _("All posts") }} &gt;&gt;</a>
-       </p>
-{% end block %}
+                       {{ modules.SidebarRelease() }}
+               </div>
+       </div>
+
+       <hr>
 
-{% block sidebar %}
-       {{ modules.SidebarRelease() }}
-       {{ modules.SidebarBanner() }}
+       {% for item in latest_news %}
+               {{ modules.NewsItem(item, announcement=True) }}
+       {% end %}
 {% end block %}
index 81cbaa4e5ed8c9c3fe589ef664a417a2bb0c31ac..2cbb5c66a173e5740154351d64097bc27d7dffd3 100644 (file)
@@ -1,25 +1,23 @@
-{% extends "mirrors.html" %}
+{% extends "base-1.html" %}
 
-{% block title %}Mirror {{ item.hostname }}{% end block %}
+{% block title %}{{ _("Mirror %s") % item.hostname }}{% end block %}
 
-{% block content %}
-       <h3>{{ item.hostname }}</h3>
+{% block body %}
+       <div class="page-header">
+               {% if item.state == "UP" %}
+                       <span class="label label-success pull-right">{{ _("Up") }}</span>
+               {% elif item.state == "DOWN" %}
+                       <span class="label label-failure pull-right">{{ _("Down") }}</span>
+               {% elif item.state == "OUTOFSYNC" %}
+                       <span class="label label-warning pull-right">{{ _("Out of sync") }}</span>
+               {% else %}
+                       <span class="label label-info pull-right">{{ _("Unknown") }}</span>
+               {% end %}
 
-       <table class="mirrors">
-               <tr>
-                       <td>{{ _("State") }}</td>
-                       <td class="{{ item.state.lower() }}">
-                               {% if item.state.lower() == "up" %}
-                                       {{ _("Up") }}
-                               {% elif item.state.lower() == "down" %}
-                                       {{ _("Down") }}
-                               {% elif item.state.lower() == "outofsync" %}
-                                       {{ _("Out of synchronization") }}
-                               {% else %}
-                                       {{ _("Unknown") }}
-                               {% end %}
-                       </td>
-               </tr>
+               <h1>{{ item.hostname }}</h1>
+       </div>
+
+       <table class="table">
                <tr>
                        <td>{{ _("Last update") }}</td>
                        <td>{{ locale.format_date(item.last_update, full_format=True) }}</td>
                {% end %}
        </table>
 
-       <p class="links">
-               <a href="{{ item.url }}" target="_blank">{{ _("Open mirror") }}</a>
-               &bull;
-               <a href="/">{{ _("List of all mirror servers") }}</a>
-       </p>
+       <a class="btn pull-right" href="{{ item.url }}">{{ _("Go to mirror") }}</a>
 
-       <br class="clear" />
+       <br style="clear: both;">
+       <hr>
 
        <h3>{{ _("Mirror location") }}</h3>
        <p>
                {{ _("The mirror <em>%s</em> is located in %s.") % (item.hostname, item.location_str) }}
-               <br class="clear" />
+       </p>
+       <p>
                <img class="map"
                        src="http://maps.google.com/maps/api/staticmap?center={{ item.coordiante_str }}&size=640x280&zoom=6&markers=color:blue|label:.|{{ item.coordiante_str }}&sensor=false"
                        alt="{{ _("Location of the server") }}" />
        </p>
 {% end block %}
-
-{% block sidebar %}
-       {{ modules.SidebarBanner() }}
-{% end block %}
index fadaf44d4f1b6bccdf81c19905e21db666aa8ecf..0e71908788319d0a50fcbf0cd562b2a28e290780 100644 (file)
@@ -1,33 +1,34 @@
-{% extends "base-2.html" %}
+{% extends "base-1.html" %}
 
 {% block title %}Mirrors{% end block %}
 
-{% block content %}
-       <h3>mirrors.ipfire.org</h3>
-       <p>
-               The IPFire project is hosted on several servers to provide a high
-               availabilty of service.
-       </p>
-       <p>
-               This is the list of the download mirrors. Most of them are not owned
-               and managed by the IPFire project. So please do not call us to get them
-               work again if there is a problem.
-       </p>
+{% block body %}
+       <div class="page-header">
+               <h1>mirrors.ipfire.org</h1>
+       </div>
 
-       <br class="clear" />
+       {% if lang == "de" %}
+               <p>
+                       Das IPFire-Projekt ist auf vielen Servern gehostet um
+                       von jedem Ort der Welt die bestmögliche Verfügbarkeit
+                       und Downloadgeschwindigkeit zu gewährleisten.
+               </p>
+       {% else %}
+               <p>
+                       The IPFire project is hosted on several servers to provide a high
+                       availabilty of service and download speed from any place
+                       on the world.
+               </p>
+       {% end %}
 
        {% if other_mirrors %}
-               <h3>{{ _("Mirror servers nearby") }}</h3>
+               <h2>{{ _("Mirror servers nearby") }}</h2>
                {{ modules.MirrorsTable(preferred_mirrors) }}
 
-               <h3>{{ _("Worldwide mirror servers") }}</h3>
+               <h2>{{ _("Worldwide mirror servers") }}</h2>
                {{ modules.MirrorsTable(other_mirrors) }}
        {% else %}
-               <h3>{{ _("Worldwide mirror servers") }}</h3>
+               <h2>{{ _("Worldwide mirror servers") }}</h2>
                {{ modules.MirrorsTable(preferred_mirrors) }}
        {% end %}
 {% end block %}
-
-{% block sidebar %}
-       {{ modules.SidebarBanner() }}
-{% end block %}
diff --git a/www/templates/modules/download-button.html b/www/templates/modules/download-button.html
new file mode 100644 (file)
index 0000000..88f007e
--- /dev/null
@@ -0,0 +1,5 @@
+<a class="btn btn-large btn-success pull-right download-splash" href="{{ escape(image.url) }}">
+       {{ _("Download %s") % escape(release.name) }}
+       <br>
+       (ISO-Image - {{ escape(image.arch) }} - {{ format_size(image.size) }})
+</a>
index 165ee4b38be640cdece04e514301dac76cc8a5f2..dd8adfbac9e18aa1bed63c6950112a5f005f1857 100644 (file)
@@ -1,9 +1,131 @@
-<div id="menu">
-       <ul>
-               {% for item in menuitems %}
-                       <li>
-                               <a href="{{ item.uri }}"{% if item.active %} class="active"{% end %}>{{ item.description }}</a>
-                       </li>
-               {% end %}
+<ul class="nav">
+       {% if hostname in ("www.ipfire.org", "dev.ipfire.org") %}
+               <li>
+                       <a href="/download">{{ _("Download") }}</a>
+               </li>
+               <li>
+                       <a href="/about">{{ _("About") }}</a>
+               </li>
+               <li>
+                       <a href="/getinvolved">{{ _("Get Involved") }}</a>
+               </li>
+               <li class="dropdown">
+                       <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+                               {{ _("More") }} <b class="caret"></b>
+                       </a>
+                       <ul class="dropdown-menu">
+                               <li class="nav-header">
+                                       {{ _("Documentation") }}
+                               </li>
+                               <li>
+                                       <a href="http://wiki.ipfire.org/">
+                                               <i class="icon-align-left"></i>
+                                               {{ _("Wiki") }}
+                                       </a>
+                               </li>
+
+                               <li class="nav-header">
+                                       {{ _("Support") }}
+                               </li>
+                               <li>
+                                       <a href="http://forum.ipfire.org/">
+                                               <i class="icon-question-sign"></i>
+                                               {{ _("Forum") }}
+                                       </a>
+                               </li>
+                               <li>
+                                       <a href="/chat">
+                                               <i class="icon-comment"></i>
+                                               {{ _("Chat") }}
+                                       </a>
+                               </li>
+
+                               <li class="nav-header">
+                                       {{ _("Development") }}
+                               </li>
+                               <li>
+                                       <a href="/development">
+                                               <i class="icon-info-sign"></i>
+                                               {{ _("Overview") }}
+                                       </a>
+                               </li>
+                               <li>
+                                       <a href="https://pakfire.ipfire.org/">
+                                               <i class="icon-cog"></i>
+                                               {{ _("Pakfire Build Service") }}
+                                       </a>
+                               </li>
+                               <li>
+                                       <a href="https://bugzilla.ipfire.org/">
+                                               <i class="icon-th-list"></i>
+                                               {{ _("Bugtracker") }}
+                                       </a>
+                               </li>
+
+                               <li class="nav-header">
+                                        {{ _("Miscellaneous") }}
+                               </li>
+                               <li>
+                                       <a href="http://planet.ipfire.org/">
+                                               <i class="icon-globe"></i>
+                                               {{ _("Planet") }}
+                                       </a>
+                               </li>
+                               <li>
+                                       <a href="http://fireinfo.ipfire.org/">
+                                               <i class="icon-signal"></i>
+                                               {{ _("Fireinfo") }}
+                                       </a>
+                               </li>
+                               <li>
+                                       <a href="http://lists.ipfire.org/">
+                                               <i class="icon-envelope"></i>
+                                               {{ _("Mailing lists") }}
+                                       </a>
+                               </li>
+                               <li>
+                                       <a href="http://mirrors.ipfire.org/">
+                                               <i class="icon-download-alt"></i>
+                                               {{ _("Mirrors") }}
+                                       </a>
+                               </li>
+                               <li>
+                                       <a href="/artwork">
+                                               <i class="icon-pencil"></i>
+                                               {{ _("Artwork") }}
+                                       </a>
+                               </li>
+                               <li>
+                                       <a href="/cebit">
+                                               <i class="icon-eye-open"></i>
+                                               {{ _("CeBIT") }}
+                                       </a>
+                               </li>
+
+                               <li class="divider"></li>
+                               <li>
+                                       <a href="/donate">
+                                               <i class="icon-arrow-right"></i>
+                                               {{ _("Donate") }}
+                                       </a>
+                               </li>
+                       </ul>
+               </li>
+
+       {% elif hostname == "fireinfo.ipfire.org" %}
+               <li>
+                       <a href="/stats">{{ _("Statistics") }}</a>
+               </li>
+
+       {% end %}
+</ul>
+
+{% if not hostname == "www.ipfire.org" and not hostname == "dev.ipfire.org" %}
+       <ul class="nav pull-right">
+               <li>
+                       <a href="http://www.ipfire.org">
+                               {{ _("Return to www.ipfire.org") }}
+                       </a>
+               </li>
        </ul>
-</div>
+{% end %}
index f39b074b54f84dd4da4b1097866a6ea854642620..e59502036d71d33649a5fec02fb68902ebf10b31 100644 (file)
@@ -1,15 +1,32 @@
-<table class="mirrors">
+<table class="table table-striped">
        {% for mirror in mirrors %}
                <tr>
-                       <td class="hostname {{ mirror.state.lower() }}">
+                       {% if mirror.state == "UP" %}
+                               <td style="background-color: green;">
+                                       &nbsp;
+                               </td>
+                       {% elif mirror.state == "DOWN" %}
+                               <td style="background-color: red;">
+                                       &nbsp;
+                               </td>
+                       {% elif mirror.state == "OUTOFSYNC" %}
+                               <td style="background-color: yellow;">
+                                       &nbsp;
+                               </td>
+                       {% else %}
+                               <td style="background-color: grey;">
+                                       &nbsp;
+                               </td>
+                       {% end %}
+                       <td>
                                <a href="/mirror/{{ mirror.id }}">{{ mirror.hostname }}</a>
                        </td>
                        <td>
+                               {{ mirror.owner }}
+                               <br>
                                <img src="{{ static_url("images/flags/%s.png" % mirror.country_code) }}" alt="{{ mirror.country_code }}" />
                                {{ mirror.location_str }}
                        </td>
                </tr>
        {% end %}
 </table>
-<br class="clear" />
-
index 7078fd738144cc22823abf5c185e66da65df10f0..a97410c296a55f9f2f4a899806b49885486e614a 100644 (file)
@@ -1,17 +1,22 @@
-<div class="post">
-       <h2 class="title"><a href="/news/{{ item.slug }}">{{ item.title }}</a></h2>
-       <p class="meta">
-               {{ _("Posted by %s on") % item.author }} {{ locale.format_date(item.date, shorter=True) }}
-               <!-- &bull;     <a href="/news/{{ item.slug }}">{{ _("Full article") }}</a> -->
-       </p>
-       <div class="entry">
-               {{ item.text }}
-
-               {% if not uncut %}
-                       <p class="links">
-                                       <a href="/news/{{ item.slug }}">{{ _("Read more") }}</a>
-                       </p>
+<div class="row">
+       <div class="span12">
+               {% if show_heading %}
+                       <h2>
+                               {% if announcement %}
+                                       {{ _("Announcement") }}:
+                               {% end %}
+                               <a href="/news/{{ escape(item.slug) }}">{{ escape(item.title) }}</a>
+                       </h2>
                {% end %}
+
+               {{ item.text }}
+       </div>
+</div>
+<div class="row">
+       <div class="span12">
+               <p class="pull-right">
+                       <a href="/author/{{ item.author_id }}">{{ item.author }}</a> -
+                       {{ locale.format_date(item.date, full_format=True) }}
+               </p>
        </div>
 </div>
-
index fd2ffe2e55f3575741329fa9b25e3b1d20f5e733..f9f7fdedb61ef73d76a3e3a1c0b4e07ef9ec6ac2 100644 (file)
@@ -1,26 +1,28 @@
-<div class="post">
-       <h2 class="title"><a href="/post/{{ entry.slug }}">{{ entry.title }}</a></h2>
-       <p class="meta">
-               {{ _("Posted by") }} <a href="/user/{{ entry.author.uid }}">{{ entry.author.cn }}</a>
-               {{ _("on") }} {{ locale.format_date(entry.published, shorter=True) }}
-               <!-- &bull; <a href="/post/{{ entry.slug }}">{{ _("Full article") }}</a> -->
-       </p>
-       <div class="entry">
-               <img class="floatTR" src="{{ entry.author.gravatar_icon(64) }}"
-                       alt="{{ entry.author.cn }}" />
-
-               {% if short %}
-                       {{ entry.abstract }}
-               {% else %}
-                       {{ entry.text }}
+<div class="row">
+       <div class="span9">
+               {% if show_avatar %}
+                       <div class="well pull-right">
+                               <a href="/user/{{ entry.author.uid }}">
+                                       <img src="{{ entry.author.gravatar_icon(64) }}" alt="{{ entry.author.cn }}" />
+                               </a>
+                       </div>
                {% end %}
 
-               <p class="links">
-                       {% if short %}
-                               <a href="/post/{{ entry.slug }}">{{ _("Read more") }}</a>
-                               &bull;
-                       {% end %}
-                       {{ _("Last updated on") }} {{ locale.format_date(entry.updated) }}.
+               <h2>
+                       <a href="/post/{{ entry.slug }}">{{ entry.title }}</a>
+               </h2>
+
+               {{ entry.text }}
+
+               <p class="pull-right" style="clear: both;">
+                       {{ _("Posted by") }} <a href="/user/{{ entry.author.uid }}">{{ entry.author.cn }}</a>
+                       {{ _("on") }} {{ locale.format_date(entry.published, shorter=True) }}
                </p>
        </div>
 </div>
+
+<div class="row">
+       <div class="span9">
+               <hr>
+       </div>
+</div>
index fcd16cc35e0f00eb229678d1a989dd8e20904952..ab78d476d015fcd6948c30750a2eb657b01b9e0e 100644 (file)
-{% if release.files %}
-       <h3>{{ release.name }}</h3>
+<h2>
+       {% if latest %}{{ _("Latest release") }}:{% end %}
+       {{ escape(release.name) }}
+</h2>
 
-       <!--
-       {% for file in release.files %}
-               {% if file.type == "iso" %}
-                       <div class="bigdownload">
-                               <a href="{{ file.url }}">
-                                       {{ _("Begin download") }}<br />{{ release.name }}
-                               </a>
-                       </div>
-               {% end %}
-       {% end %}
-       -->
+<br>
 
-       {% if release.stable == "N" %}
-               <p class="warning">
-                       <strong>{{ _("Beware!") }}</strong>
-                       {{ _("<em>%s</em> was not released yet and so it is not recommended for production use.") % release.name }}
-               </p>
-       {% end %}
+{% if release.files %}
+       <div class="tabbable">
+               <ul class="nav nav-tabs">
+                       <li class="active">
+                               <a href="#arch_unknown" data-toggle="tab">{{ _("Choose an architecture:") }}</a>
+                       </li>
+                       {% if files["i586"] %}
+                               <li><a href="#arch_i586" data-toggle="tab">i586</a></li>
+                       {% end %}
+                       {% if files["arm"] %}
+                               <li><a href="#arch_arm" data-toggle="tab">ARM</a></li>
+                       {% end %}
+               </ul>
 
-       <table class="download">
-               {% for file in release.files %}
-                       <tr class="{{ file.type }}">
-                               <td class="icon">
-                                       <img src="{{ static_url("images/download_type_%s.png" % file.type) }}"
-                                               alt="{{ file.type }}" />
-                               </td>
-                               <td class="link">
-                                       <a href="{{ file.url }}">{{ _(file.desc) }}</a>
-                               </td>
-                               <td>
-                                       {{ _(file.rem) }}
-                               </td>
-                       </tr>
-               {% end %}
+               <div class="tab-content">
+                       <div class="tab-pane active" id="arch_unknown">
+                               {{ modules.DownloadButton(release) }}
 
-               <tr>
-                       <td colspan="3">
-                               &nbsp;
-                       </td>
-               </tr>
-<!--           <tr>
-                       <td colspan="3">
-                               <p>
-                                       {{ _("With starting the download you accept the <a href=\"/download/legal\">legal terms</a>.") }}
-                               </p>
-                       </td>
-               </tr>
-               <tr>
-                       <td colspan="3">
-                               &nbsp;
-                       </td>
-               </tr>
--->
-               <tr>
-                       <td colspan="3">
-                               <p>{{ _("Checksums") }} (SHA1):</p>
-                               <pre>{% for file in release.files %}{{ file.sha1 }} {{ file.basename }}{{ "\n" }}{% end %}</pre>
-                       </td>
-               </tr>
-       </table>
+                               {% if lang == "de" %}
+                                       <p>
+                                               Bitte klicke auf den Buttom um IPFire für
+                                               i586-kompatible Computer als ISO-Installationsimage
+                                               herunterzuladen.
+                                               Dies ist das am häufigsten benötigte Medium.
+                                       </p>
+                                       <p>
+                                               In der Tableiste finden sich alternative Architekturen
+                                               und Imageformate zum Download.
+                                       </p>
+                               {% else %}
+                                       <p>
+                                               Please click the button to download the IPFire
+                                               ISO image for i586-compatible computers.
+                                               This is the default image, you will most likely
+                                               need to install IPFire.
+                                       </p>
+                                       <p>
+                                               You may also pick your desired architecture from
+                                               the tabs above and see a list of all image
+                                               formats.
+                                       </p>
+                               {% end %}
+
+                               {% if release.stable == "N" %}
+                                       <div class="alert alert-info">
+                                               {% if lang == "de" %}
+                                                       Dieses Release ist nicht als <em>stabile</em> Version
+                                                       von IPFire freigegeben und nur für Testumgebungen gedacht.
+                                                       Daher sollte dieses Release nicht in produktiven
+                                                       Umgebungen eingesetzt werden und Fehler berichtet werden.
+                                               {% else %}
+                                                       This release is not a stable version of IPFire and
+                                                       intended for testing purposes only.
+                                                       Do not use this release in production and please
+                                                       report any bugs.
+                                               {% end %}
+                                       </div>
+                               {% end %}
+                       </div>
 
-       <br class="clear" />
+                       {% for arch in files.keys() %}
+                               <div class="tab-pane" id="arch_{{ arch }}">
+                                       <!-- {% if lang == "de" %}
+                                               {% if arch == "i586" %}
+                                                       <p>
+                                                               Diese Images sind für den Einsatz auf Intel-kompatiblen
+                                                               Systemen gedacht. Dazu gehört die gesamte Klasse der
+                                                               x86er Systeme ab Pentium I.
+                                                       </p>
+                                               {% end %}
+                                       {% else %}
+                                               {% if arch == "i586" %}
+                                                       <p>
+                                                               These images are built for Intel-compatible systems.
+                                                               This is the entire class of x86 CPUs since Intel
+                                                               Pentium I.
+                                                       </p>
+                                               {% end %}
+                                       {% end %} -->
 
+                                       <table class="table table-striped table-bordered">
+                                               <thead>
+                                                       <tr>
+                                                               <th>{{ _("Image type") }}</th>
+                                                               <th>{{ _("Size") }}</th>
+                                                       </tr>
+                                               </thead>
+                                               <tbody>
+                                                       {% for file in files[arch] %}
+                                                               <tr>
+                                                                       <td>
+                                                                               <a class="download-splash" href="{{ file.url }}">{{ _(file.desc) }}</a>
+                                                                               <br>{{ _(file.rem) }}
+                                                                       </td>
+                                                                       <td>
+                                                                               {{ format_size(file.size) }}
+                                                                       </td>
+                                                               </tr>
+                                                       {% end %}
+                                               </tbody>                                                        
+                                       </table>
+                               </div>
+                       {% end %}
+               </div>
+       </div>
 {% else %}
-       <p>{{ _("There are no downloads available for this release.") }}</p>
+       <div class="alert">
+               {{ _("There are no downloads available for this release.") }}
+       </div>
 {% end %}
index ad91de680e55db48d8e1b71bbeaaa1ff1f181b1d..8796240fcd0edaa5ba097f137c9c571b9c4b6f06 100644 (file)
@@ -1,17 +1,12 @@
-{% extends "sidebar-item.html" %}
-
-{% block heading %}{{ _("release information") }}{% end block %}
-
-{% block body %}
-       <p>
-               <img src="{{ static_url("images/ipfire_download.png") }}" alt="Tux Logo" />
-       </p>
-
-       {% if latest %}
+{% if latest %}
+       <!-- XXX not good style -->
+       <div style="text-align: center;">
+               <h3>{{ _("Latest release") }}</h3>
                <p>
-                       <strong>{{ _("Current version") }}</strong>:
-                       <br />
-                       <a href="downloads">{{ latest.name }}</a>
+                       <a href="/downloads">{{ latest.name }}</a>
                </p>
-       {% end %}
-{% end block %}
+               <p>
+                       <a class="btn btn-success" href="/downloads">{{ _("Download now") }}</a>
+               </p>
+       </div>
+{% end %}
index d368b9b2630bc8f91d168e95cf656b2ab96ab2ee..99d196dada2e7d5bcac44fdc3f801b82da81e77d 100644 (file)
@@ -1,30 +1,40 @@
-<table class="fireinfo">
-       {% for group, devices in groups %}
-               <tr class="vendor">
-                       <td colspan="3">
-                               &nbsp;<br />
-                               <strong>{{ _(group) }}</strong>
-                       </td>
-               </tr>
-               {% for device in devices %}
-                       <tr class="device">
-                               <td>
-                                       &nbsp; <!-- XXX add margin in CSS -->
-                                       <img src="{{ static_url("images/icons/bus-%s.png" % device.subsystem) }}"
-                                               alt="{{ device.subsystem.upper() }}" />
-                               </td>
-                               <td>
-                                       <a class="vendor" href="/vendor/{{ device.subsystem }}/{{ device.vendor }}">
-                                               {{ device.vendor_string }}
-                                       </a>
-                                       -
-                                       <a href="/model/{{ device.subsystem }}/{{ device.vendor }}/{{ device.model }}">
-                                               {{ device.model_string or "N/A (%s)" % device.model }}
-                                       </a>
-                                       <br />
-                                       {{ _("Module") }}: {{ device.driver or "N/A" }}
-                               </td>
-                       </tr>
-               {% end %}
-       {% end %}
-</table>
+<div class="row">
+       <div class="span12">
+               <table class="table">
+                       <thead>
+                               <th colspan="2">&nbsp;</th>
+                               <th>{{ _("Kernel module") }}</th>
+                       </thead>
+                       <tbody>
+                               {% for group, devices in groups %}
+                                       <tr>
+                                               <td colspan="3">
+                                                       <h3>{{ _(group) }}</h3>
+                                               </td>
+                                       </tr>
+
+                                       {% for device in devices %}
+                                               <tr>
+                                                       <td>
+                                                               <img src="{{ static_url("images/icons/bus-%s.png" % device.subsystem) }}"
+                                                                       alt="{{ device.subsystem.upper() }}" />
+                                                       </td>
+                                                       <td>
+                                                               <a class="vendor" href="/vendor/{{ device.subsystem }}/{{ device.vendor }}">
+                                                                       {{ device.vendor_string }}
+                                                               </a>
+                                                               -
+                                                               <a href="/model/{{ device.subsystem }}/{{ device.vendor }}/{{ device.model }}">
+                                                                       {{ device.model_string or "N/A (%s)" % device.model }}
+                                                               </a>
+                                                       </td>
+                                                       <td>
+                                                               {% if device.driver %}{{ device.driver }}{% end %}
+                                                       </td>
+                                               </tr>
+                                       {% end %}
+                               {% end %}
+                       </tbody>
+               </table>
+       </div>
+</div>
index 231369ad705c18c9cf05f4ef95c8df645ba7236a..90d2e8ec4d47a15e0365c3755f0454739a6ee3e0 100644 (file)
@@ -1,13 +1,16 @@
-<table class="stats">
+<table class="table table-fireinfo">
        {% for country in countries %}
                <tr>
                        <td class="key">
                                <img src="{{ static_url("images/flags/%s.png" % country.code) }}" />
                                {{ country.name }}
                        </td>
-                       <td class="bar"><p style="{{ "width: %.2f%%" % country.value }}">&nbsp;</p></td>
-                       <td class="value">{{ "%.2f" % country.value }}%</td>
+                       <td class="bar">
+                               <div class="progress">
+                                       <div class="bar" style="{{ "width: %.2f%%" % country.value }}"></div>
+                               </div>
+                       </td>
+                       <td class="val">{{ "%.2f" % country.value }}%</td>
                </tr>
        {% end %}
 </table>
-<br class="clear" />
index 7717b784de768eb8ddd88bcddb7c949ca995a591..d8ab9f51643a68fe2718cbe3b0d5008b34c1aebc 100644 (file)
@@ -1,4 +1,4 @@
-<table class="stats">
+<table class="table table-fireinfo">
        {% for k, v in items %}
                <tr>
                        <td class="key">
@@ -7,9 +7,12 @@
                                {% end %}
                                {{ k }}
                        </td>
-                       <td class="bar"><p style="{{ "width: %.2f%%" % v }}">&nbsp;</p></td>
-                       <td class="value">{{ "%.2f" % v }}%</td>
+                       <td class="bar">
+                               <div class="progress">
+                                       <div class="bar" style="{{ "width: %.2f%%" % v }}"></div>
+                               </div>
+                       </td>
+                       <td class="val">{{ "%.2f" % v }}%</td>
                </tr>
        {% end %}
 </table>
-<br class="clear" />
index 8ebf0a1efedfbbdfd3fcc5b425348ed93dce8e38..ea89c982e01657e5acfe09cf02c57f33fde427da 100644 (file)
@@ -1,15 +1,20 @@
-<table class="tracker-peerlist">
-       <tr>
-               <th>&nbsp;</th>
-               <th>&nbsp;</th>
-               <th>Hostname</th>
-       </tr>
-       {% for peer in peers %}
+<table class="table table-striped">
+       <thead>
                <tr>
-                       <td class="ip">{{ peer.ip }}</td>
-                       <td><img src="{{ static_url("images/flags/" + peer.country_code + ".png") }}"
-                               alt="{{ peer.country_code }}" /></td>
-                       <td>{{ peer.hostname or "---" }}</td>
+                       <th>&nbsp;</th>
+                       <th>Hostname</th>
                </tr>
-       {% end %}
+       </thead>
+       <tbody>
+               {% for peer in peers %}
+                       <tr>
+                               <td>
+                                       <img src="{{ static_url("images/flags/" + peer.country_code + ".png") }}"
+                                               alt="{{ peer.country_code }}" />
+                                       {{ peer.ip }}
+                               </td>
+                               <td>{{ peer.hostname or "---" }}</td>
+                       </tr>
+               {% end %}
+       </tbody>
 </table>
index 5794f00199ddc707c1ac9674b817e4568762a0eb..a66bf986db4f0312b9cd3176f41fa50cd4ba792a 100644 (file)
@@ -1,18 +1,37 @@
-{% extends "base-2.html" %}
+{% extends "planet-user.html" %}
 
 {% block title %}{{ author.cn }}{% end block %}
 
-{% block content %}
-       <h2>{{ author.cn }}</h2>
-       <p>
-               Fill in some intesting things about the author...
-       </p>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("%s's announcements") % author.cn }}</h1>
+       </div>
 
-       <h3>{{ _("%s recently announced...") % author.cn }}</h3>
-       <ul class="list news_author_latest_news">
-       {% for news in latest_news %}
-               <li>{{ modules.NewsLine(news) }}</li>
-       {% end %}
-       </ul>
-{% end block %}
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               XXX GERMAN TEXT MISSING
+                       {% else %}
+                               <p>
+                                       This is a list of all announcements made by {{ author.cn }}
+                                       in reverse chronological order.
+                               </p>
+                       {% end %}
 
+                       <table class="table table-striped table-bordered">
+                               <tbody>
+                                       {% for news in latest_news %}
+                                               <tr>
+                                                       <td>
+                                                               <a href="/news/{{ news.slug }}">{{ news.title }}</a>
+                                                       </td>
+                                                       <td>
+                                                               {{ locale.format_date(news.date, full_format=True) }}
+                                                       </td>
+                                               </tr>
+                                       {% end %}
+                               </tbody>
+                       </table>
+               </div>
+       </div>
+{% end block %}
index d41ca09403a3f60ba3efdb9960a1a81d89733391..afcdca474ca95fd7d702855f7b7950f424866d6f 100644 (file)
@@ -1,22 +1,11 @@
-{% extends "base-2.html" %}
+{% extends "base-1.html" %}
 
 {% block title %}{{ item.title }}{% end block %}
 
-{% block content %}
-<!--   <h2>{{ item.title }}</h2>
-       <div class="post_info">
-               {{ locale.format_date(item.date) }} {{ _("by") }}
-               <a href="/author/{{ item.author_id }}">{{ item.author }}</a>
+{% block body %}
+       <div class="page-header">
+               <h1>{{ item.title }}</h1>
        </div>
 
-       {{ item.text }} -->
-
-       {{ modules.NewsItem(item, uncut=True) }}
-{% end block %}
-
-{% block sidebar %}
-       <h4>other options</h4>
-       <ul class="list">
-               <li><a href="/news">{{ _("Show all news") }}</a></li>
-       </ul>
+       {{ modules.NewsItem(item, show_heading=False) }}
 {% end block %}
index 17d3f2e608654b389f4f5cef8e01e5da44c264fe..d989aa10619e194fe8beeecbc03ac776bdfc488b 100644 (file)
@@ -2,10 +2,10 @@
 
 {% block title %}News{% end block %}
 
-{% block content %}
-       <h3>What is new on the IPFire project?</h3>
-
-       <!-- XXX fill in some nice illustration -->
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("What is new on the IPFire project?") }}</h1>
+       </div>
 
        <p>
                At this place you will know about the most important announces.
                {{ modules.NewsItem(item) }}
        {% end %}
 
-       <p class="links">
-               {% if offset - limit %}
-                       <a href="?offset={{ offset - (2 * limit) }}">&lt;&lt; {{ _("See newer news entries") }}</a>
-                       &bull;
-               {% end %}
-               <a href="?offset={{ offset }}">{{ _("See older news entries") }} &gt;&gt;</a>
-       </p>
+       <div class="row">
+               <div class="span9">
+                       <ul class="pager">
+                               <li class="previous">
+                                       <a href="?offset={{ offset }}">&larr; {{ _("Older posts") }}</a>
+                               </li>
+                               {% if offset - limit %}
+                                       <li class="next">
+                                               <a href="?offset={{ offset - (2 * limit) }}">{{ _("Newer posts") }} &rarr;</a>
+                                       </li>
+                               {% end %}
+                       </ul>
+               </div>
+       </div>
 {% end block %}
index 5933c675eae3f6607e4e91e393dfa7d540408b20..c0338ae5bc678ced498194973be21f1de7cdb90f 100644 (file)
@@ -2,67 +2,91 @@
 
 {% block title %}{{ _("IPFire Planet") }}{% end block %}
 
-{% block content %}
-       <div class="post">
-               <h3>{{ _("IPFire Planet") }}</h3>
-
-               {% if lang == "de" %}
-                       <p>
-                               Der <strong>IPFire Planet</strong> ist eine Plattform für alle
-                               Personen, die in das Projekt involviert sind um mit der
-                               Community in Kontakt zu bleiben und sie über neue Entwicklungen
-                               zu informieren.
-                       </p>
-                       <p>
-                               Um den Aufwand für die Entwickler in Maßen zu halten sind
-                               alle Einträge nur auf Englisch verfügbar.
-                       </p>
-               {% else %}
-                       <p>
-                               The <strong>IPFire Planet</strong> is a place for the people
-                               who are involved in the project to tell the community about
-                               new progress in the development or make some minor announcements.
-                       </p>
-               {% end %}
-               <br class="clear" />
-               <!--
-               <p>
-                       {{ _("Last issues") }}:
-                       <ul>
-                               {% for entry in entries %}
-                                       <li>
-                                               <a href="/post/{{ entry.slug }}">{{ entry.title }}</a>
-                                               {{ _("by") }}
-                                               <a href="/user/{{ entry.author.uid }}">{{ entry.author.cn }}</a>
-                                       </li>
-                               {% end %}
-                       </ul>
-               </p>
-               -->
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("IPFire Planet") }}</h1>
        </div>
 
-       <div class="line"></div>
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Der <strong>IPFire Planet</strong> ist eine Plattform für alle
+                                       Personen, die in das Projekt involviert sind um mit der
+                                       Community in Kontakt zu bleiben und sie über neue Entwicklungen
+                                       zu informieren.
+                               </p>
+                               <p>
+                                       Um den Aufwand für die Entwickler in Maßen zu halten sind
+                                       alle Einträge nur auf Englisch verfügbar.
+                               </p>
+                       {% else %}
+                               <p>
+                                       The <strong>IPFire Planet</strong> is a place for the people
+                                       who are involved in the project to tell the community about
+                                       new progress in the development or make some minor announcements.
+                               </p>
+                       {% end %}
+                       
+                       <hr>
+               </div>
+       </div>
 
        {% for entry in entries %}
-               {{ modules.PlanetEntry(entry, short=True) }}
+               {{ modules.PlanetEntry(entry) }}
        {% end %}
-       
-       <p class="right">
-               {% if offset - limit %}
-                       <a href="?offset={{ offset - (2 * limit) }}">&lt;&lt; {{ _("See newer entries") }}</a>
-                       &bull;
-               {% end %}
-               <a href="?offset={{ offset }}">{{ _("See older entries") }} &gt;&gt;</a>
-       </p>
-{% end block %}
 
-{% block sidebar %}
-               <h4>{{ _("People on the planet") }}</h4>
-               <ul class="list">
-                       {% for author in authors %}
-                               <li>
-                                       <a href="/user/{{ author.uid }}">{{ author.cn }}</a>
+       <div class="row">
+               <div class="span9">
+                       <ul class="pager">
+                               <li class="previous">
+                                       <a href="?offset={{ offset }}">&larr; {{ _("Older posts") }}</a>
                                </li>
+                               {% if offset - limit %}
+                                       <li class="next">
+                                               <a href="?offset={{ offset - (2 * limit) }}">{{ _("Newer posts") }} &rarr;</a>
+                                       </li>
+                               {% end %}
+                       </ul>
+               </div>
+       </div>
+{% end block %}
+
+{% block bodyB %}
+       <div class="row">
+               <div class="span3">
+                       <h3>{{ _("Subscribe") }}</h3>
+
+                       {% if lang == "de" %}
+                               XXX GERMAN TEXT MISSING
+                       {% else %}
+                               <p>
+                                       Click on the button below to subscribe to the IPFire planet feed.
+                                       Add it to you favourite news reader and you will see new
+                                       posts immediately.
+                               </p>
                        {% end %}
-               </ul>
+
+                       <p style="text-align: center;">
+                               <a class="btn" href="http://planet.ipfire.org/rss">
+                                       <i class="icon-globe"></i> {{ _("Feed") }}
+                               </a>
+                       </p>
+
+                       <hr>
+               </div>
+       </div>
+
+       <div class="row">
+               <div class="span3">
+                       <h4>{{ _("People on the IPFire planet") }}</h4>
+                       <ul>
+                               {% for author in authors %}
+                                       <li>
+                                               <a href="/user/{{ author.uid }}">{{ author.cn }}</a>
+                                       </li>
+                               {% end %}
+                       </ul>
+               </div>
+       </div>
 {% end %}
index b0741d6249b294ea9e44621b9992cc2d0bb5833f..1637ce99e38b284f3b9c71452b3bd43c919beac7 100644 (file)
@@ -2,6 +2,21 @@
 
 {% block title %}{{ _("IPFire Planet") }} - {{ entry.title }}{% end block %}
 
-{% block content %}
-       {{ modules.PlanetEntry(entry) }}
+{% block bodyA %}
+       <div class="page-header">
+               <h2>
+                       <a href="/post/{{ entry.slug }}">{{ entry.title }}</a>
+               </h2>
+       </div>
+
+       <div class="row">
+               <div class="span9">
+                       {{ entry.text }}
+               </div>
+
+               <p class="pull-right" style="clear: both;">
+                       {{ _("Posted by") }} <a href="/user/{{ entry.author.uid }}">{{ entry.author.cn }}</a>
+                       {{ _("on") }} {{ locale.format_date(entry.published, shorter=True) }}
+               </p>
+       </div>
 {% end block %}
index c3f0a0c2063d598fccc1f565a5d5e11ebbb484b7..9e2e915551606eb3ca81d116e12ecc3bd41afb5f 100644 (file)
@@ -2,25 +2,46 @@
 
 {% block title %}{{ _("IPFire Planet") }} - {{ author.cn }}{% end block %}
 
-{% block content %}
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ author.cn }}'s posts</h1>
+       </div>
+
        {% if entries %}
                {% for entry in entries %}
-                       {{ modules.PlanetEntry(entry, short=True) }}
+                       {{ modules.PlanetEntry(entry, show_avatar=False) }}
                {% end %}
-               
-               <p class="right">
-                       {% if offset - limit %}
-                               <a href="?offset={{ offset - (2 * limit) }}">&lt;&lt; {{ _("See newer entries") }}</a>
-                               &bull;
-                       {% end %}
-                       <a href="?offset={{ offset }}">{{ _("See older entries") }} &gt;&gt;</a>
-               </p>
+
+               <div class="row">
+                       <div class="span9">
+                               <ul class="pager">
+                                       <li class="previous">
+                                               <a href="?offset={{ offset }}">&larr; {{ _("Older posts") }}</a>
+                                       </li>
+                                       {% if offset - limit %}
+                                               <li class="next">
+                                                       <a href="?offset={{ offset - (2 * limit) }}">{{ _("Newer posts") }} &rarr;</a>
+                                               </li>
+                                       {% end %}
+                               </ul>
+                       </div>
+               </div>
        {% else %}
-                       <p>{{ _("%s did no postings, yet.") % author.cn }}</p>
+                       <p>{{ _("%s did not write any posts, yet.") % author.cn }}</p>
        {% end %}
 {% end block %}
 
-{% block sidebar %}
-       <h4>{{ author.cn }}</h4>
-       <img src="{{ author.gravatar_icon(170) }}" alt="{{ author.uid }}" />
-{% end %}
+{% block bodyB %}
+       <div class="well">
+               <img src="{{ author.gravatar_icon(224) }}" alt="{{ author.cn }}" />
+               <hr>
+               <a href="/user/{{ author.uid }}">
+                       <i class="icon-user"></i>
+                       {{ escape(author.cn) }}
+               </a>
+               <hr>
+               <a href="mailto:{{ author.email }}">
+                       <i class="icon-envelope"></i> {{ _("Mail") }}
+               </a>
+       </div>
+{% end block %}
index dcbff3efbcb65cce76deb8ba12e33ade680f4900..bcea74005b577aa1956e1c693d8072cf1c83d055 100644 (file)
@@ -2,40 +2,54 @@
 
 {% block title %}Fireinfo{% end block %}
 
-{% block content %}
-       <h3>Fireinfo</h3>
+{% block body %}
+       <div class="page-header">
+               <h1>
+                       Fireinfo <small>{{ _("A hardware data collection tool for IPFire") }}</small>
+               </h1>
+       </div>
 
-       {% if lang == "de" %}
-               <p>
-                       Bitte geben Sie ihre Profil-ID ein um einen Überblick über alle
-                       Komponenten in Ihrem System zu erhalten:
-               </p>
-       {% else %}
-               <p>
-                       Please enter your profile ID and have a look of the hardware components
-                       that are installed on your system:
-               </p>
-       {% end %}
+       <div class="row">
+               <div class="span12">
+                       {% if lang == "de" %}
+                               <p>
+                                       <strong>Fireinfo</strong> ist ein Tool, welches anonym Informationen
+                                       über die in IPFire-Systemen verbaute Hardware sammelt.
+                                       Diese Daten sollen den Entwicklern helfen zu erkennen, welche
+                                       Hardware am häufigsten eingesetzt wird und sind auch hilfreich
+                                       um Hardware-Probleme ausfindig zu machen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       <strong>Fireinfo</strong> is a tool that anonymously collects statistical
+                                       data from IPFire systems. These data should help the developers to learn
+                                       which hardware is used most often to run an IPFire system, but is also
+                                       handy when it comes to debugging hardware problems.
+                               </p>
+                       {% end %}
+                       <hr>
+               </div>
+       </div>
 
-       <form name="profile" method="POST">
-               {{ xsrf_form_html() }}
-               <p>
-                       <input type="text" name="profile_id" size="40" maxlength="40" />
-                       <input type="submit" value="{{ _("Show profile") }}" />
-               </p>
-       </form>
-       <br class="clear" />
+       <div class="row">
+               <div class="span8 offset2">
+                       {% if lang == "de" %}
+                               <p>
+                                       Bitte geben Sie die Profil-ID von ihrem System ein, welche
+                                       Sie auf der Fireinfo-Seite des Webinterfaces finden können:
+                               </p>
+                       {% else %}
+                               <p>
+                                       Please enter the profile ID of your system, which can be found
+                                       on the fireinfo page on the web interface, to see your profile:
+                               </p>
+                       {% end %}
 
-       <h3>{{ _("What is fireinfo?") }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       Klicken Sie <a href="http://wiki.ipfire.org/de/fireinfo/start" target="_blank">hier</a>
-                       um mehr über fireinfo zu erfahren.
-               </p>
-       {% else %}
-               <p>
-                       Click <a href="http://wiki.ipfire.org/en/fireinfo/start" target="_blank">here</a>
-                       to learn more about how fireinfo is working.
-               </p>
-       {% end %}
+                       <form class="well form-search" method="POST" action="">
+                               <input type="text" class="span6 search-query" name="profile_id" value="">
+                               <button type="submit" class="btn">{{ _("Show profile") }}</button>
+                               {{ xsrf_form_html() }}
+                       </form>
+               </div>
+       </div>
 {% end block %}
index 0b55f916dc3f1f593a0cd1bc6461c464f4eaea2f..d50c05c9c4239116e183fccc1afb0a32c3e0b4e4 100644 (file)
@@ -2,13 +2,16 @@
 
 {% block title %}{{ vendor_name }} - {{ model_name or model_id }}{% end block %}
 
-{% block content %}
-       <h3>{{ vendor_name }} - {{ model_name or model_id  }}</h3>
+{% block body %}
+       <div class="page-header">
+               <h1>{{ vendor_name }} - {{ model_name or model_id  }}</h1>
+       </div>
+
        <p>
                {{ _("This device is installed on approximately %.2f%% of all systems.") % percentage }}
        </p>
 
-       <h3>{{ _("Feedback") }}</h3>
+       <h2>{{ _("Feedback") }}</h2>
        {% if lang == "de" %}
                <p>
                        Im IPFire-Wiki befindet sich eine Sektion mit Kommentaren und Ratschlägen
index b71aa05cc493ef720c0f0d28943654d886f87d09..74c95940ba743dc021de4cfa033cc30b013413e3 100644 (file)
-{% extends "stasy-base-2.html" %}
+{% extends "stasy-base-1.html" %}
 
 {% block title %}{{ _("Profile") }} {{ profile.public_id }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Profile") }} {{ profile.public_id }}</h3>
-
-       <table class="fireinfo">
-               <tr>
-                       <td class="key">
-                               {{ _("Vendor") }}
-                       </td>
-                       <td class="value">
-                               {{ profile.vendor }}
-                       </td>
-               </tr>
-               <tr>
-                       <td class="key">
-                               {{ _("Model") }}
-                       </td>
-                       <td class="value">
-                               {{ profile.model }}
-                       </td>
-               </tr>
-       </table>
-
-       <h4>{{ _("Operating system") }}</h4>
-       <table class="fireinfo">
-               <tr>
-                       <td class="key">
-                               {{ _("Version") }}
-                       </td>
-                       <td class="value">
-                               {{ profile.release }}
-                       </td>
-               </tr>
-               <tr>
-                       <td class="key">
-                               {{ _("Architecture") }}
-                       </td>
-                       <td class="value">
-                               {{ profile.cpu.arch }}
-                       </td>
-               </tr>
-               <tr>
-                       <td class="key">
-                               {{ _("Kernel version") }}
-                       </td>
-                       <td class="value">
-                               {{ profile.kernel }}
-                       </td>
-               </tr>
-       </table>
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Profile") }} {{ profile.public_id }}</h1>
+       </div>
+
+       <div class="row">
+               <div class="span6">
+                       <h3>{{ _("Operating system") }}</h3>
+                       <table class="table">
+                               <tr>
+                                       <td>
+                                               {{ _("Version") }}
+                                       </td>
+                                       <td>
+                                               {{ profile.release }}
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>
+                                               {{ _("Architecture") }}
+                                       </td>
+                                       <td>
+                                               {{ profile.cpu.arch }}
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>
+                                               {{ _("Kernel version") }}
+                                       </td>
+                                       <td>
+                                               {{ profile.kernel }}
+                                       </td>
+                               </tr>
+                       </table>
+               </div>
+
+               <div class="span6">
+                       {% if profile.hypervisor %}
+                               <h3>{{ _("Hypervisor") }}</h3>
+                               <p>
+                                       {{ _("This machine is running in a virtual environment.") }}
+                               </p>
+
+                               <table class="table">
+                                       <tr>
+                                               <td>
+                                                       {{ _("Vendor") }}
+                                               </td>
+                                               <td>
+                                                       {{ profile.hypervisor.vendor }}
+                                               </td>
+                                       </tr>
+                                       <tr>
+                                               <td>
+                                                       {{ _("Type") }}
+                                               </td>
+                                               <td>
+                                                       {{ profile.hypervisor.type }}
+                                               </td>
+                                       </tr>
+                               </table>
+                       {% else %}
+                               <h3>{{ _("Hardware vendor") }}</h3>
+                               <table class="table">
+                                       <tr>
+                                               <td>
+                                                       {{ _("Vendor") }}
+                                               </td>
+                                               <td>
+                                                       {{ profile.vendor or _("Unknown") }}
+                                               </td>
+                                       </tr>
+                                       <tr>
+                                               <td>
+                                                       {{ _("Model") }}
+                                               </td>
+                                               <td>
+                                                       {{ profile.model or _("Unknown") }}
+                                               </td>
+                                       </tr>
+                               </table>
+                       {% end %}
+               </div>
+       </div>
+
+       <hr>
 
        {% if profile.network %}
-               <h4>{{ _("Network") }}</h4>
-               <table class="fireinfo">
-                       <tr>
-                               <td class="key">
-                                       {{ _("Network configuration") }}
-                               </td>
-                               <td class="value">
-                                       <table class="cpufeatures">
-                                               <tr>
-                                                       {% for zone in ("GREEN", "RED", "BLUE", "ORANGE") %}
-                                                               {% if profile.network.has_zone(zone.lower()) %}
-                                                                       <td class="enabled">
-                                                               {% else %}
-                                                                       <td class="disabled">
-                                                               {% end %}
-                                                                       {{ _(zone)  }}
-                                                               <td>
+               <div class="row">
+                       <div class="span12">
+                               <h2>{{ _("Network") }}</h2>
+                               <p>
+                                       {{ _("Enabled network zones") }}
+
+                                       {% for zone in ("GREEN", "RED", "BLUE", "ORANGE") %}
+                                               {% if profile.network.has_zone(zone.lower()) %}
+                                                       {% if zone == "GREEN" %}
+                                                               <span class="label label-success">{{ _(zone) }}</span>
+                                                       {% elif zone == "RED" %}
+                                                               <span class="label label-important">{{ _(zone) }}</span>
+                                                       {% elif zone == "ORANGE" %}
+                                                               <span class="label label-warning">{{ _(zone) }}</span>
+                                                       {% elif zone == "BLUE" %}
+                                                               <span class="label label-info">{{ _(zone) }}</span>
                                                        {% end %}
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-               </table>
+                                               {% end %}
+                                       {% end %}
+                               </p>
+                       </div>
+               </div>
        {% end %}
 
-       {% if profile.hypervisor %}
-               <h4>{{ _("Hypervisor") }}</h4>
-               <p>
-                       {{ _("This machine is running in a virtual environment.") }}
-               </p>
+       <hr>
 
-               <table class="fireinfo">
-                       <tr>
-                               <td class="key">
-                                       {{ _("Vendor") }}
-                               </td>
-                               <td class="value">
-                                       {{ profile.hypervisor.vendor }}
-                               </td>
-                       </tr>
-                       <tr>
-                               <td class="key">
-                                       {{ _("Type") }}
-                               </td>
-                               <td class="value">
-                                       {{ profile.hypervisor.type }}
-                               </td>
-                       </tr>
-               </table>
-       {% end %}
-       
-       <h4>{{ _("Hardware") }}</h4>
-       <table class="fireinfo">
-               <tr>
-                       <td colspan="2">
-                               <strong>{{ _("CPU") }}</strong>
-                       </td>
-               </tr>
-               <tr>
-                       <td class="key">
-                               {{ _("Vendor") }}
-                       </td>
-                       <td class="value">
-                               <a href="/stats/cpus">{{ profile.cpu.vendor }}</a>
-                       </td>
-               </tr>
-               <tr>
-                       <td class="key">
-                               {{ _("Model") }}
-                       </td>
-                       <td class="value">
-                                {{ profile.cpu.model_string or _("Not available") }}
-                       </td>
-               </tr>
-               <tr>
-                       <td class="key">
-                               {{ _("Core count") }}
-                       </td>
-                       <td class="value">
-                                {{ profile.cpu.count }}
-                       </td>
-               </tr>
-               <tr>
-                       <td class="key">
-                               {{ _("Speed") }}
-                       </td>
-                       <td class="value">
-                               {{ profile.cpu.speed }} MHz
-                               {% if profile.cpu.speed != profile.cpu.bogomips %}
-                                       (Bogomips: {{ profile.cpu.bogomips }})
-                               {% end %}
-                       </td>
-               </tr>
-               {% if profile.cpu.vendor != "ARM" %}
-                       <tr>
-                               <td class="key">
-                                       {{ _("Supported features") }}
-                               </td>
-                               <td class="value">
-                                       <table class="cpufeatures">
-                                               <tr>
+       <h2>{{ _("Hardware") }}</h2>
+       <div class="row">
+               <div class="span6">
+                       <table class="table">
+                               <tr>
+                                       <td colspan="2">
+                                               <strong>{{ _("CPU") }}</strong>
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>
+                                               {{ _("Vendor") }}
+                                       </td>
+                                       <td>
+                                               <a href="/stats/cpus">{{ profile.cpu.vendor }}</a>
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>
+                                               {{ _("Model") }}
+                                       </td>
+                                       <td>
+                                                {{ profile.cpu.model_string or _("Not available") }}
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>
+                                               {{ _("Cores") }}
+                                       </td>
+                                       <td>
+                                                {{ profile.cpu.count }}
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>
+                                               {{ _("Speed") }}
+                                       </td>
+                                       <td>
+                                               {{ profile.cpu.speed }} MHz
+                                               {% if profile.cpu.speed != profile.cpu.bogomips %}
+                                                       (Bogomips: {{ profile.cpu.bogomips }})
+                                               {% end %}
+                                       </td>
+                               </tr>
+                               {% if profile.cpu.vendor != "ARM" %}
+                                       <tr>
+                                               <td>
+                                                       {{ _("Supported features") }}
+                                               </td>
+                                               <td>
                                                        {% if profile.cpu.capable_64bit %}
-                                                               <td class="enabled">
-                                                       {% else %}
-                                                               <td class="disabled">
+                                                               <span class="label label-success">{{ _("64 bit capable") }}</span>
                                                        {% end %}
-                                                               {{ _("64 bit")  }}
-                                                       <td>
 
                                                        {% if profile.cpu.capable_pae %}
-                                                               <td class="enabled">
-                                                       {% else %}
-                                                               <td class="disabled">
+                                                               <span class="label label-success">{{ _("PAE capable") }}</span>
                                                        {% end %}
-                                                               {{ _("PAE")  }}
-                                                       <td>
 
                                                        {% if profile.cpu.capable_virt %}
-                                                               <td class="enabled">
-                                                       {% else %}
-                                                               <td class="disabled">
+                                                               <span class="label label-success">{{ _("VT-x/AMD-V") }}</span>
                                                        {% end %}
-                                                               {{ _("VT-x/AMD-V")  }}
-                                                       <td>
-                                               </tr>
-                                       </table>
-                               </td>
-                       </tr>
-               {% end %}
-               <tr>
-                       <td colspan="2">
-                               <strong>{{ _("Memory") }}<strong>
-                       </td>
-               </tr>
-               <tr>
-                       <td class="key">
-                               {{ _("Size") }}
-                       </td>
-                       <td class="value">
-                               {{ format_size(profile.memory) }}
-                       </td>
-               </tr>
-               <tr>
-                       <td colspan="2">
-                               <strong>{{ _("Disk") }}<strong>
-                       </td>
-               </tr>
-               <tr>
-                       <td class="key">
-                               {{ _("Size") }}
-                       </td>
-                       <td class="value">
-                               {{ format_size(profile.root_size) }}
-                       </td>
-               </tr>
-               <tr>
-                       <td colspan="2">
-                               {{ modules.StasyDeviceTable(profile.devices) }}
-                       </td>
-               </tr>
-       </table>
-       <br class="clear" />
+                                               </td>
+                                       </tr>
+                               {% end %}
+                       </table>
+               </div>
+
+               <div class="span6">
+                       <table class="table">
+                               <tr>
+                                       <td>
+                                               {{ _("Memory size") }}
+                                       </td>
+                                       <td>
+                                               {{ format_size(profile.memory) }}
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td>
+                                               {{ _("System disk size") }}
+                                       </td>
+                                       <td>
+                                               {{ format_size(profile.root_size) }}
+                                       </td>
+                               </tr>
+                       </table>
+               </div>
+       </div>
+
+       <hr>
+
+       {% if profile.devices %}
+               <h3>{{ _("Peripherial devices") }}</h3>
+               {{ modules.StasyDeviceTable(profile.devices) }}
+               <hr>
+       {% end %}
 
        <h3>{{ _("Signature images") }}</h3>
-       <table>
+       <ul class="unstyled">
                {% for i in range(1) %}
-                       <tr>
-                               <td>
-                                       <!-- XXX need some bbcode here -->
-                                       <a href="http://i-use.ipfire.org/profile/{{ profile.public_id }}/{{ i }}.png">
-                                               <img src="http://i-use.ipfire.org/profile/{{ profile.public_id }}/{{ i }}.png"
-                                                       alt="{{ _("Signature image") }}" />
-                                       </a>
-                               </td>
-                       </tr>
+                       <li>
+                               <!-- XXX need some bbcode here -->
+                               <a href="http://i-use.ipfire.org/profile/{{ profile.public_id }}/{{ i }}.png">
+                                       <img src="http://i-use.ipfire.org/profile/{{ profile.public_id }}/{{ i }}.png"
+                                               alt="{{ _("Signature image") }}" />
+                               </a>
+                       </li>
                {% end %}
-       </table>
+       </ul>
 
-       <p class="links">
-               {{ _("Last update") }}: {{ locale.format_date(profile.updated) }}
-       </p>
+       <div class="pull-right">
+               <p>
+                       {{ _("Last update") }}: {{ locale.format_date(profile.updated) }}
+               </p>
+       </div>
 {% end block %}
index a02fd96077d1d49c7fab441e86604bde314b030a..0b1addbb24698cfc497248b048acaa737eafefbb 100644 (file)
@@ -2,37 +2,42 @@
 
 {% block title %}{{ _("Profile not found") }}}{% end block %}
 
-{% block content %}
-       <h3>404 - {{ _("Profile not found") }}</h3>
-       <img class="floatTL" src="{{ static_url("images/error/404.png") }}"
-               alt="{{ _("Error") }}" />
-       <p>
-               {% if lang == "de" %}
-                       Es wurden keine Daten für das Profil <em>{{ profile_id }}</em>
-                       gefunden.
-               {% else %}
-                       There was no profile data found for profile
-                       <em>{{ profile_id }}</em>.
-               {% end %}
-       </p>
-       <p>
-               {% if lang == "de" %}
-                       Der Eigentümer dieses Profils hat möglicherweise der Veröffentlichung
-                       der Daten nicht zugestimmt oder diese abgeschaltet.
-               {% else %}
-                       Apparently, the profile owner has not submitted any data or disabled
-                       it recently.
-               {% end %}
-       </p>
-       <p>
-               {% if lang == "de" %}
-                       Falls dieses Profil Ihr eigenes ist, so können Sie die Veröffentlichung
-                       im Web-Interface
-                       <a href="http://wiki.ipfire.org/de/fireinfo/my_profile" target="_blank">einschalten</a>.
-               {% else %}
-                       If this is your own profile, you can
-                       <a href="http://wiki.ipfire.org/en/fireinfo/my_profile" target="_blank">enable</a>
-                       the submission on the web user interface.
-               {% end %}
-       </p>
+{% block body %}
+       <img class="pull-right" src="{{ static_url("images/error/404.png") }}" alt="{{ _("Error") }}" />
+       <div class="page-header">
+               <h1>404 - {{ _("Profile not found") }}</h1>
+       </div>
+
+       <div class="row">
+               <div class="span12">
+                       <p>
+                               {% if lang == "de" %}
+                                       Es wurden keine Daten für das Profil <code>{{ profile_id }}</code>
+                                       gefunden.
+                               {% else %}
+                                       There was no profile data found for profile <code>{{ profile_id }}</code>.
+                               {% end %}
+                       </p>
+                       <p>
+                               {% if lang == "de" %}
+                                       Der Eigentümer dieses Profils hat möglicherweise der Veröffentlichung
+                                       der Daten nicht zugestimmt oder diese abgeschaltet.
+                               {% else %}
+                                       The profile owner has probably not submitted any data 
+                                       or recently disabled the transmission.
+                               {% end %}
+                       </p>
+                       <p>
+                               {% if lang == "de" %}
+                                       Falls dieses Profil Ihr eigenes ist, so können Sie die Veröffentlichung
+                                       im Web-Interface
+                                       <a href="http://wiki.ipfire.org/de/fireinfo/my_profile" target="_blank">einschalten</a>.
+                               {% else %}
+                                       If this is your own profile, you can
+                                       <a href="http://wiki.ipfire.org/en/fireinfo/my_profile" target="_blank">enable</a>
+                                       the submission on the web user interface.
+                               {% end %}
+                       </p>
+               </div>
+       </div>
 {% end block %}
index d1c8f5a554b3147c97d7dd5663fd78d8670e5af4..a9ee6c0298e270a0653b62c3a232fb900feb1cb0 100644 (file)
@@ -2,7 +2,7 @@
 
 {% block title %}{{ _("Profile lookup") }}{% end block %}
 
-{% block content %}
+{% block body %}
        <h3>{{ _("Profile lookup") }}</h3>
 
        <p>
index 1f90028e35a54f1b0291ba79a6e8c990b28129bc..6083e2f1bea06a528448ab6f0f02dbb3aa26926d 100644 (file)
@@ -2,7 +2,7 @@
 
 {% block title %}{{ _("Admin") }}{% end block %}
 
-{% block content %}
+{% block body %}
        <h3>Need a headline</h3>
 
        <table>
index df4cf27406ab3e71a2f2f1ebe3ddba9176903bf9..2afa62e27eee469ecc6ccfa9cd28fe55457032b2 100644 (file)
@@ -1,59 +1,78 @@
-{% extends "stasy-base-2.html" %}
+{% extends "stasy-base-1.html" %}
 
 {% block title %}{{ _("CPU flags") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Processor flags") }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       Diese Seite untersucht CPUs und ihre Funktionalitäten.
-                       Anhand dieser Graphen können die Entwickler einige Entscheidungen
-                       über die Betriebssystemkonfiguration treffen.
-               </p>
-       {% else %}
-               <p>
-                       On this page we will examine which CPUs provide a specific feature.
-                       These charts will help the IPFire developers to make decisions about
-                       the operating system configuration.
-               </p>
-       {% end %}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Processor flags") }}</h1>
+       </div>
 
-       <h4>{{ _("CPUs that support virtualization") }}</h4>
-       {% if lang == "de" %}
-               <p>
-                       Für zukünftige Planungen ist es nötig zu wissen, ob genug
-                       Hardware mit Virtualisierungsunterstützung vorhanden ist
-                       (Intels VT-x and AMD-V).
-               </p>
-       {% else %}
-               <p>
-                       For future planning it is important to know if there is enough hardware
-                       support for virtualization like VT-x and AMD-V.
-               </p>
-       {% end %}
-       {{ modules.StasyTable(cpus_virt, sortby="percentage") }}
+       <div class="row">
+               <div class="span12">
+                       {% if lang == "de" %}
+                               <p>
+                                       Diese Seite untersucht CPUs und ihre Funktionalitäten.
+                                       Anhand dieser Graphen können die Entwickler einige Entscheidungen
+                                       über die Betriebssystemkonfiguration treffen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       On this page we will examine which CPUs provide a specific feature.
+                                       These charts will help the IPFire developers to make decisions about
+                                       the operating system configuration.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 
-       <h4>{{ _("CPUs with PAE") }}</h4>
-       {% if lang == "de" %}
-               <p>
-                       Diese Grafik zeigt uns wieviele Prozessoren das PAE-Flag unterstützen.
-               </p>
-       {% else %}
-               <p>
-                       This chart shows us which CPUs have got the PAE flag.
-               </p>
-       {% end %}
-       {{ modules.StasyTable(cpus_pae, sortby="percentage") }}
+       <div class="row">
+               <div class="span12">
+                       <h2>{{ _("CPUs that support 64 bits") }}</h2>
+                       {% if lang == "de" %}
+                               <p>
+                                       Wieviele Prozessoren unterstützen die 64-Bit-Architektur?
+                               </p>
+                       {% else %}
+                               <p>
+                                       How many CPUs support the 64-bit architecture?
+                               </p>
+                       {% end %}
+                       {{ modules.StasyTable(cpus_lm, sortby="percentage") }}
+               </div>
+       </div>
 
-       <h4>{{ _("CPUs that support 64 bits") }}</h4>
-       {% if lang == "de" %}
-               <p>
-                       Wieviele Prozessoren unterstützen die 64-Bit-Architektur?
-               </p>
-       {% else %}
-               <p>
-                       How many CPUs support the 64-bit architecture?
-               </p>
-       {% end %}
-       {{ modules.StasyTable(cpus_lm, sortby="percentage") }}
+       <div class="row">
+               <div class="span12">
+                       <h2>{{ _("CPUs with PAE") }}</h2>
+                       {% if lang == "de" %}
+                               <p>
+                                       Diese Grafik zeigt uns wieviele Prozessoren das PAE-Flag unterstützen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       This chart shows us which CPUs have got the PAE flag.
+                               </p>
+                       {% end %}
+                       {{ modules.StasyTable(cpus_pae, sortby="percentage") }}
+               </div>
+       </div>
+
+       <div class="row">
+               <div class="span12">
+                       <h2>{{ _("CPUs that support virtualization") }}</h2>
+                       {% if lang == "de" %}
+                               <p>
+                                       Für zukünftige Planungen ist es nötig zu wissen, ob genug
+                                       Hardware mit Virtualisierungsunterstützung vorhanden ist
+                                       (Intels VT-x and AMD-V).
+                               </p>
+                       {% else %}
+                               <p>
+                                       For future planning it is important to know if there is enough hardware
+                                       support for virtualization like VT-x and AMD-V.
+                               </p>
+                       {% end %}
+                       {{ modules.StasyTable(cpus_virt, sortby="percentage") }}
+               </div>
+       </div>
 {% end block %}
index e34fff2a3fda0186ca1ad6ada486deea7a3de109..d2136343dd762bf2672aa83387bc24b133f184f8 100644 (file)
@@ -1,36 +1,55 @@
-{% extends "stasy-base-2.html" %}
+{% extends "stasy-base-1.html" %}
 
 {% block title %}{{ _("Processors") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("CPU vendors") }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       Eine Aufstellung über den beliebtesten Prozessor-Hersteller:
-               </p>
-       {% else %}
-               <p>
-                       This chart shows us which vendors is the most favorite for the CPUs
-                       used in IPFire.
-               </p>
-       {% end %}
-       {{ modules.StasyTable(cpu_vendors, sortby="percentage") }}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Hardware: CPUs") }}</h1>
+       </div>
 
-       <h3>{{ _("Speed") }}</h3>
-       <p>
-               {{ _("The average speed of all systems in the database is: <strong>%.2f MHz</strong>.") % average_speed }}
-               <br />
-               {{ _("All together, there are <strong>%s bogomips</strong> out there.") % locale.friendly_number(bogomips) }}
-       </p>
-       {{ modules.StasyTable(cpu_speeds) }}
+       <div class="row">
+               <div class="span12">
+                       <a href="/stats/cpuflags">{{ _("See statistics about common CPU flags") }}</a>
+                       <hr>
+               </div>
+       </div>
 
-       <h3>{{ _("CPU cores counter") }}</h3>
-       <p>
-               {{ _("See a breakdown of the CPU cores that are installed on the IPFire systems.") }}
-       </p>
-       {{ modules.StasyCPUCoreTable(cpu_cores) }}
+       <div class="row">
+               <div class="span12">
+                       <h2>{{ _("Vendors") }}</h2>
+                       {% if lang == "de" %}
+                               <p>
+                                       Eine Aufstellung über den beliebtesten Prozessor-Hersteller:
+                               </p>
+                       {% else %}
+                               <p>
+                                       This chart shows us which vendors is the most favorite for the CPUs
+                                       used in IPFire.
+                               </p>
+                       {% end %}
+                       {{ modules.StasyTable(cpu_vendors, sortby="percentage") }}
+               </div>
+       </div>
 
-       <p class="links">
-               <a href="cpuflags">{{ _("See statistics about common CPU flags") }}</a>
-       </p>
+       <div class="row">
+               <div class="span12">
+                       <h2>{{ _("Speed") }}</h2>
+                       <p>
+                               {{ _("The average speed of all systems in the database is: <strong>%.2f MHz</strong>.") % average_speed }}
+                               <br>
+                               {{ _("All together, there are <strong>%s bogomips</strong> out there.") % locale.friendly_number(bogomips) }}
+                       </p>
+                       {{ modules.StasyTable(cpu_speeds) }}
+               </div>
+       </div>
+
+       <div class="row">
+               <div class="span12">
+                       <h2>{{ _("CPU core counter") }}</h2>
+                       <p>
+                               {{ _("See a breakdown of the CPU cores that are installed on the IPFire systems.") }}
+                       </p>
+                       {{ modules.StasyCPUCoreTable(cpu_cores) }}
+               </div>
+       </div>
 {% end block %}
index f5a38991e76d2aac01837a735348c535efaca359..d6ad0774d607ef479a36bfac3b34bb15677518c5 100644 (file)
@@ -1,33 +1,43 @@
-{% extends "stasy-base-2.html" %}
+{% extends "stasy-base-1.html" %}
 
 {% block title %}{{ _("Geo locations") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Language selection") }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       Dies gibt einen Überblick über die Häufigkeit der ausgewählten
-                       Sprachen.
-               </p>
-       {% else %}
-               <p>
-                       This will give a short overview about what languages are configured
-                       on the IPFire webinterface.
-               </p>
-       {% end %}
-       {{ modules.StasyTable(languages, sortby="percentage", locale=True) }}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Geo locations") }}</h1>
+       </div>
 
+       <div class="row">
+               <div class="span12">
+                       {% if lang == "de" %}
+                               <p>
+                                       Dieses Diagramm zeigt in welchem Land IPFire am häufigsten
+                                       eingesetzt wird.
+                               </p>
+                       {% else %}
+                               <p>
+                                       This chart shows us in which country IPFire is running.
+                               </p>
+                       {% end %}
+                       {{ modules.StasyGeoTable(geo_locations) }}
+               </div>
+       </div>
 
-       <h3>{{ _("Geo locations") }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       Dieses Diagramm zeigt in welchem Land IPFire am häufigsten
-                       eingesetzt wird.
-               </p>
-       {% else %}
-               <p>
-                       This chart shows us in which country IPFire is running.
-               </p>
-       {% end %}
-       {{ modules.StasyGeoTable(geo_locations) }}
+       <div class="row">
+               <div class="span12">
+                       <h2>{{ _("Language selection") }}</h2>
+                       {% if lang == "de" %}
+                               <p>
+                                       Dies gibt einen Überblick über die Häufigkeit der ausgewählten
+                                       Sprachen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       This will give a short overview about what languages are configured
+                                       on the IPFire webinterface.
+                               </p>
+                       {% end %}
+                       {{ modules.StasyTable(languages, sortby="percentage", locale=True) }}
+               </div>
+       </div>
 {% end block %}
index 383b8a47fe02125175fad8a248f1e38063cdd068..ad5429f475772622fc2627120fb3464df71c68a7 100644 (file)
@@ -1,11 +1,18 @@
-{% extends "stasy-base-2.html" %}
+{% extends "stasy-base-1.html" %}
 
 {% block title %}{{ _("Memory") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Memory") }}</h3>
-       <p>
-               {{ _("The average amount of memory of all systems in the database is: <strong>%.2f MB</strong>.") % average_memory }}
-       </p>
-       {{ modules.StasyTable(memory) }}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Memory") }}</h1>
+       </div>
+
+       <div class="row">
+               <div class="span12">
+                       <p>
+                               {{ _("The average amount of memory of all systems in the database is: <strong>%.2f MB</strong>.") % average_memory }}
+                       </p>
+                       {{ modules.StasyTable(memory) }}
+               </div>
+       </div>
 {% end block %}
index 67c8af45922c4955e9aaec0628840ac99dda88e8..148e66f53a3bf222b519c61c87f11d36839b9f3b 100644 (file)
@@ -1,18 +1,25 @@
-{% extends "stasy-base-2.html" %}
+{% extends "stasy-base-1.html" %}
 
 {% block title %}{{ _("Network") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Network configuration") }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       Diese Grafik zeigt uns die beliebteste Netzwerkkonfiguration.
-               </p>
-       {% else %}
-               <p>
-                       This chart shows us which is the most favourite network configuration.
-               </p>
-       {% end %}
-       {{ modules.StasyTable(network_zones, sortby="percentage", percentage=True) }}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Network configuration") }}</h1>
+       </div>
+
+       <div class="row">
+               <div class="span12">
+                       {% if lang == "de" %}
+                               <p>
+                                       Diese Grafik zeigt uns die beliebteste Netzwerkkonfiguration.
+                               </p>
+                       {% else %}
+                               <p>
+                                       This chart shows us which is the most favourite network configuration.
+                               </p>
+                       {% end %}
+                       {{ modules.StasyTable(network_zones, sortby="percentage", percentage=True) }}
+               </div>
+       </div>
 {% end block %}
 
index 5a56aa20bae38549bdedc2392d126de5d8c30f23..45000d349555cfd9d8c888963c02861c9d186938 100644 (file)
@@ -1,24 +1,39 @@
-{% extends "stasy-base-2.html" %}
+{% extends "stasy-base-1.html" %}
 
 {% block title %}{{ _("Operating system") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Releases") }}</h3>
-       {{ modules.StasyTable(releases, sortby="percentage") }}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Releases") }}</h1>
+       </div>
 
-       <h3>{{ _("Architectures") }}</h3>
-       {{ modules.StasyTable(arches, sortby="percentage") }}
+       <div class="row">
+               <div class="span12">
+                       {{ modules.StasyTable(releases, sortby="percentage") }}
+               </div>
+       </div>
 
-       <h3>{{ _("Kernels") }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       Dies zeigt uns, welche Kernel am häufigsten verwendet werden.
-               </p>
-       {% else %}
-               <p>
-                       This chart gives an overview about what kernel the machines are
-                       runnning.
-               </p>
-       {% end %}
-       {{ modules.StasyTable(kernels, sortby="percentage") }}
+       <div class="row">
+               <div class="span12">
+                       <h2>{{ _("Architectures") }}</h2>
+                       {{ modules.StasyTable(arches, sortby="percentage") }}
+               </div>
+       </div>
+
+       <div class="row">
+               <div class="span12">
+                       <h3>{{ _("Kernels") }}</h3>
+                       {% if lang == "de" %}
+                               <p>
+                                       Dies zeigt uns, welche Kernel am häufigsten verwendet werden.
+                               </p>
+                       {% else %}
+                               <p>
+                                       This chart gives an overview about what kernel the machines are
+                                       runnning.
+                               </p>
+                       {% end %}
+                       {{ modules.StasyTable(kernels, sortby="percentage") }}
+               </div>
+       </div>
 {% end block %}
index 87d18690aaf2a53b534b96201c03593d908e15cb..b4101a12ac485f660c8d960914df1e9f6bf8b493 100644 (file)
@@ -1,37 +1,48 @@
-{% extends "stasy-base-2.html" %}
+{% extends "stasy-base-1.html" %}
 
 {% block title %}{{ _("Virtualization") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Virtualization support") }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       IPFire läuft hervorragend in virtuellen Umgebungen.
-               </p>
-               <p>
-                       Dieser Graph gibt Aufschluss darüber, wieviele Systeme
-                       virtuell laufen.
-               </p>
-       {% else %}
-               <p>
-                       IPFire is running very well in a virtual environment.
-               </p>
-               <p>
-                       See this chart to get a clue about how many machines are running
-                       virtually.
-               </p>
-       {% end %}
-       {{ modules.StasyTable(is_virtual, sortby="percentage") }}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Virtualization support") }}</h1>
+       </div>
 
-       <h4>{{ _("Hypervisors") }}</h4>
-       {% if lang == "de" %}
-               <p>
-                       Diese Systeme werden eingesetzt um IPFire zu virtualisieren:
-               </p>
-       {% else %}
-               <p>
-                       This is a list of all hypervisor vendors that IPFire is running on.
-               </p>
-       {% end %}
-       {{ modules.StasyTable(hypervisor_vendors, sortby="percentage") }}
+       <div class="row">
+               <div class="span12">
+                       {% if lang == "de" %}
+                               <p>
+                                       IPFire läuft hervorragend in virtuellen Umgebungen.
+                               </p>
+                               <p>
+                                       Dieser Graph gibt Aufschluss darüber, wieviele Systeme
+                                       virtuell laufen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       IPFire is running very well in a virtual environment.
+                               </p>
+                               <p>
+                                       See this chart to get a clue about how many machines are running
+                                       virtually.
+                               </p>
+                       {% end %}
+                       {{ modules.StasyTable(is_virtual, sortby="percentage") }}
+               </div>
+       </div>
+
+       <div class="row">
+               <div class="span12">
+                       <h2>{{ _("Hypervisors") }}</h2>
+                       {% if lang == "de" %}
+                               <p>
+                                       Diese Systeme werden eingesetzt um IPFire zu virtualisieren:
+                               </p>
+                       {% else %}
+                               <p>
+                                       This is a list of all hypervisor vendors that IPFire is running on.
+                               </p>
+                       {% end %}
+                       {{ modules.StasyTable(hypervisor_vendors, sortby="percentage") }}
+               </div>
+       </div>
 {% end block %}
index c3ce52e641748a9072d5f90b0da7a29b9952eae4..d1704f3691dfdc535b10e9bf878fee318dc0667a 100644 (file)
@@ -1,9 +1,12 @@
-{% extends "stasy-base-2.html" %}
+{% extends "stasy-base-1.html" %}
 
 {% block title %}{{ _("Statistics") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("fireinfo statistics") }}</h3>
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("fireinfo statistics") }}</h1>
+       </div>
+
        {% if lang == "de" %}
                <p>
                        An dieser Stelle sind eine Menge Statistiken zu finden, die
                </p>
        {% else %}
                <p>
-                       At this place you can find several charts to find out what kind
-                       of hardware is most often used for IPFire.
+                       Click on the links below to see plots from the fireinfo data.
                </p>
        {% end %}
 
-       <ul class="list">
-               <li><a href="/stats/cpus">{{ _("Processors") }}</a></li>
-               <li><a href="/stats/cpuflags">{{ _("Processor flags") }}</a></li>
-               <li><a href="/stats/memory">{{ _("Memory") }}</a></li>
-               <li><a href="/stats/oses">{{ _("IPFire versions") }}</a></li>
-               <li><a href="/stats/virtual">{{ _("Virtualization") }}</a></li>
-               <li><a href="/stats/geo">{{ _("Geographical information") }}</a></li>
-               <li><a href="/stats/network">{{ _("Network") }}</a></li>
-       </ul>
+       <ul class="thumbnails">
+           <li class="span4">
+               <div class="thumbnail">
+                               <img src="{{ static_url("images/tux/ipfire_tux_256x256.png") }}" alt="">
+                               <div class="caption">
+                                       <h3>
+                                               <a href="/stats/oses">
+                                                       {{ _("IPFire versions") }}
+                                               </a>
+                                       </h3>
+                                       <p>
+                                               {% if lang == "de" %}
+                                                       Übersicht über die aktuell laufenden Versionen der
+                                                       IPFire Systeme.
+                                               {% else %}
+                                                       Get an overview over all currently running versions
+                                                       of IPFire.
+                                               {% end %}
+                                       </p>
+                               </div>
+                       </div>
+               </li>
+           <li class="span4">
+               <div class="thumbnail">
+                               <img src="{{ static_url("images/tux/ipfire_tux_256x256.png") }}" alt="">
+                               <div class="caption">
+                                       <h3>
+                                               <a href="/stats/geo">
+                                                       {{ _("Geo locations") }}
+                                               </a>
+                                       </h3>
+                                       <p>
+                                               {% if lang == "de" %}
+                                                       Zeigt eine Verteilung über die Länder, in
+                                                       denen IPFire-Systeme laufen.
+                                               {% else %}
+                                                       Shows a plot from all the countries in which
+                                                       IPFire systems are running.
+                                               {% end %}
+                                       </p>
+                               </div>
+                       </div>
+               </li>
+           <li class="span4">
+               <div class="thumbnail">
+                               <img src="{{ static_url("images/tux/ipfire_tux_256x256.png") }}" alt="">
+                               <div class="caption">
+                                       <h3>
+                                               <a href="/stats/cpus">
+                                                       {{ _("Hardware: CPUs") }}
+                                               </a>
+                                       </h3>
+                                       <p>
+                                               {% if lang == "de" %}
+                                                       Zeigt Informationen über die Prozessortypen,
+                                                       Hersteller und Geschwindigkeiten.
+                                               {% else %}
+                                                       Shows information about processor types, vendors
+                                                       and clock speeds.
+                                               {% end %}
+                                       </p>
+                                       <h4>
+                                               <a href="/stats/cpuflags">
+                                                       {{ _("CPU features") }}
+                                               </a>
+                                       </h4>
+                               </div>
+                       </div>
+               </li>
+           <li class="span4">
+               <div class="thumbnail">
+                               <img src="{{ static_url("images/tux/ipfire_tux_256x256.png") }}" alt="">
+                               <div class="caption">
+                                       <h3>
+                                               <a href="/stats/memory">
+                                                       {{ _("Hardware: Memory") }}
+                                               </a>
+                                       </h3>
+                                       <p>
+                                               {% if lang == "de" %}
+                                                       Zeigt Informationen über die durchschnittlich
+                                                       verbaute Menge an Arbeitsspeicher und mehr.
+                                               {% else %}
+                                                       Shows information about the average installed
+                                                       amount of RAM.
+                                               {% end %}
+                                       </p>
+                               </div>
+                       </div>
+               </li>
+           <li class="span4">
+               <div class="thumbnail">
+                               <img src="{{ static_url("images/tux/ipfire_tux_256x256.png") }}" alt="">
+                               <div class="caption">
+                                       <h3>
+                                               <a href="/stats/network">
+                                                       {{ _("Network") }}
+                                               </a>
+                                       </h3>
+                                       <p>
+                                               {% if lang == "de" %}
+                                                       Zeigt Grafiken über die beliebteste
+                                                       Netzwerkkonfiguration.
+                                               {% else %}
+                                                       Shows plots about the favourite network
+                                                       configurations.
+                                               {% end %}
+                                       </p>
+                               </div>
+                       </div>
+               </li>
+           <li class="span4">
+               <div class="thumbnail">
+                               <img src="{{ static_url("images/tux/ipfire_tux_256x256.png") }}" alt="">
+                               <div class="caption">
+                                       <h3>
+                                               <a href="/stats/virtual">
+                                                       {{ _("Virtualization") }}
+                                               </a>
+                                       </h3>
+                                       <p>
+                                               {% if lang == "de" %}
+                                                       Welcher Hypervisor wird am häufigsten eingesetzt?
+                                                       Wieviele Systeme laufen in einer virtuellen
+                                                       Umgebung?
+                                               {% else %}
+                                                       Which hypervisor is the most common one?
+                                                       How many systems are running in a virtual
+                                                       environment?
+                                               {% end %}
+                                       </p>
+                               </div>
+                       </div>
+               </li>
+    </ul>
 {% end block %}
index 8799f76f0d20bf2b08ed6d9e23be3ccb46beac4a..dc14d145dac046074df9d9cbfbeca2661fd918b0 100644 (file)
@@ -1,17 +1,26 @@
-{% extends "stasy-base-2.html" %}
+{% extends "stasy-base-1.html" %}
 
-{% block content %}
-       <h3>{{ vendor_name }}</h3>
-       {% if lang == "de" %}
-               <p>
-                       Dies ist eine Aufstellung über alle Geräte von
-                       <strong>{{ vendor_name }}</strong> in der Datenbank.
-       {% else %}
-               <p>
-                       This is a list of all devices this database knows about from
-                       <strong>{{ vendor_name }}</strong>.
-               </p>
-       {% end %}
+{% block title %}{{ vendor_name }}{% end block %}
 
-       {{ modules.StasyDeviceTable(models) }}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ vendor_name }}</h1>
+       </div>
+
+       <div class="row">
+               <div class="span12">
+                       {% if lang == "de" %}
+                               <p>
+                                       Dies ist eine Aufstellung über alle Geräte von
+                                       <strong>{{ vendor_name }}</strong> in der Datenbank.
+                       {% else %}
+                               <p>
+                                       This is a list of all devices this database knows about from
+                                       <strong>{{ vendor_name }}</strong>.
+                               </p>
+                       {% end %}
+
+                       {{ modules.StasyDeviceTable(models) }}
+               </div>
+       </div>
 {% end block %}
diff --git a/www/templates/static/about.html b/www/templates/static/about.html
deleted file mode 100644 (file)
index 67928b5..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-{% extends "../base-feature.html" %}
-
-{% block title %}{{ _("About IPFire") }}{% end block %}
-
-{% block content %}
-       <h3>{{ _("About IPFire") }}</h3>
-
-       {% if lang == "de" %}
-               <p>
-                       <strong>IPFire</strong> ist auf der Grundidee einer hohen "Flexibilität" aufgebaut. Das ermöglicht
-                       aus einer einzigen Basis verschiedene Einsatzzwecke optimal zu unterstützen. Beginnend mit einem
-                       Firewall-System bestehend aus wenigen Megabytes ist es möglich IPFire auch als Dateiserver,
-                       Proxyserver, Wireless Access Point oder VPN-Gateway für Mitarbeiter, Filialen oder Kunden zu
-                       betreiben. Dies und mehr ist möglich durch einen eigens entwickelten Paketmanager, der nur
-                       installiert was gewollt ist und Sicherheitsupdates sehr einfach macht.
-               </p>
-               <p>
-                       Dies ist der beste Weg ein Netzwerk sicher zu gestalten, denn Sicherheit ist kein Programm,
-                       das einfach installiert werden kann und um welches man sich nicht mehr kümmern braucht.
-                       Hingegen kann Sicherheit von Unternehmen zu Unternehmen ganz anders aussehen und das
-                       erfordert Anpassungsfähigkeit, die IPFire mit sich bringt.
-               </p>
-               <p>
-                       <em>Die Links in der Sidebar zeigen, was mit IPFire alles möglich ist.
-                       Jede Rubrik trägt ihren Teil zum Gesamtkonzept bei und macht IPFire ganz
-                       individuell zu dem, was es ist.</em>
-               </p>
-       {% else %}
-               <p>
-                       The foundation of <strong>IPFire</strong> is the high level of flexibility which lets us
-                       configure different versions of this operating system out of a single base. Beginning with a
-                       small firewall system of a few megabytes, it is possible to run IPFire as a file server or
-                       VPN gateway for staff, branches or customers. This modularity means that yor version of
-                       IPFire runs with exactly what you require and nothing more.
-                       All features are easily configured with the package manager, which also
-                       makes updates very easy.
-               </p>
-               <p>
-                       We believe that this is the best way to provide security to a network. There is no way to 
-                       distribute a static appliance because security menas different things to different people,
-                       and changes over time. Security is more of a process paired with behaviour and restrictions.
-                       IPFire has been designed to be flexible enough to fit into any existing security architecture.
-               </p>
-               <p>
-                       <em>Please click through the links in the sidebar and take a look at
-                       the possibilities IPFire offers for your personal concept of network.</em>
-                       If you're still deciding what that concept is, don't worry. IPFire comes with intelligent
-                       defaults for settings whereever possible.
-               </p>
-       {% end %}
-
-       <div class="line"></div>
-
-       <div class="screenshots">
-               <a rel="screens" href="{{ static_url("images/screenshots/en/concept/index-detail-1.png") }}"
-                       title="{{ _("A quick overview over all connections.") }}"><img alt="{{ _("Image 1") }}"
-                       src="{{ static_url("images/screenshots/en/concept/index-detail-1_thumb.png") }}" />
-               </a>
-               <a rel="screens" href="{{ static_url("images/screenshots/en/concept/traffic-graph-1.png") }}"
-                       title="{{ _("IPFire comes with lots of monitoring like traffic graphs.") }}"><img
-                       alt="{{ _("Image 2") }}" src="{{ static_url("images/screenshots/en/concept/traffic-graph-1_thumb.png") }}" />
-               </a>
-       </div>
-{% end block %}
index fb59a579f212690bc056f4585f938657a9c39a6e..c4328c27b4aeaa4448dd6933d6c29dd5d31a1229 100644 (file)
@@ -2,99 +2,64 @@
                
 {% block title %}{{ _("Artwork") }}{% end block %}
  
-{% block content %}
-       <div class="post">
-               <h3>{{ _("Artwork") }}</h3>
-               <img src="{{ static_url("images/page_icons/artwork.png") }}") }}" class="floatTR" border="0" alt="{{ _("Artwork") }}" />
-               <p>
-                       {% if lang == "de" %}
-                       Hier finden Sie Logos und Printvorlagen des IPFire Projektes.
-                       {% else %}
-                       Here you will find logos and print templates of the IPFire project.                     
-                       {% end %}
-               </p>
-               
-               {% if lang == "de" %}
-                       <p>
-                               Alle Rechte an künstlerischen Werken bzw. deren Inhalte, die nicht explizit anders gekennzeichnet sind, 
-                               gehören dem IPFire-Projekt und sind folglich urheberrechtlich geschützt und dürfen nur mit ausdrücklicher Genehmigung verwendet werden.
-                               <br />
-                               Für Presse und Berichterstattungen rund um das IPFire-Projekt sind die Inhalte dieser Seite auch ohne Genehmigung verwendbar.
-                       </p>
-               {% else %}
-                       <p>
-                               All rights of artistic works and their content, which are not explicitly labled belong to the IPFire project 
-                               and are protected by copyright and may not be used without explicit authorization.
-                               <br />
-                               For press releases around the IPFire project the contents of this page is usable without any permission.
-                       </p>                            
-               {% end %}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Artwork") }}</h1>
        </div>
-       <br class="clear" />
 
-       <div class="post">
-               <a name="{{ _("online") }}"></a><h3>{{ _("<strong>Online</strong> media") }}</h3>
-                       <p>
-                               <div class="pr_li">
-                                                <img src="{{ static_url("images/tux/ipfire_tux_16x16.png") }}" align="bottom" border= "0"/>
-                                                <img src="{{ static_url("images/tux/ipfire_tux_32x32.png") }}" align="bottom" border= "0"/>
-                                                <img src="{{ static_url("images/tux/ipfire_tux_64x64.png") }}" align="bottom" border= "0"/>
-                                                <img src="{{ static_url("images/tux/ipfire_tux_128x128.png") }}" align="bottom" border= "0"/>
-                                                <img src="{{ static_url("images/tux/ipfire_tux_256x256.png") }}" align="bottom" border= "0"/>
+       {% if lang == "de" %}
+               <p>
+                       Auf dieser Seite befinden sich Logos und Printvorlagen.
+               </p>
+               <p>
+                       Alle Rechte an künstlerischen Werken bzw. deren Inhalte, die nicht
+                       explizit anders gekennzeichnet sind, gehören dem IPFire-Projekt
+                       und sind folglich urheberrechtlich geschützt und dürfen nur mit
+                       ausdrücklicher Genehmigung verwendet werden.
+               </p>
+       {% else %}
+               <p>
+                       On this page, you will find a logos and templates for printing.
+               </p>
+               <p>
+                       All rights of artistic works and their content, which are not
+                       explicitly labled belong to the IPFire project and are protected
+                       by copyright and may not be used without explicit authorization.
+               </p>
+       {% end %}
 
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_16x16.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (16 x 16)</a>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_32x32.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (32 x 32)</a>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_64x64.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (64 x 64)</a>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_128x128.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (128 x 128)</a>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_256x256.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (256 x 256)</a>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_512x512.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (512 x 512)</a>
-                               </div>
-                       </p>
-                       <p>
-                               {% if lang == "de" %}
-                                       Der Tux ist unter der GNU General Public License lizensiert.
-                               {% else %}
-                                       The tux images is licensed under the GNU General Public License.
-                               {% end %}
-                       </p>
-       </div>
-       
-       <div class=post>
-               <a name="{{ _("print") }}"></a><h3>{{ _("<strong>Print</strong> media") }}</h3>
-                       <p>
-                               <div class="pr_li">
-                                                <br /><a href="{{ static_url("images/artwork/cd_label.pdf") }}") }}" target="_blank" border="0">
-                                                <img src="{{ static_url("images/artwork/cd_label_tn.png") }}" align="bottom" border= "0"/></a>
-                                                &nbsp;&nbsp;&nbsp;
-                                                <a href="{{ static_url("images/artwork/cd_schuber.pdf") }}") }}" target="_blank" border="0">
-                                                <img src="{{ static_url("images/artwork/cd_schuber_tn.png") }}" align="bottom" border= "0"/></a>
-                                                <br />
-                                                <a href="{{ static_url("images/artwork/rollup.pdf") }}") }}" target="_blank" border="0">
-                                                <img src="{{ static_url("images/artwork/rollup_tn.png") }}" align="bottom" border= "0"/></a>
-                                                &nbsp;&nbsp;&nbsp;
-                                                <a href="{{ static_url("images/artwork/flyer.pdf") }}") }}" target="_blank" border="0">
-                                                <img src="{{ static_url("images/artwork/flyer_tn.png") }}" align="bottom" border= "0"/></a>
-                               </div>
-                       </p>
-                       
-                       <p>
-                               Designed by <a href="http://www.elricco.com" target="_blank" border="0">elricco media services</a>.
-                       </p>
-       </div>
-{% end block %}
+       <h2>{{ _("The IPFire Logo") }}</h2>
+       <ul class="thumbnails">
+               {% for i in ("512x512", "256x256", "128x128", "64x64", "32x32") %}
+                       <li class="span4">
+                               <a class="thumbnail" href="{{ static_url("images/tux/ipfire_tux_%s.png" % i) }}">
+                                       <img src="{{ static_url("images/tux/ipfire_tux_%s.png" % i) }}" alt="{{ _("Logo") }}">
+                               </a>
+                       </li>
+               {% end %}
+       </ul>
+       <hr>
 
-{{ modules.SidebarBanner() }}
+       <h2>{{ _("Flyers, Rollups, CDs and more") }}</h2>
+       {% if lang == "de" %}
+               <p>
+                       Diese Arbeiten wurden erstellt von
+                       <a href="http://www.elricco.com">elricco media services</a>.
+               </p>
+       {% else %}
+               <p>
+                       These artworks have been designed by
+                       <a href="http://www.elricco.com">elricco media services</a>.
+               </p>
+       {% end %}
 
-{% block sidebar %}
-               <h4><span>Artwork</span> list</h4>
-               <ul class="links">              
-                       <li class="first"><a href="#{{ _("online") }}">{{ _("Online media") }}</a></li>
-                               <li><a href="#{{ _("print") }}">{{ _("Print media") }}</a></li>
-               </ul>
+       <ul class="thumbnails">
+               {% for i in ("rollup", "flyer", "cd_schuber", "cd_label") %}
+                       <li class="span6">
+                               <a class="thumbnail" href="{{ static_url("images/artwork/%s.pdf" % i) }}">
+                                       <img src="{{ static_url("images/artwork/%s_tn.png" % i) }}" alt="{{ _("Artwork") }}">
+                               </a>
+                       </li>
+               {% end %}
+       </ul>
 {% end block %}
index 837c47055008c3de9f4827509fbaab6796cd540c..64900ce23ed84ecc55a04bdd0d82fd16ccce2ce5 100644 (file)
-{% extends "../base-2.html" %}
+{% extends "../base-1.html" %}
                
-{% block title %}CeBIT-Special{% end block %}
+{% block title %}{{ _("CeBIT special") }}{% end block %}
 
-{% block content %}
-
-       <div class=post>                
-       {% if lang == "de" %}
-               <a name="IPFire auf der CeBIT 2010"></a><h3>IPFire auf der CeBIT 2010</h3>
-               <img src="{{ static_url("images/cebit-177px_schatten.png") }}" class="floatTR" border="0" alt="CeBIT" />
-               <p>
-                       Unser Dank gebührt allen <strong>Spendern</strong> ohne deren Mithilfe ein Stand auf der CeBit nicht möglich gewesen wäre!
-               </p>
-               <br />
-               <p>
-                       Vom <em>2. bis 6. März 2010</em> fand die <strong>CeBIT</strong> in Hannover statt.
-                       Das Besondere dieses Jahr war: <strong>IPFire</strong> mit einem
-                       kleinen Stand in der <strong>Open Source Project Lounge</strong> auf der Messe vertreten.
-               </p>
-               <br />
-       {% else %}
-               <a name="IPFire on CeBIT 2010"></a><h3>IPFire on CeBIT 2010</h3>
-               <img src="{{ static_url("images/cebit-177px_schatten.png") }}"class="floatTR" alt="CeBIT" />
-               <p>
-               Our thanks due to all <strong>donors</strong> without thier help a booth at the CeBit would not have been possible!
-               </p>
-               <br />
-               <p>
-                       <strong>CeBIT</strong> 2010 was from march 2nd and lasting until
-                       march 6th in Hannover, Germany. The special this year was that 
-                       <strong>IPFire</strong> had his own booth in
-                       the <strong>Open Source Project Lounge</strong>.
-               </p>            
-               <br />
-       {% end %}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("IPFire at CeBIT 2010") }}</h1>
        </div>
 
+       <img class="pull-right" src="{{ static_url("images/cebit-177px_schatten.png") }}" alt="CeBIT">
 
-       <div class=post>
        {% if lang == "de" %}
-               <a name="Impressionen"></a><h3>Impressionen</h3>
-       {% else %}
-               <a name="Impressions"></a><h3>Impressions</h3>
-       {% end %}
                <p>
-               <div id="cebit_pics">
-                       <a href="{{ static_url("images/cebit/cebit_2010_1.jpg") }}" title="{{ _("Cebit") }}"><img src="{{ static_url("images/cebit/cebit_2010_1_tn.jpg") }}" border="0" alt="{{ _("Cebit") }}" /></a>
-                       &nbsp;
-                       <a href="{{ static_url("images/cebit/cebit_2010_2.jpg") }}" title="{{ _("Cebit") }}"><img src="{{ static_url("images/cebit/cebit_2010_2_tn.jpg") }}" border="0" alt="{{ _("Cebit") }}" /></a><br />
-                       <a href="{{ static_url("images/cebit/cebit_2010_3.jpg") }}" title="{{ _("Cebit") }}"><img src="{{ static_url("images/cebit/cebit_2010_3_tn.jpg") }}" border="0" alt="{{ _("Cebit") }}" /></a>
-                       &nbsp;
-                       <a href="{{ static_url("images/cebit/cebit_2010_4.jpg") }}" title="{{ _("Cebit") }}"><img src="{{ static_url("images/cebit/cebit_2010_4_tn.jpg") }}" border="0" alt="{{ _("Cebit") }}" /></a>
-               </div>
+                       Vom 2. bis 6. März 2010 fand die <strong>CeBIT</strong> in Hannover statt.
+                       Das IPFire-Projekt war in diesem Jahr mit einem Stand in der
+                       <em>Open Source Project Lounge</em> vertreten.
                </p>
                <p>
-                       <object width="560" height="340"><param name="movie" value="http://www.youtube-nocookie.com/v/9zUcQouQ1sE&hl=de_DE&fs=1&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/9zUcQouQ1sE&hl=de_DE&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>
-                       <br />Quelle: <a href="http://eine-minute.blogspot.com/2010/03/ipfire-eine-utm-auf-opensource-basis.html" target="_blank">der "eine-minute" Blog</a>            </p>
-
-       </div>
-       
-       
-       <div class=post>
-       {% if lang == "de" %}
-               <a name="Sponsoren"></a><h3>Sponsoren</h3>
-               <p>
-                       Wir danken der
-                       <a href="http://www.linuxnewmedia.de/Produkte/Events" target="_blank">Linux New Media AG</a>
-                       und der <a href="http://www.cebit.de/opensource_d" target="_blank">Messegesellschaft</a>,
-                       welche für ausgewählte OpenSource-Projekte einige kostenlose Stände zur Verfügung gestellt haben.
-                       Die <strong>CeBIT</strong> die weltgrößte Computer- und Telekommunikationsmesse,
-                       und diese Präsentationsmöglichkeit war natürlich eine riesige Chance, das Projekt bekannter
-                       zu machen, mehr Nutzer und Entwickler zu erreichen, bzw. Kontakte zu knüpfen und Allianzen
-                       zu schmieden. 
+                       Unser Danke gebührt allen Spendern, die uns bei diesem Stand durch
+                       ihre Mithilfe unter die Arme gegriffen haben.
+                       Wir danken der <a href="http://www.linuxnewmedia.de/Produkte/Events">Linux New Media AG</a>
+                       und der <a href="http://www.cebit.de/opensource_d">Messegesellschaft</a>,
+                       welche für ausgewählte Open Source-Projekte kostenlose Stände zur
+                       Verfügung gestellt haben.
+                       Die <strong>CeBIT</strong>, die weltgrößte Computer- und Telekommunikationsmesse,
+                       war eine große Chance, das Projekt bekannter zu machen und neue Kontakte zu knüpfen.
                </p>
        {% else %}
-               <a name="Sponsors"></a><h3>Sponsors</h3>
                <p>
+                       From 2nd to 6th March 2010, the IPFire project attended CeBIT in
+                       Hanover, Germany with its own booth which was to be found
+                       in the <em>Open Source Project Lounge</em>.
+               </p>
+               <p>
+                       We would like to thank all the people who contributed to the booth
+                       and made it happening.
                        Our very special thanks go out to
-                       <a href="http://www.linuxnewmedia.de/Produkte/Events" target="_blank">Linux New Media AG</a> and
-                       <a href="http://www.cebit.de/opensource_d" target="_blank">Messegesellschaft</a>,
-                       who offered free booths to selected Open Source
-                       projects. <strong>CeBIT</strong> (a German acronym for the Center for Office and
-                       Information Technology) is the biggest computer and telecommunications
-                       exhibition in the world. This was an excellent chance for IPFire to gain
-                       recognition, get in touch with users and developers, and possibly find
-                       sponsors and forge alliances. 
+                       <a href="http://www.linuxnewmedia.de/Produkte/Events">Linux New Media AG</a> and
+                       <a href="http://www.cebit.de/opensource_d">Messegesellschaft</a>,
+                       who offered free booths to selected Open Source projects.
+                       This was an excellent chance for IPFire to gain more
+                       recognition and to get in touch new people.
                </p>
        {% end %}
-       <a href="http://www.linuxnewmedia.de/" target="_blank" border"0"><img src="{{ static_url("images/linux_new_media_ag.jpg") }} alt="Linux New Media AG" /></a>
-       <a href="http://www.aktinet.de/" target="_blank" border="0"><img src="{{ static_url("images/aktinet_logo.jpg") }} alt="Aktinet IT-Services" /></a>
-       </div>
-{% end block %}
 
-{% block sidebar %}
-       <h4><span>Ce</span>BIT</h4>
-       {% if lang == "de" %}
-               <ul class="links">              
-                       <li class="first"><a href="#IPFire auf der CeBIT 2010">CeBIT 2010</a></li>
-                       <li><a href="#Impressionen">Impressionen</a></li>
-                       <li><a href="#Sponsoren">Sponsoren</a></li>
-                       <li><a href="http://forum.ipfire.org/index.php?topic=2076.0">CeBIT Blog</a></li>
-               </ul>
-       {% else %}
-               <ul class="links">              
-                       <li class="first"><a href="#IPFire on CeBIT 2010">CeBIT 2010</a></li>
-                       <li><a href="#Impressions">Impressions</a></li>
-                       <li><a href="#Sponsors">Sponsors</a></li>
-                       <li><a href="http://forum.ipfire.org/index.php?topic=2076.msg15947#msg15947">CeBIT Blog</a></li>                        
-               </ul>
-       {% end %}
+       <br style="clear: both;">
+       <hr>
 
-{{ modules.SidebarBanner() }}
+       <div class="row">
+               <div class="span8 offset2">
+                       <iframe width="640" height="360" src="http://www.youtube.com/embed/9zUcQouQ1sE?rel=0" frameborder="0" allowfullscreen></iframe>
+                       <a class="pull-right" href="http://eine-minute.blogspot.com/2010/03/ipfire-eine-utm-auf-opensource-basis.html">"eine-minute" Blog</a>
+               </div>
+       </div>
 
-{% end block %}
+       <hr>
 
-{% block javascript %}
-       <script type="text/javascript" src="{{ static_url("js/jquery.lightbox.min.js") }}"></script>
-       <script type="text/javascript">
-               $(function() {
-                       $("#cebit_pics a").lightBox();
-               });
-       </script>
+       <div class="row">
+               <div class="span8 offset2">
+                       <ul class="thumbnails">
+                               {% for i in range(1, 5) %}
+                                       <li class="span4">
+                                               <a class="thumbnail" href="{{ static_url("images/cebit/cebit_2010_%d.jpg" % i) }}">
+                                                       <img src="{{ static_url("images/cebit/cebit_2010_%d_tn.jpg" % i) }}" alt="{{ _("CeBIT") }}">
+                                               </a>
+                                       </li>
+                               {% end %}
+                       </ul>
+               </div>
+       </div>
 {% end block %}
diff --git a/www/templates/static/chat.html b/www/templates/static/chat.html
new file mode 100644 (file)
index 0000000..0afe8e4
--- /dev/null
@@ -0,0 +1,39 @@
+{% extends "../base-1.html" %}
+               
+{% block title %}{{ _("Chat") }}{% end block %}
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Chat") }}</h1>
+       </div>
+
+       {% if lang == "de" %}
+               <p>
+                       Wer Fragen rund um IPFire hat, findet in unserem IRC-Channel rund
+                       um die Uhr Ansprechpartner, die Hilfestellung zu allen möglichen
+                       Themen geben können.
+                       Dies ist gleichzeitig eine tolle Möglichkeit, neue Kontakte zu
+                       knüpfen oder sich einfach zu unterhalten.
+               </p>
+       {% else %}
+               <p>
+                       On the IPFire IRC channel, you will find people who can help you
+                       with your questions about IPFire.
+                       This is a good chance to meet people involved in the project
+                       or just have a chat.
+               </p>
+       {% end %}
+
+       <ul>
+               <li>
+                       <strong>{{ _("Server") }}</strong>: irc.freenode.net
+               </li>
+               <li>
+                       <strong>{{ _("Channel") }}</strong>: #ipfire
+               </li>
+       </ul>
+
+       <a class="btn" href="http://webchat.freenode.net/?channels=ipfire">
+               {{ _("Use the web client") }}
+       </a>
+{% end block %}
index f5dde17e5e3e82c1b279d0f0ce27339132236679..ebe9d3db150be9998ee41eb23e0f5659a8ab8889 100644 (file)
-{% extends "../base-2.html" %}
+{% extends "../base-1.html" %}
                
 {% block title %}{{ _("Development") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Development") }}</h3>
-       <img src="{{ static_url("images/icons/development.png") }}" class="floatTR" alt="{{ _("Development") }}" />
-       {% if lang == "de" %}
-               <p>
-                       Willkommen im Entwicklungsbereich des IPFire-Projekts.<br />
-                       Hier gibt es Zugriff auf alle Ressourcen für die Entwicklung.<br />
-               </p>
-       {% else %}
-               <p>
-                       Welcome to the development area of the IPFire project.
-               </p>
-               <p>
-                       This page is meant to give you a short overview about how the IPFire
-                       developers work and what tools they do use.
-               </p>
-               <p>
-                       Everybody who is willing to contribute anything to IPFire is very
-                       welcomed and we appreciate this help very much.
-               </p>
-       {% end %}
-               
-       <h4>{{ _("Planet") }}</h4>
-       {% if lang == "de" %}
+{% block body %}
+       <img src="{{ static_url("images/icons/development.png") }}" class="pull-right" alt="{{ _("Development") }}">
+       <div class="page-header">
+               <h1>{{ _("Development") }}</h1>
+       </div>
+
+       {% if lang == "de" %}   
                <p>
-                       <strong>NEU!</strong> Im IPFire-Projekt gibt es eine neue Funktion
-                       namens <em>the planet</em>. Dies ist eine Art Blog oder Nachrichten-Seite,
-                       die über kleinere Neuerungen informiert und über die die Entwickler
-                       mit der Community in Kontakt bleiben.
+                       Der Entwicklungsprozess der IPFire Distribution ist offen.
+                       Das bedeutet, dass Diskussionen öffentlich geführt werden,
+                       Entscheidungen transparent sein sollen und jeder eingeladen ist
+                       mitzumachen.
+                       Die Entwickler empfinden dieses Vorgehen als das Beste,
+                       um ein Softwareprojekt dieser Größe zu führen.
                </p>
        {% else %}
                <p>
-                       <strong>NEW!</strong> The IPFire project has a new feature on its website
-                       that we call <em>the planet</em>. This is meant to be some kind of blog
-                       or news site that published minor announcements and keeps community and
-                       developers in touch.
+                       The development process of IPFire is open. This means that we discuss things openly,
+                       make decisions transparently and that everyone is welcome to join.
+                       The developers believe that this is the best way to run a software project as big as the IPFire project is.
                </p>
        {% end %}
-       <p class="right">
-               <a href="http://planet.ipfire.org/" target="_blank">{{ _("Go to the planet") }}</a>
-       </p>
-       <br class="clear" />
 
-       <h4>{{ _("Source code") }}</h4>
+       <h2>{{ _("Development tools") }}</h2>
        {% if lang == "de" %}
                <p>
-                       Da IPFire freie Software ist, ist es erlaubt den Quelltext unter
-                       den Bedingungen der GNU General Public License (Version 3) herunterzuladen.
-               </p>
-               <p>
-                       <a href="http://www.git-scm.com/" target="_blank">Git</a> wird benutzt 
-                       um den Quellcode von IPFire zu verwalten. Das Repository kann
-                       <a href="http://git.ipfire.org/" target="_blank">hier</a> durchsucht werden.
-                       Um mehr über Git und seine Anwendung zu erfahren empfehlen wir die Git-Homepage
-                       und eine Anleitung in unserem
-                       <a href="http://wiki.ipfire.org/en/development/git" target="_blank">Wiki</a>.
+                       Dies sind die Werkzeuge, welche die IPFire Entwickler nutzen
+                       um Diskussionen zu führen:
                </p>
        {% else %}
                <p>
-                       As IPFire is free software, you are allowed to download the source code under
-                       the terms of the GNU General Public License in version 3.
-               </p>
-               <p>
-                       <a href="http://www.git-scm.com/" target="_blank">Git</a> is used to manage the IPFire
-                       source code which can be browsed <a href="http://git.ipfire.org/" target="_blank">here</a>.
-                       To learn more about Git and how to use it please visit the Git homepage or a guide in
-                       out own <a href="http://wiki.ipfire.org/en/development/git" target="_blank">wiki</a>.
+                       The tools the IPFire team uses to create software, make discussions are
+                       the bugtracker, the mailing list and IRC channel:
                </p>
        {% end %}
 
-       <br class="clear" />
+       <div class="row">
+               <div class="span6">
+                       <h3>
+                               <a href="http://bugtracker.ipfire.org/">{{ _("Bugtracker") }}</a>
+                       </h3>
+                       {% if lang == "de" %}
+                               <p>
+                                       Der Bugtracker ist ein Tool, welches helfen soll bei
+                                       der Fehlerbehebung nicht den Pfaden zu verlieren.
+                                       Jeder Schritt, der unternommen wird, kann hier nachverfolgt
+                                       werden.
+                               </p>
+                       {% else %}
+                               <p>
+                                       The bug tracker is a tool which helps to keep track of issues that
+                                       are currently going on in the development process.
+                                       You can find the history of a bug and what has been done to fix it,
+                                       as well as the integration process of new features.
+                               </p>
+                       {% end %}
+               </div>
 
-       <h4>{{ _("Important howtos") }}</h4>
-       {% if lang == "de" %}
-               <p>
-                       Dies ist eine kurze Auswahl an Anleitungen, die für einen guten
-                       Start mit IPFire von Bedeutung sind.
-               </p>
-               <p>
-                       Diese Liste ist nicht als vollständig zu erachten. Weitere Informationen
-                       finden sich im Wiki.
-               </p>
-       {% else %}
-               <p>
-                       This is a short collection of howtos that are available in the wiki
-                       and a good start developing IPFire.
-               </p>
-               <p>
-                       Do not percieve this list complete and check out the wiki, too.
-               </p>
-       {% end %}
-       <ul class="list">
-               <li>
-                       <a href="http://wiki.ipfire.org/{{ lang }}/development/build" target="_blank">{{ _("Building IPFire") }}</a>
-               </li>
-               <li>
-                       <a href="http://wiki.ipfire.org/{{ lang }}/development/addon" target="_blank">{{ _("Building a new addon") }}</a>
-               </li>
-               <li>
-                       <a href="http://wiki.ipfire.org/{{ lang }}/development/language" target="_blank">{{ _("Creating a language file") }}</a>
-               </li>
-       </ul>
-       <br class="clear" />
+               <div class="span6">
+                       <h3>
+                               <a href="http://lists.ipfire.org/mailman/listinfo/development">{{ _("Development Mailing List") }}</a>
+                       </h3>
+                       {% if lang == "de" %}
+                               <p>
+                                       Diskussionen rund um den Entwicklungsprozess werden
+                                       auf der IPFire Entwicklungsmailingliste geführt.
+                               </p>
+                       {% else %}
+                               <p>
+                                       The place for discussions around the development of IPFire
+                                       is the IPFire development mailing list.
+                                       Everyone is welcome to subscribe and take part in the conversation.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
+       <br>
 
-       <h4>{{ _("Bugtracker") }}</h4>
-       {% if lang == "de" %}
-               <p>
-                       Der Bugtracker sammelt Informationen über Fehler in der Distribution.
-                       Mit seiner Hilfe erhalten sich die Entwickler einen Überblick darüber.
-               </p>
-               <p>
-                       Wenn Sie sicher sind (und nur dann), können Sie einen Report eröffnen,
-                       was zur Qualität von IPFire beiträgt.
-               </p>
-               <p>
-                       Aus historischen Gründen gibt es zwei Bugtracking-Systeme. Für die
-                       Serie IPFire 2.x wurde <a href="http://www.mantisbt.org/" target="_blank">Mantis</a>
-                       genutzt. Ab IPFire 3.x wurde es durch <a href="http://www.redmine.org" target="_blank">Redmine</a>
-                       ersetzt.
-               </p>
-       {% else %}
-               <p>
-                       The bugtracker manages all current issues of the distribution and also helps the
-                       developers to keep an overview about what is to do.
-               </p>
-               <p>
-                       If you are sure (and only if) you found a bug in the IPFire system, you may file
-                       a report. This is a way to improve the quality of IPFire.
-               </p>
-               <p>
-                       For historical reasons there are two bug tracking systems available. We use
-                       <a href="http://www.mantisbt.org/" target="_blank">mantis</a> for IPFire 2.x
-                       and earlier versions which is replaced in the development of version 3.x by
-                       <a href="http://www.redmine.org" target="_blank">redmine</a>.
-               </p>
-       {% end %}
-       <ul class="list">
-               <li><a href="http://mantis.ipfire.org/" target="_blank">{{ _("Development for IPFire 2.x") }}</a></li>
-               <li><a href="http://redmine.ipfire.org/" taregt="_blank">{{ _("Development for IPFire 3.x") }}</a></li>
-       </ul>
-{% end block %}
+       <h2>{{ _("Source code") }}</h2>
+       <div class="row">
+               <div class="span6">
+                       {% if lang == "de" %}
+                               <p>
+                                       Die IPFire Entwickler nutzen <a href="http://www.git-scm.com/">Git</a>
+                                       für die Quellcodeverwaltung.
+                                       Jeder darf den Code unter den Bedingungen der beigelegten
+                                       Lizenzen herunterladen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       The IPFire developers use <a href="http://www.git-scm.com/">Git</a>
+                                       for source code management.
+                                       Anyone may download the source code under terms of the accompanying, provided licenses.
+                               </p>
+                       {% end %}
+                       <p>
+                               <a href="http://git.ipfire.org/">{{ _("IPFire Git repositories") }}</a>
+                       </p>
+               </div>
+
+               <div class="span6">
+                       <h3>{{ _("Important repositories") }}</h3>
+                       <table class="table">
+                               <tbody>
+                                       <tr>
+                                               <td>
+                                                       <a href="http://git.ipfire.org/?p=ipfire-2.x.git;a=summary">
+                                                               IPFire 2.x
+                                                       </a>
+                                               </td>
+                                               <td>
+                                                       {% if lang == "de" %}
+                                                               Quellcode der IPFire 2 Serie
+                                                       {% else %}
+                                                               Source of the IPFire 2 series
+                                                       {% end %}
+                                               </td>
+                                       </tr>
+                                       <tr>
+                                               <td>
+                                                       <a href="http://git.ipfire.org/?p=ipfire-3.x.git;a=summary">
+                                                               IPFire 3.x
+                                                       </a>
+                                               </td>
+                                               <td>
+                                                       {% if lang == "de" %}
+                                                               Quellcode der IPFire 3 Serie
+                                                       {% else %}
+                                                               Source of the IPFire 3 series
+                                                       {% end %}
+                                               </td>
+                                       </tr>
+                               </tbody>
+                       </table>
+               </div>
+       </div>
+
+       <div class="row">
+               <div class="span4">
+                               <h3>{{ _("How to build IPFire?") }}</h3>
+                               {% if lang == "de" %}
+                                       <p>
+                                               IPFire zu kompilieren ist ganz einfach, aber dauert seine
+                                               Zeit.
+                                       </p>
+                                       <p>
+                                               Einen Einblick dazu gibt es in der
+                                               <a href="http://wiki.ipfire.org/{{ lang }}/development/build">Bauanleitung</a>
+                                               im Wiki, welche Schritt für Schritt vorgeht.
+                                       </p>
+                                       <p>
+                                               Addonentwicklung ist erwünscht. Die Vorgehensweise
+                                               dafür findet sich in der entsprechenden
+                                               <a href="http://wiki.ipfire.org/{{ lang }}/development/addon#building_addon_-_howto">Anleitung</a>.
+                                       </p>
+                               {% else %}
+                                       <p>
+                                               Building IPFire is actually very easy, but it does take some time.
+                                       </p>
+                                       <p>
+                                               Have a look at the
+                                               <a href="http://wiki.ipfire.org/{{ lang }}/development/build">guide on our wiki</a>
+                                               and work through it at your own pace, step by step.
+                                       </p>
+                                       <p>
+                                               Add-on development is encouraged. Have a look at the
+                                               <a href="http://wiki.ipfire.org/{{ lang }}/development/addon#building_addon_-_howto">building an add-on guide on our wiki</a>
+                                               for more information.
+                                       </p>
+                               {% end %}
+               </div>
+
+               <div class="span4">
+                       <h3>{{ _("How to submit patches?") }}</h3>
+                       {% if lang == "de" %}
+                               <p>
+                                       Die IPFire Entwickler freuen sich jeden Beitrag zur Software.
+                                       Patches, welche Fehler beheben, Verbesserungen implementieren
+                                       oder neue Funktionen hinzufügen sind willkommen.
+                               </p>
+                               <p>
+                                       Um den Integrationsprozess in die Distribution verfolgen
+                                       zu können, bitten wir einen <a href="http://bugtracker.ipfire.org/">Bugreport</a>
+                                       zu eröffnen, an welchen der Patch angehangen ist, sowie alle
+                                       anderen benötigten Daten.
+                               </p>
+                       {% else %}
+                               <p>
+                                       The IPFire developers appreciate any and all contributions to the software.
+                                       Patches that fix bugs, add enhancements, or create new features are welcome.
+                               </p>
+                               <p>
+                                       To track the integration into the distribution properly,
+                                       we request that you create a new bug report in the
+                                       <a href="http://bugtracker.ipfire.org/">bugtracker</a>
+                                       and attach the patch file, as well as everything else that is needed.
+                               </p>
+                       {% end %}
+               </div>
 
+               <div class="span4">
+                       <h3>{{ _("How to translate IPFire?") }}</h3>
+
+                       {% if lang == "de" %}
+                               <h4>IPFire 2.x</h4>
+                               <p>
+                                       Im der <a href="http://wiki.ipfire.org/{{ lang }}/development/language">Übersetzungsanleitung</a>
+                                       finden sich Informationen darüber, wie man das Webinterface von IPFire 2
+                                       übersetzt.
+                               </p>
+
+                               <h4>IPFire 3.x</h4>
+                               <p>
+                                       Auf <a href="http://www.transifex.net/projects/p/ipfire/">Transifex</a>
+                                       findet sich eine Reihe von Übersetzungsprojekten in Verbindung
+                                       mit IPFire 3.
+                               </p>
+
+                               <div class="alert alert-info">
+                                       Hilf dem <a href="http://wiki.ipfire.org/projects/translation/start">IPFire Übersetzungsteam</a>!
+                               </div>
+                       {% else %}
+                               <h4>IPFire 2.x</h4>
+                               <p>
+                                       Please read the <a href="http://wiki.ipfire.org/en/development/language">translation guide</a>
+                                       to learn how to translate the web interface of IPFire 2.
+                               </p>
+
+                               <h4>IPFire 3.x</h4>
+                               <p>
+                                       Head over to <a href="http://www.transifex.net/projects/p/ipfire/">Transifex</a>
+                                       to see a list of our translation projects and feel free to join.
+                               </p>
+
+                               <div class="alert alert-info">
+                                       Join the <a href="http://wiki.ipfire.org/projects/translation/start">IPFire translation team</a>!
+                               </div>
+                       {% end %}
+               </div>
+       </div>
+{% end block %}
index 831ec50b46f04bc3d247d86221ac20682c722e39..be26f9da897f154f2641bc2e78f8984a6a897063 100644 (file)
                
 {% block title %}{{ _("Donation") }}{% end block %}
  
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Please consider donating!") }}</h1>
+       </div>
 
-{% block content %}
-       
-       <div class=post>
-               <h3>{{ _("Donation") }}</h3>
-               <img src="{{ static_url("images/page_icons/donation.png") }}") }}" class="floatTR" border="0" alt="{{ _("Donation") }}" />
-               <p>
+       <div class="row">
+               <div class="span7 offset1">
                        {% if lang == "de" %}
-                       Dieses Projekt wird von Freiwilligen in ihrer Freizeit betrieben und betreut.<br />
-                       Mit jeder Spende und sei sie noch so klein unterstützen Sie IPFire und sichern damit den Fortbestand dieses Projektes. 
-               </p>
-               <br />
-               <p>
-               <div align="center">
-                       <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
-                               <input type="hidden" name="cmd" value="_s-xclick">
-                               <input type="hidden" name="hosted_button_id" value="10781833">
-                               <input type="image" src="https://www.paypal.com/de_DE/DE/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
-                               <img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1">
-                       </form>
-               </div>
-               </p>
-               <br />
-               <p>
-                       Wegen des einfachen Ablaufs der Spende bevorzugen wir <strong>PayPal</strong>.<br />
-                       Es ist auch möglich ohne Anmeldung per Kreditkarte zu spenden.
-               </p>
-                       
-                       
+                               <p>
+                                       IPFire ist kostenlos und das Projekt hat keine direkten
+                                       Einnahmen. Stattdessen wird es vollständig durch Spenden
+                                       seiner Benutzer finanziert, welche die Ambition haben
+                                       ein Produkt zu entwickeln, welches mit denjenigen,
+                                       die von großen Unternehmen unterstützt werden,
+                                       konkurrieren kann.
+                               </p>
+                               <p>
+                                       Finanzielle Mittel sind essenziell um Sever und Equipment
+                                       zu bezahlen, Notwendigkeiten der Distribution zu finanzieren
+                                       und die Arbeit der Leute hinter dem Projekt zu fördern.
+                               </p>
+                               <p>
+                                       Wir ermutigen jeden, der IPFire herunterlädt und nutzt
+                                       einen Beitrag zu leisten:
+                                       <strong>
+                                               Wir bitten um eine Spende und bedanken uns im Voraus
+                                               sehr dafür.
+                                       </strong>
+                               </p>
                        {% else %}
-               <p>
-                       This project is driven and maintained by volunteers in their free time.<br />
-                       With each donation, and even with small ones you will support IPFire and ensure the continuation of this project.
-               </p>
-               <br />
-               <p>
-               <div align="center">
-                       <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
-                               <input type="hidden" name="cmd" value="_s-xclick">
-                               <input type="hidden" name="hosted_button_id" value="10781833">
-                               <input type="image" src="https://www.paypal.com/en_US/DE/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
-                               <img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1">
-                       </form>
+                               <p>
+                                       IPFire is free of cost and does not generate any direct sort
+                                       of income. It is funded by donations and although it is
+                                       financially supported by its own community of users, its
+                                       ambition is to compete with projects which are backed by large
+                                       companies.
+                               </p>
+                               <p>
+                                       Financial ressources are essential for the IPFire project to pay
+                                       for servers and equipment, finance the needs of the distribution
+                                       and fund the work of the people behind it.
+                               </p>
+                               <p>
+                                       We encourage anyone who downloads and uses IPFire to contribute
+                                       to the distribution:
+                                       <strong>
+                                               Please donate and encourage others to do so     as well.
+                                               It is very much appreciated.
+                                       </strong>
+                               </p>
+                       {% end %}
                </div>
-               </p>
-               <br />
-               <p>
-                       Our favorite way for a donation is <strong>PayPal</strong> because it is fast and easy.<br />
-                       It is also possible to donate by credit card without registration.
-               </p>    
+
+               <div class="span3">
+                       <br><br><br><br>
+                       {% if lang == "de" %}
+                               <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+                                       <input type="hidden" name="cmd" value="_s-xclick">
+                                       <input type="hidden" name="hosted_button_id" value="Z44GQ52ZHKVFW">
+                                       <input type="image" src="https://www.paypalobjects.com/de_DE/DE/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="Jetzt einfach, schnell und sicher online bezahlen – mit PayPal.">
+                                       <img alt="" border="0" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" width="1" height="1">
+                               </form>
+                       {% else %}
+                               <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+                                       <input type="hidden" name="cmd" value="_s-xclick">
+                                       <input type="hidden" name="hosted_button_id" value="HHBTSN9QRWPAY">
+                                       <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+                                       <img alt="" border="0" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" width="1" height="1">
+                               </form>
                        {% end %}
-               </p>
+               </div>
        </div>
-       <br class="clear" />
 
-       {% end block %}
+       <hr>
 
-{% block sidebar %}
+       <div class="row">
+               <div class="span10 offset1">
+                       {% if lang == "de" %}
+                               <p>
+                                       <em>
+                                               Falls du keinen PayPal-Account hast oder haben
+                                               möchtest, so kann auch mit Kreditkarte gespendet
+                                               werden. Dafür einfach auf den Button klicken.
+                                       </em>
+                               </p>
+                       {% else %}
+                               <p>
+                                       <em>
+                                               If don't have or want a PayPal account,
+                                               you can also donate with your credit card.
+                                               Just click on the button.
+                                       </em>
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index 63c7199180523d25e4d1c329052346555b8b81f5..d2a005061c73dab8af4e275afcefb16dea36bfc5 100644 (file)
-{% extends "../base-2.html" %}
-               
-{% block title %}{{ _("Features") }}{% end block %}
+{% extends "../base-feature.html" %}
 
-{% block content %}
-       
+{% block title %}{{ _("About IPFire") }}{% end block %}
 
-       <div class="post">
-               <h3>{{ _("Features") }}</h3>
-               <img src="{{ static_url("images/page_icons/features.png") }}" class="floatTR" alt="{{ _("Features") }}" />
-               <p>
-                       {% if lang == "de" %}
-                               Hier findet Ihr einen Überblick über alle derzeitig verfügbaren Funktionen
-                               in der IPFire Distribution.<br />
-                       {% else %}
-                               This is an overview of all currently available features in IPFire.
-                       {% end %}
-               </p>
-
-               <p>
-                       {% if lang == "de" %}
-                               Zudem können Addons über ein einfaches Paketmanagementsystem nachinstalliert
-                               werden und den Funktionsumfang erweitern.<br />
-                               Eine komplette Liste über alle Addons ist im Wiki zu finden:
-                               <a href="http://wiki.ipfire.org/de/addons/start" target="_blank">Addons</a>.
-                       {% else %}
-                               A easy packet management system is able to install additional features
-                               to the system.<br />
-                               A full list of addons can be found in the wiki:
-                               <a href="http://wiki.ipfire.org/en/addons/start" target="_blank">Addons</a>.
-                       {% end %}
-               </p>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("About IPFire") }}</h1>
        </div>
-       <br class="clear" />
-
-       <div class="post">
-               <a name="{{ _("firewall functions") }}"></a><h3>{{ _("firewall functions") }}</h3>
-               <p>
-                       {% if lang == "de" %}
-                               Die Firewallfunktionalität ist die Hauptaufgabe von IPFire. Die Distribution trennt
-                               das Netzwerk in verschiedene Bereiche auf und bietet jedem Teilbereich optimale Rechte
-                               aber auch Einschränkungen um maximale Sicherheit zu erzielen.
 
-                               <ul>
-                                       <li>Stateful-Inspection-Firewall basierend auf der Linux Netfilter-Architektur</li>
-                                       <li>Intrusion-Detection-System mit Guardian-Addon als Erweiterung zum IPS System</li>
-                                       <li>Filter für ungültige/nicht-standardgerechte Pakete</li>
-                                       <li>Eigene Netzwerksegmente für Server (DMZ) und Wireless-LAN mit angepassten Policies</li>
-                                       <li>DoS-Attacken-Schutz</li>
-                                       <li>Application-Proxies für HTTP und FTP (mit Zugangskontrolle und Content-Filter)</li>
-                                       <li>Eingehende sowie ausgehende Paketfilterung mit einfacher Gruppenverwaltung</li>
-                                       <li>Quality-of-Service und Trafficshaping</li>
-                               </ul>
-                       {% else %}
-                               The main focus of the IPFire distribution is being a firewall. It splits the network
-                               into several parts and allows only operations that are allowed by policy.
-
-                               <ul>
-                                       <li>stateful inspection firewall based on linux netfilter architecture</li>
-                                       <li>intrusion detection system with Guardian addon as extension (IPS system)</li>
-                                       <li>filter for invalid/non-standard packages</li>
-                                       <li>separate network segments for server (DMZ) and wireless with custom policies</li>
-                                       <li>DoS attack protection</li>
-                                       <li>application proxies for HTTP and FTP (with access control and content filtering) and DNS</li>
-                                       <li>incoming and outgoing packet filtering with user grouping</li>
-                                       <li>Quality of Service and traffic shaping</li>
-                               </ul>
-                       {% end %}
-               </p>
+       <div class="row">
+               <div class="span5 offset2">
+                       <img src="{{ static_url("images/tux/ipfire_tux_512x512.png") }}" alt="IPFire Logo" />
+               </div>
        </div>
-       <br class="clear" />
 
-       <div class="post">
-               <a name="{{ _("essential networking services") }}"></a><h3>{{ _("essential networking services") }}</h3>
-               <p>
-                       {% if lang == "de" %}
-                               IPFire stellt auch unabdingbare Funktionen jedem Netzwerk bereit.
-                               <ul>
-                                       <li>DHCP-Server</li>
-                                       <li>Dynamischer DNS-Dienst</li>
-                                       <li>NTP-Server</li>
-                                       <li>DNS-Proxy</li>
-                               </ul>
-                       {% else %}
-                               IPFire covers essential functions that are needed on every network as well.     
-                               <ul>
-                                       <li>DHCP server</li> 
-                                       <li>Dynamic DNS service</li> 
-                                       <li>NTP server</li>
-                                       <li>DNS proxy</li>
-                               </ul>
-                       {% end %}                       
-               </p>
-       </div>
+       <hr>
 
-       <div class="post">
-               <a name="{{ _("http proxy") }}"></a><h3>{{ _("http proxy") }}</h3>
-               <p>
+       <div class="row">
+               <div class="span9">
                        {% if lang == "de" %}
-                               Ein Webproxy ermöglicht dem Administrator Kontrolle über Nutzeraktivitäten
-                               und das gezielte Sperren von Inhalten.
-
-                               <ul>
-                                       <li>Zwischenspeicherung von Web-Inhalten für schnelleren Seitenaufbau</li>
-                                       <li>Inhaltsfilter auf Basis von Blocklisten und manuell festlegbaren Listen z.B. für
-                                               die Sperrung von jugendgefährdenden Inhalten</li>
-                                       <li>Zeitgesteuerte Sperrung des Zugangs für einzelne Nutzer oder ganze Gruppen</li>
-                                       <li>Vereinfachte Verwaltung für Klassen oder Konferenzräume</li>
-                                       <li>Erweiterte Speicherung von Updates für Microsoft Windows, Symantec Antivirus, Adobe-Produkten, Avira Antivir und Avast Antivirus</li>
-                                       <li>Authentifizierung am LDAP-, identd-, Radius- oder Windows-Server oder einer lokalen Nutzerdatenbank</li>
-                                       <li>Transfer-Limitierung (Geschwindigkeit und/oder Volumen)</li>
-                               </ul>
+                               <p>
+                                       <strong>IPFire</strong> wurde mit Augenmerk auf Modularität und einem hohen
+                                       Level an Flexibilität entwickelt. Es ist kinderleicht verschiedene Konfigurationen
+                                       zu installieren, wie zum Beispiel eine Firewall, einen Proxy-Server oder ein
+                                       VPN-Gateway.
+                                       Das modulare Design stellt sicher, dass nur exakt die Module laufen, die auch
+                                       benötigt werden und nichts weiter.
+                                       Alles zusammen lässt sich duch einen Paketmanager einfach verwalten und
+                                       aktualisieren.
+                               </p>
+                               <p>
+                                       Das IPFire Entwicklerteam ist sich im Klaren, dass Sicherheit von Anwendungsfall
+                                       zu Anwendungsfall ganz verschieden aussehen kann und sich auch über die Zeit
+                                       verändert.
+                                       Für diesen Fall erlaubt die Modularität und Flexibilität eine einfache
+                                       Intergration in jede bestehende Sicherheitsarchitektur.
+                                       Nicht zu vergessen ist, dass Einfachheit in der Bedienung eine
+                                       Schlüsseleigenschaft ist.
+                                       Wenn all dies im Moment ein wenig viel klingt, so kommt IPFire mit
+                                       Standardeinstellungen, die einen sinnvollen Einsatz sofort nach der
+                                       Installation ermöglichen.
+                               </p>
+                               <p>
+                                       <em>
+                                               Die Links in der Sidebar zeigen, was mit IPFire alles möglich ist
+                                               und sind einen genaueren Blick wert.
+                                       </em>
+                               </p>
                        {% else %}
-                               The web proxy service allows to filter and log user activities and
-                               is able to block malicious content.
-
-                               <ul>
-                                       <li>caching of web content</li> 
-                                       <li>content filtering based on blocking lists and manually defined lists
-                                               for blocking malicious content</li> 
-                                       <li>time based disabling of access for individual users or entire groups</li> 
-                                       <li>simplified management for classes or conference rooms</li> 
-                                       <li>advanced storage of updates for Microsoft Windows, Symantec Antivirus, Adobe products, Avira Antivir and Avast Antivirus</li> 
-                                       <li>authentication to LDAP, identd, radius or Windows server or a local user database</li> 
-                                       <li>transfer limitation (speed and/or traffic volume)</li>
-                               </ul>
-                       {% end %}               
-               </p>
-       </div>
-
-       <div class="post">
-               <a name="{{ _("virtual private networking") }}"></a><h3>{{ _("virtual private networking") }}</h3>
-               <p>
-               {% if lang == "de" %}
-                       Virtuelle private Netzwerke (VPNs) sind nötig um mit einem entfernten
-                       Firmenstandort oder Parter sicher zu kommunizieren. Für maximale
-                       Interoperabilität bringt IPFire mehrere Lösung mit.
-
-                       <ul>
-                               <li>IPSec/Strongswan
-                                       <ul>
-                                               <li>Netz-zu-Netz- oder Netz-zu-Host-Verbindungen (Roadwarrior)</li>
-                                               <li>IKE - PreSharedKey oder</li>
-                                               <li>X.509-Zertifikate aus integrierter oder externer CA</li>
-                                               <li>Automatische Erkennung mit nötigem Wiederaufbau der
-                                                       Tunnel-Verbindung und Dead-Peer-Detection</li>
-                                               <li>NAT-Traversal-Unterstützung</li>
-                                               <li>Verschlüsselung durch AES, 3DES, Blowfish, Serpent oder Twofish</li>
-                                               <li>HMAC: SHA1, SHA256, SHA384, SHA512</li>
-                                               <li>Echtzeit-Kompression</li>
-                                       </ul>
-                               </li>
-                               <li>OpenVPN
-                                       <ul>
-                                               <li>Host-zu-Netz-Verbindungen (Roadwarrior)</li>
-                                               <li>SSL-basierte Verschlüsselung: AES, Blowfish, Twofish, 3DES, ...</li>
-                                               <li>Echtzeit-Kompression</li>
-                                               <li>Fertige Clientpakete damit eine Konfiguration am Client vereinfacht wird</li>
-                                               <li>Tunnel über multiples NAT</li>
-                                       </ul>
-                               </li>
-                               <li>PPTP-Passthrough</li>
-                       </ul>
-               {% else %}
-                       Virtual private networks (VPNs) are used to securely communicate with
-                       a customer or partner. For a maximum of interoperability, IPFire comes
-                       with multiple implementations.
-
-                       <ul>
-                               <li>IPSec/Strongswan
-                                       <ul>
-                                               <li>network-to-network or network-to-host (roadwarrior)</li>
-                                               <li>IKE - PreSharedKey or</li>
-                                               <li>X.509 certificates from an integrated or external CA</li>
-                                               <li>tunnel reconnection on disconnection and dead-peer-detection</li>
-                                               <li>NAT traversal</li>
-                                               <li>encryption with AES, 3DES, Blowfish, Serpent and Twofish</li>
-                                               <li>HMAC: SHA1, SHA256, SHA384, SHA512</li>
-                                               <li>real time compression</li>
-                                       </ul>
-                               </li>
-                               <li>OpenVPN
-                                       <ul>
-                                               <li>host-to-network (roadwarrior)</li> 
-                                               <li>SSL-based encryption: AES, Blowfish, Twofish, 3DES, ...</ li> 
-                                               <li>real time compression</li> 
-                                               <li>automatically generated packages for clients so that there configuration is more simplified</li> 
-                                               <li>tunnel across multiple NAT</li> 
-                                       </ul>
-                               </li>
-                               <li>PPTP passthrough</li>
-                       </ul>
-               {% end %}
-               </p>
-       </div>
-
-       <div class="post">
-               <a name="{{ _("supported connection types") }}"></a><h3>{{ _("supported connection types") }}</h3>
-               <p>
-               {% if lang == "de" %}
-                       IPFire ist über eine Vielzahl von Verbindungsmöglichkeiten an
-                       das Internet anzubinden.
-                       <ul>
-                               <li>Ethernet-Verbindungen mit statischer IP Adresse oder über
-                                       das DHCP-Protokoll konfiguriert</li>
-                               <li>ADSL/SDSL mit PPPoE</li>
-                               <li>DSL über PPTP</li>
-                               <li>VDSL der Deutschen Telekom mit Streaming-Angeboten (T-Home)</li>
-                               <li>UMTS</li>
-                               <li>Automatische Wiederverbindung nach Trennung durch den Provider</li>
-                               <li>Wiederverbindung nach Zeitplan steuerbar</li>
-                       </ul>
-               {% else %}
-                       IPFire is able to access the internet by lots of common
-                       connection types.
-       
-                       <ul>
-                               <li>ethernet links with static ip address or configured via DHCP
-                                       configured</li> 
-                               <li>ADSL/SDSL with PPPoE</li>
-                               <li>DSL via PPTP</li>
-                               <li>VDSL (a product of Deutsche Telekom)</li>
-                               <li>UMTS</li>
-                               <li>automatic reconnect after disconnection by the provider</li>
-                               <li>reconnect with time based schedule</li>
-                       </ul>
-               {% end %}
-       </div>
-
-       <div class="post">
-               <a name="{{ _("configuration") }}"></a><h3>{{ _("configuration") }}</h3>
-               <p>
-               {% if lang == "de" %}
-                       Alle Funktionen sind in einem Web-Interface bequem erreichbar.
-
-                       <ul>
-                               <li>SSL-verschlüsseltes Web-Administrations-Interface</li>
-                               <li>SSH-Zugang</li>
-                       </ul>
-               {% else %}
-                       All of the functionality provides by IPFire is configureable
-                       with a simple web management interface.
-
-                       <ul>
-                               <li>SSL-encrypted web interface</li>
-                               <li>SSH access</li>
-                       </ul>
-               {% end %}
-               </p>
-       </div>
-
-       <div class="post">
-               <a name="{{ _("monitoring") }}"></a><h3>{{ _("monitoring") }}</h3>
-               <p>
-               {% if lang == "de" %}
-                       Um dem Administrator die Auswerung der Geschehnisse möglichst zu vereinfachen
-                       werden Logs grafisch ausgewertet, sodass Fehler oder Probleme auf den
-                       ersten Blick erkannt werden können.
-
-                       <ul>
-                               <li>Grafische Überwachung des Systems im Webinterface</li>
-                               <li>Einsehbare Log-Dateien mit automatischer Zusammenfassung der wichtigsten Ereignisse</li>
-                               <li>Exportfunktion der Logdateien (einzeln oder als gesamtes Backup)</li>
-                       </ul>
-               {% else %}
-                       The webinterfaces gives easy access to graphical summaries of logs
-                       that let the administrator recognize any issue easily.
-                       <ul>
-                               <li>graphical monitoring of the system with the web interface</li> 
-                               <li>accessible log files with automatic summary of key events</li> 
-                               <li>export function of log files (individually or as a full backup)</li>
-                       </ul>
-               {% end %}
-               </p>
+                               <p>
+                                       <strong>IPFire</strong> was designed with both modularity and a high-level of
+                                       flexibility in mind. You can easily deploy many variations of it, such as a firewall,
+                                       a proxy server or a VPN gateway.
+                                       The modular design ensures that it runs exactly what you've configured it for and
+                                       nothing more. Everything is simple to manage and update through the package manager,
+                                       making maintenance a breeze.
+                               </p>
+                               <p>
+                                       The IPFire development team understands that security means different things to
+                                       different people and certainly can change over time.
+                                       The fact that IPFire is modular and flexible make it perfect for integrating
+                                       into any existing security architecture.
+                                       Don't forget that ease-of-use is a key principle.
+                                       If all this sounds a little too much for you, IPFire comes with great default
+                                       settings out-of-the-box, meaning it's a snap to get going quickly!
+                               </p>
+                               <p>
+                                       <em>
+                                               Above are some links that we encourage you to click through.
+                                               Please take a look at all of the features and possibilities
+                                               which IPFire offers for your network. 
+                                       </em>
+                               </p>
+                       {% end %}
+               </div>
        </div>
 {% end block %}
-
-
-{% block sidebar %}
-               <h4><span>Features</span> list</h4>
-        <ul class="links">              
-                         <li class="first"><a href="#{{ _("firewall functions") }}">{{ _("firewall functions") }}</a></li>
-                         <li><a href="#{{ _("essential networking services") }}">{{ _("essential networking services") }}</a></li>
-                         <li><a href="#{{ _("http proxy") }}">{{ _("http proxy") }}</a></li>
-                         <li><a href="#{{ _("virtual private networking") }}">{{ _("virtual private networking") }}</a></li>   
-                         <li><a href="#{{ _("supported connection types") }}">{{ _("supported connection types") }}</a></li>
-                         <li><a href="#{{ _("configuration") }}">{{ _("configuration") }}</a></li>
-                         <li><a href="#{{ _("monitoring") }}">{{ _("monitoring") }}</a></li>
-        </ul>
-
-{% end block %}
diff --git a/www/templates/static/features/dial-in.html b/www/templates/static/features/dial-in.html
deleted file mode 100644 (file)
index ad6088c..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-{% extends "../../base-feature.html" %}
-               
-{% block title %}{{ _("Dial-in") }}{% end block %}
-
-{% block content %}
-       <h3>{{ _("Dial-in") }}</h3>
-
-       <!-- XXX needs icons -->
-       <!-- XXX needs screenshots -->
-
-       {% if lang == "de" %}
-               <p>
-                       IPFire ist als Internet-Gateway in der Lage über verschiedene (Einwahl-)Techniken eine Verbindung zum
-                       Internet aufzubauen.
-               </p>
-               <p>
-                       Es werden alle gängigen Breitbandzugangsarten wie auch mobile Zugänge unterstützt:
-               </p>
-               <ul class="list">
-                       <li>
-                               <strong>VDSL:</strong> VDSL ist die Abkürzung für „Very High Data Rate Digital Subscriber Line“ und
-                               bietet in Deutschland derzeit Bandbreiten bis zu 50 MBit/s im Downstream und 10 MBit/s im Upstream.
-                               Damit eignet sich VDSL für die Zukunft und bringt auch IPTV mit sich. Mit IPFire kann der herkömmliche
-                               Router ausgetauscht werden und auf ein vollwertiges System gesetzt werden, das den IPTV-Stream ins
-                               eigene Netz bringt.
-                       </li>
-                       <li>
-                               <strong>ADSL/SDSL:</strong> Selbstverständlich wird auch herkömmliches DSL unterstützt, wobei es sich
-                               technisch um PPPoE oder PPPoA handelt. In einigen Ländern ist auch PPTP als Protokoll verbreitet und
-                               wird ebenso unterstützt.
-                       </li>
-                       <li>
-                               <strong>Ethernet:</strong> Über Ethernet kann IPFire ebenfalls mit dem Internet verbunden werden und
-                               eine IP-Adresse entweder per DHCP beziehen oder statisch konfiguriert werden. Das wird u.a. bei
-                               Verbindungen über Kabel genutzt.
-                       </li>
-                       <li>
-                               <strong>3. Generation:</strong> Über USB-Modems wird auch jede Art von mobilen Breitbandverbindungen
-                               unterstützt welche bekannt sind unter den Bezeichnungen UMTS, 3G, CDMA, HSDPA oder LTE.
-                       </li>
-               </ul>
-
-               <br class="clear" />
-
-               <!-- XXX table needs formatting -->
-               <table class="dial-in">
-                       <tr>
-                               <th>Verbindungsart</th>
-                               <th>geläufige Protokolle</th>
-                       </tr>
-                       <tr>
-                               <td>ADSL/SDSL</td>
-                               <td>PPPoE, PPPoA, PPTP (statisch oder per DHCP)</td>
-                       </tr>
-                       <tr>
-                               <td>VDSL</td>
-                               <td>PPPoE inkl. DHCP für IPTV mit Multicast-Routing/-Streaming</td>
-                       </tr>
-                       <tr>
-                               <td>Kabel</td>
-                               <td>Ethernet mit DHCP oder statischer Einstellung</td>
-                       </tr>
-                       <tr>
-                               <td>UMTS/HSDPA/3G/CDMA</td>
-                               <td>PPP</td>
-                       </tr>
-                       <tr>
-                               <td>Analoges Modem</td>
-                               <td>PPP</td>
-                       </tr>
-               </table>
-       {% else %}
-               <p>
-                       IPFire as an Internet-Gateway are able to dial-up through various techniques to connect to the Internet.
-               </p>
-               <p>
-                       It supports all popular types of broadband access as well as mobile access:
-               </p>
-               <ul class="list">
-                       <li>
-                               <strong>VDSL:</strong> VDSL is the shortcut for “Very High Data Rate Digital Subscriber Line” and
-                               it currently offers bandwidths in Germany up to 50 Mbit/s downstream and 10 Mbit/s upstream. Thus,
-                               VDSL brings therefor the possibility to use technologies like IPTV. With IPFire, a conventional
-                               router can be replaced by a full-fledged system that brings the IPTV stream into the own home net.
-                       </li>
-                       <li>
-                               <strong>ADSL/SDSL:</strong> Of course, conventional DSL is supported, although it is technically
-                               called also PPPoE or PPPoA. In some countries, the PPTP protocol is also widely used and it is also
-                               supported by IPFire.
-                       </li>
-                       <li>
-                               <strong>Ethernet:</strong> Over Ethernet IPFire can also be connected to the Internet and obtain
-                               an IP address either via DHCP or statically configured.
-                       </li>
-                       <li>
-                               <strong>3. Generation:</strong> Mobile broadband connections which are also known under the names
-                               UMTS, 3G, CDMA, HSDPA or LTE over USB modems are also supported by IPFire.
-                       </li>
-               </ul>
-
-               <br class="clear" />
-
-               <!-- XXX table needs formatting -->
-               <table class="dial-in">
-                       <tr>
-                               <th>Connection types</th>
-                               <th>common protocols</th>
-                       </tr>
-                       <tr>
-                               <td>ADSL/SDSL</td>
-                               <td>PPPoE, PPPoA, PPTP (static or over DHCP)</td>
-                       </tr>
-                       <tr>
-                               <td>VDSL</td>
-                               <td>PPPoE inkl. DHCP for IPTV with Multicast-Routing/-Streaming</td>
-                       </tr>
-                       <tr>
-                               <td>Cable</td>
-                               <td>Ethernet with DHCP or static preferences</td>
-                       </tr>
-                       <tr>
-                               <td>UMTS/HSDPA/3G/CDMA</td>
-                               <td>PPP</td>
-                       </tr>
-                       <tr>
-                               <td>Analog modem</td>
-                               <td>PPP</td>
-                       </tr>
-               </table>
-       {% end %}
-{% end block %}
diff --git a/www/templates/static/features/dialup.html b/www/templates/static/features/dialup.html
new file mode 100644 (file)
index 0000000..840cb08
--- /dev/null
@@ -0,0 +1,121 @@
+{% extends "../../base-feature.html" %}
+               
+{% block title %}{{ _("Dialup") }}{% end block %}
+
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("Dialup") }}</h1>
+       </div>
+
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       IPFire ist als Internet-Gateway in der Lage über verschiedene
+                                       (Einwahl-)Techniken eine Verbindung zum Internet aufzubauen.
+                               </p>
+                               <p>
+                                       Es werden alle gängigen Breitbandzugangsarten wie auch mobile Zugänge unterstützt:
+                               </p>
+
+                               <table class="table table-striped table-bordered">
+                                       <tbody>
+                                               <tr>
+                                                       <td>
+                                                               <strong>VDSL</strong>
+                                                       </td>
+                                                       <td>
+                                                               VDSL ist die Abkürzung für <em>Very High Data Rate Digital Subscriber Line</em> und
+                                                               bietet in Deutschland derzeit Bandbreiten bis zu 50 MBit/s im Downstream und 10 MBit/s im Upstream.
+                                                               Damit eignet sich VDSL für die Zukunft und bringt auch IPTV mit sich. Mit IPFire kann der herkömmliche
+                                                               Router ausgetauscht werden und auf ein vollwertiges System gesetzt werden, das den IPTV-Stream ins
+                                                               eigene Netz bringt.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td>
+                                                               <strong>ADSL/SDSL</strong>
+                                                       </td>
+                                                       <td>
+                                                               Selbstverständlich wird auch herkömmliches DSL unterstützt, wobei es sich
+                                                               technisch um PPPoE oder PPPoA handelt. In einigen Ländern ist auch PPTP als Protokoll verbreitet und
+                                                               wird ebenso unterstützt.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td>
+                                                               <strong>Ethernet</strong>
+                                                       </td>
+                                                       <td>
+                                                               Über Ethernet kann IPFire ebenfalls mit dem Internet verbunden werden und
+                                                               eine IP-Adresse entweder per DHCP beziehen oder statisch konfiguriert werden. Das wird u.a. bei
+                                                               Verbindungen über Kabel genutzt.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td>
+                                                               <strong>3. Generation</strong>
+                                                       </td>
+                                                       <td>
+                                                               Über USB-Modems wird auch jede Art von mobilen Breitbandverbindungen
+                                                               unterstützt, welche bekannt sind unter den Bezeichnungen UMTS, 3G, CDMA, HSDPA oder LTE.
+                                                       </td>
+                                               </tr>
+                                       </tbody>
+                               </table>
+                       {% else %}
+                               <p>
+                                       IPFire as an Internet Gateway is able to dialup through various techniques
+                                       to connect to the Internet.
+                               </p>
+                               <p>
+                                       It supports all popular types of broadband access, as well as mobile access:
+                               </p>
+
+                               <table class="table table-striped table-bordered">
+                                       <tbody>
+                                               <tr>
+                                                       <td>
+                                                               <strong>VDSL</strong>
+                                                       </td>
+                                                       <td>
+                                                               VDSL is short for <em>Very High Data Rate Digital Subscriber Line</em> and
+                                                               it currently offers bandwidth up to 50 Mbit/s downstream and 10 Mbit/s upstream.
+                                                               VDSL brings the possibility of using new technologies such as IPTV. With IPFire, a conventional
+                                                               router can be replaced by a full-fledged system that brings the IPTV stream into your own home network.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td>
+                                                               <strong>ADSL/SDSL</strong>
+                                                       </td>
+                                                       <td>
+                                                               Conventional DSL is also supported, although it is technically
+                                                               called also PPPoE or PPPoA. In some countries, the PPTP protocol is also widely used and it is also fully
+                                                               supported by IPFire.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td>
+                                                               <strong>Ethernet</strong>
+                                                       </td>
+                                                       <td>
+                                                               Over Ethernet, IPFire can also be connected to the Internet and obtain
+                                                               an IP address either via DHCP or static configuration.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td>
+                                                               <strong>3rd Generation</strong>
+                                                       </td>
+                                                       <td>
+                                                               Mobile broadband connections over USB modems, which are also known by the names
+                                                               UMTS, 3G, CDMA, HSDPA or LTE are also supported by IPFire.
+                                                       </td>
+                                               </tr>
+                                       </tbody>
+                               </table>
+                       {% end %}
+               </div>
+       </div>
+{% end block %}
index 4ff027125c58cbdbe6e82c89d1d37d586e7a0ab3..3212c2f7e5b5e7259bcdb63a481c379d5027333f 100644 (file)
                
 {% block title %}{{ _("Firewall") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Firewall") }}</h3>
+{% block bodyA %}
+       <img src="{{ static_url("images/icons/firewall.png") }}" class="pull-right" alt="{{ _("Firewall") }}" />
 
-       <img src="{{ static_url("images/icons/firewall.png") }}" class="floatTL" alt="{{ _("Firewall") }}" />
-       {% if lang == "de" %}
-               <p>
-                       IPFire ist mit einer SPI-Firewall (stateful inspection) ausgestattet, die auf dem
-                       Linux <a href="http://www.netfilter.org/">netfilter</a> aufgebaut ist.
-               </p>
-               <p>
-                       Jede IPFire-Installation teilt das Netzwerk in kleinere, voneinander getrennte Teile,
-                       denen eine Gruppe von Computern zugeordnet wird - abhängig von ihrer Sicherheitseinstufung:
-               </p>
-               <ul class="list">
-                       <li style="color: green;">
-                               <strong>Grün (Green):</strong> In der grünen Zone befinden sich alle Client-PCs,
-                               die als sicher eingestuft sind. Das ist in der Regel das verkabelte LAN. Alle PCs
-                               können auf alle anderen Netze ohne Beschränkung zugreifen.
-                       </li>
-                       <li style="color: red;">
-                               <strong>Rot (Red):</strong> Das Internet hat, aufgrund seiner potentiellen Gefahr,
-                               die Farbe Rot bekommen. Es ist kein Zugriff von dort auf eines der anderen
-                               Netze möglich ohne, dass dies vorher explizit erlaubt wurde.
-                       </li>
-                       <li style="color: darkblue;">
-                               <strong>Blau (Blue):</strong> Das drahtlose Netzwerk ist auch eher als gefärlich
-                               einzustufen und wurde daher vom übrigen LAN getrennt. PCs in diesem Netz müssen
-                               explizit zugelassen werden, um auf das Internet zugreifen zu dürfen.
-                       </li>
-                       <li style="color: orange;">
-                               <strong>Orange:</strong> Server, die vom Internet aus erreichbar sein müssen,
-                               haben die Gefahr, dass sie übernommen werden können. Für diesen Fall sind sie
-                               im orangen Segment eingeschlossen und können keine anderen Systeme
-                               in den anderen Zonen beeinträchtigen. Die orangene Zone wird auch demilitarisierte
-                               Zone (DMZ) genannt.
-                       </li>
-               </ul>
-               <br class="clear" />
-               <p>
-                       Somit gibt es für jedes System einen optimalen Platz im Netzwerk. Alle Netzwerksegmente
-                       außer Grün und Rot, die immer vorhanden sind, können einzeln hinzukonfiguriert werden.
-                       <br />
-                       Zusätzlich gibt es eine <strong>ausgehende Firewall</strong>, die Verkehr aus den lokalen
-                       Netzen heraus ins Internet filtert.
-               </p>
-       {% else %}
-               <p>
-                       IPFire uses a firewall using Stateful Packet Inspection (SPI) which is built on top of
-                       <a href="http://www.netfilter.org/">netfilter</a>, the Linux packet filtering framework.
-               </p>
-               <p>
-                       With the installation of IPFire, the network gets separated into different segments which
-                       represent a group of computers which share a common security level:
-               </p>
-               <ul class="list">
-                       <li style="color: green;">
-                               <strong>Green</strong> represents a safe area. This is where all regular client computers
-                               reside. is usually comprised of a wired local network. Clients can access all other
-                               network segments without restriction.
-                       </li>
-                       <li style="color: red;">
-                               <strong>Red</strong>,  a color commonly indicating danger, represents the Internet.
-                               No access from the Internet is permitted to pass the firewall unless specially configured
-                               by the administrator. 
-                       </li>
-                       <li style="color: darkblue;">
-                               <strong>Blue</strong> represents the wireless part of the local network, since it has
-                               its own unique potential for abuse. The color blue was chosen as it is the color of the
-                               sky. Clients on this network segment must be explicitly allowed before they may access
-                               the network.
-                       </li>
-                       <li style="color: orange;">
-                               <strong>Orange</strong> is commonly referred to as the demilitarized zone (DMZ). Any
-                               servers which are publicly accessible are separated from the rest of the network to
-                               limit extent of a security breach.
-                       </li>
-               </ul>
-               <br class="clear" />
-               <p>
-                       This scheme means there is a perfect place for each machine in the network. The various
-                       segments may be enabled separately depending on requirements. Additionally, the firewall
-                       can also control outbound Internet access from any segment. This gives the administrator
-                       ultimate control over how their network can be used.
-               </p>
-       {% end %}
+       <div class="page-header">
+               <h1>{{ _("Firewall") }}</h1>
+       </div>
+
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       IPFire nutzt eine Stateful-Packet-Inspection-Firewall (SPI),
+                                       welche auf das Linux Paketfilter-Framework <em>netfilter</em> aufsetzt.
+                               </p>
+                               <p>
+                                       Während des IPFire Installationsprozesses, wird das Netzwerk in
+                                       mehrere separate Segmente unterteilt.
+                                       Dieses Sicherheitsschema impliziert einen perfekten Platz für
+                                       jedes System im Netzwerk.
+                                       Jedes Segment kann nach Bedarf zugeschaltet werden, abhängig vom
+                                       Einsatzort und -zweck und alle Systeme in einem Segment werden
+                                       mit der gleichen Sicherheitspolicy behandelt:
+                               </p>
+
+                               <table class="table table-striped table-bordered">
+                                       <tbody>
+                                               <tr>
+                                                       <td style="background-color: green; color: white;">
+                                                               <strong>Green</strong>
+                                                       </td>
+                                                       <td>
+                                                               Grün repräsentiert die "sichere" Zone.
+                                                               In diese Zone gelangen alle herkömmlichen
+                                                               Clients, welche meist mit dem Kabelnetzwerk
+                                                               verbunden sind. Von hier aus können die Clients
+                                                               uneingeschränkt auf alle anderen Zonen zugreifen.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td style="background-color: red; color: white;">
+                                                               <strong>Red</strong>
+                                                       </td>
+                                                       <td>
+                                                               Rot impliziert "Gefahr" - also die Verbindung zum
+                                                               Internet.
+                                                               Nichts von hier aus darf die Firewall passieren,
+                                                               außer dies ist explizit vom Administrator erlaubt.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td style="background-color: darkblue; color: white;">
+                                                               <strong>Blue</strong>
+                                                       </td>
+                                                       <td>
+                                                               Blau repräsentiert das drahtlose Segment des
+                                                               Netzwerks (aufgrund der Farbe des Himmels).
+                                                               Da Wireless-Clients von Natur aus ein größeres
+                                                               Gefahrenpotential sind, muss für jedes System
+                                                               in diesem Teil der Zugang zum Internet gesondert
+                                                               erlaubt werden.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td style="background-color: orange; color: white;">
+                                                               <strong>Orange</strong>
+                                                       </td>
+                                                       <td>
+                                                               Das orangene Netzwerk wird auch als demilitarisierte
+                                                               Zone (DMZ) bezeichnet.
+                                                               Alle Server, die aus dem Internet erreichbar sind
+                                                               gehören in dieses Netz um kein Sicherheitsrisiko
+                                                               für andere lokale Systeme zu sein.
+                                                       </td>
+                                               </tr>
+                                       </tbody>
+                               </table>
 
-       <p class="links">
-               <a href="http://wiki.ipfire.org/en/configuration/firewall/outgoingfirewall">{{ _("Outgoing firewall configuration") }}</a>
-       </p>
+                               <p>
+                                       Zusätzlich zu den oben genannten Policies kann auch der ausgehende
+                                       Netzwerkverkehr für jedes Segment geregelt werden.
+                                       Diese Funktion gibt dem Netzwerkadministrator vollständige
+                                       Kontrolle über das Netzwerk.
+                               </p>
+                       {% else %}
+                               <p>
+                                       IPFire employs a Stateful Packet Inspection (SPI) firewall,
+                                       which is built on top of netfilter (the Linux packet filtering framework).
+                               </p>
+                               <p>
+                                       During the installation of IPFire, the network is configured into different,
+                                       separate segments.
+                                       This segmented security scheme means that there is a perfect place for each
+                                       machine in the network.
+                                       These different segments may be enabled separately, depending on your requirements.
+                                       Each segment represents a group of computers who share a common security level:
+                               </p>
 
-       <div class="line"></div>
+                               <table class="table table-striped table-bordered">
+                                       <tbody>
+                                               <tr>
+                                                       <td style="background-color: green; color: white;">
+                                                               <strong>Green</strong>
+                                                       </td>
+                                                       <td>
+                                                               Green represents a "safe" area.
+                                                               This is where all regular clients will reside.
+                                                               It is usually comprised of a wired, local network.
+                                                               Clients on Green can access all other network
+                                                               segments without restriction.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td style="background-color: red; color: white;">
+                                                               <strong>Red</strong>
+                                                       </td>
+                                                       <td>
+                                                               Red indicates "danger" or the connection to the Internet.
+                                                               Nothing from Red is permitted to pass through the
+                                                               firewall unless specifically configured by the
+                                                               administrator.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td style="background-color: darkblue; color: white;">
+                                                               <strong>Blue</strong>
+                                                       </td>
+                                                       <td>
+                                                               Blue represents the "wireless" part of the local
+                                                               network (chosen because it's the color of the sky).
+                                                               Since the wireless network has the potential for abuse,
+                                                               it is uniquely identified and specific rules govern
+                                                               clients on it.
+                                                               Clients on this network segment must be explicitly
+                                                               allowed before they may access the network.
+                                                       </td>
+                                               </tr>
+                                               <tr>
+                                                       <td style="background-color: orange; color: white;">
+                                                               <strong>Orange</strong>
+                                                       </td>
+                                                       <td>
+                                                               Orange is referred to as the "demilitarized zone" (DMZ).
+                                                               Any servers which are publicly accessible are separated
+                                                               from the rest of the network here to limit security
+                                                               breaches.
+                                                       </td>
+                                               </tr>
+                                       </tbody>
+                               </table>
 
-       <div class="screenshots">
-               <a rel="screens" href="{{ static_url("images/screenshots/en/firewall/edit-portfw-rule-1.png") }}"
-                       title="{{ _("Firewall rules can be easily edited.") }}"><img alt="{{ _("Image 1") }}"
-                       src="{{ static_url("images/screenshots/en/firewall/edit-portfw-rule-1_thumb.png") }}" />
-               </a>
-               <a rel="screens" href="{{ static_url("images/screenshots/en/firewall/dmz-holes-1.png") }}"
-                       title="{{ _("Firewall rules can be easily edited.") }}"><img alt="{{ _("Image 1") }}"
-                       src="{{ static_url("images/screenshots/en/firewall/dmz-holes-1_thumb.png") }}" />
-               </a>
+                               <p>
+                                       Additionally, the firewall can be used to control outbound Internet
+                                       access from any segment.
+                                       This feature gives the network administrator complete control
+                                       over how their network is configured and secured. 
+                               </p>
+                       {% end %}
+               </div>
        </div>
 
-       <div class="screenshots">
-               <a rel="screens" href="{{ static_url("images/screenshots/en/firewall/connections-1.png") }}"
-                       title="{{ _("An overview over all connections.") }}"><img alt="{{ _("Image 1") }}"
-                       src="{{ static_url("images/screenshots/en/firewall/connections-1_thumb.png") }}" />
-               </a>
+       <hr>
+
+       <div class="well">
+               <h3>{{ _("Further reading") }}</h3>
+               <ul>
+                       <li>
+                               <a href="http://wiki.ipfire.org/{{ lang }}/configuration/firewall/outgoingfirewall">{{ _("Outgoing firewall configuration") }}</a>
+                       </li>
+               </ul>
        </div>
+
+       <ul class="thumbnails">
+               <li class="span3">
+                       <a class="thumbnail" href="{{ static_url("images/screenshots/en/firewall/edit-portfw-rule-1.png") }}">
+                               <img src="{{ static_url("images/screenshots/en/firewall/edit-portfw-rule-1_thumb.png") }}" alt="{{ _("Screenshot") }}">
+                       </a>
+               </li>
+               <li class="span3">
+                       <a class="thumbnail" href="{{ static_url("images/screenshots/en/firewall/dmz-holes-1.png") }}">
+                               <img src="{{ static_url("images/screenshots/en/firewall/dmz-holes-1_thumb.png") }}" alt="{{ _("Screenshot") }}">
+                       </a>
+               </li>
+               <li class="span3">
+                       <a class="thumbnail" href="{{ static_url("images/screenshots/en/firewall/connections-1.png") }}">
+                               <img src="{{ static_url("images/screenshots/en/firewall/connections-1_thumb.png") }}" alt="{{ _("Screenshot") }}">
+                       </a>
+               </li>
+       </ul>
 {% end block %}
index b3b787d9306ddf778b69aad38c8d31fc739d7d9f..a9822d1cfd8c0e0252f7ceea02b7ccf4e84ee622 100644 (file)
                
 {% block title %}{{ _("Hardware") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Hardware") }}</h3>
+{% block bodyA %}
+       <img src="{{ static_url("images/icons/hardware.png") }}" class="pull-right" alt="{{ _("Hardware") }}" />
+       <div class="page-header">
+               <h1>{{ _("Hardware") }}</h1>
+       </div>
+
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Da IPFire auf einer aktuellen Version des Linux Kernels basiert, ist es möglich
+                                       eine Breite Palette an neuer Hardware, wie 10-Gigabit-Netzwerkkarten und
+                                       Wireless-Hardware, ohne zusätzlichen Aufwand zu betreiben.
+                                       Den Entwicklern ist es ein Anliegen, IPFire auf einer möglichst breiten Palette von
+                                       Hardware lauffähig zu machen. Dadurch lässt sich IPFire auf alter, günster Hardware
+                                       genauso hervoragend verwenden, wie auf High-Performance-Systemen.
+                               </p>
+                               <p>
+                                       Dabei belaufen sich die Mindestanforderungen bei einem Pentium I (i568), 128MB RAM
+                                       und 2 GB Festplattenspeicher.
+                               </p>
+                               <p>
+                                       Einige Erweiterungen haben zuätzliche Anforderungen an die Hardware um korrekt
+                                       funktionieren zu können. Ein System welches alle Anforderungen erfüllt, ist in der
+                                       Lage hunderte Clients zur selben Zeit zu bedienen.
+                               </p>
+                               <h3>Heads up: Zusätzliche Architekturen in Entwicklung</h3>
+                               <p>
+                                       Das IPFire Projekt ist auch interessiert Ressorcen schonende Systeme zu unterstützen.
+                                       In diesem Zusammenhang, ist die ARM Architektur erwähnenswert, welche äußerst wenig Strom
+                                       benötigt und ein großes Zukunftspotential aufweist.
+                               </p>
+                               <!-- <p>
+                                       Mehr zu diesem Thema kann auf der <a href="/features/ports/arm">ARM Projekt Seite</a> gefunden 
+                                       werden.
+                               </p> -->
+                       {% else %}
+                               <p>
+                                       Since IPFire is based on a recent version of the Linux kernel, it supports most
+                                       of the latest hardware such as 10Gbit network cards and a variety of wireless
+                                       hardware out of the box.
+                                       The IPFire developers are very concerned with the ability to run IPFire as many
+                                       system variations as possible.
+                                       This helps IPFire to run on older or cheap hardware, as well as high-performance systems.
+                               </p>
+                               <p>
+                                       Minimum system requirements are an Intel Pentium I (i586),
+                                       128MB RAM and 2GB hard drive space.
+                               </p>
+                               <p>
+                                       Some add-ons have extra requirements to perform smoothly.
+                                       On a system that fits the hardware requirements, IPFire
+                                       is able to serve hundreds of clients simultaneously.
+                               </p>
 
-       <img src="{{ static_url("images/icons/hardware.png") }}" class="floatTL" alt="{{ _("Hardware") }}" />
-       {% if lang == "de" %}
-               <p>
-                       Basierend auf aktuellen Versionen des Linux Kernels der 2.6er Serie unterstützt IPFire
-                       neueste Hardware, wie 10-Gigabit-Netzwerkkarten und Wireless-Hardware, ohne zusätzlich
-                       nachzuinstallierende Treiber.
-               </p>
-               <p>
-                       Es wird mindestens eine i586er CPU benötigt (Intel Pentium I oder höher). Weiterhin
-                       empfehlen wir mindestens 128 MB RAM und 1GB Festplattenplatz.
-               </p>
-               <p>
-                       Für den Einsatz als Router sind mindestens zwei Netzwerkschnittstellen erforderlich.
-                       Alternativ kann der Internetzugang auch über ein UMTS-Modem erfolgen.
-               </p>
-               <p>
-                       Den Entwicklern ist es ein Anliegen, IPFire auf einer möglichst breiten Palette von
-                       Hardware lauffähig zu machen. Das schließt sowohl günstige Hardware, wie auch
-                       hochperformante Server ein.
-               </p>
-       {% else %}
-               <p>
-                       Based on a recent version of the Linux kernel 2.6 series, IPFire supports the latest hardware
-                       like 10Gbit network cards and wireless hardware out of the box.
-               </p>
-               <p>
-                       Requirements are minimal: an Intel Pentium I compatible CPU (i586), 128 MB RAM,
-                       and 1GB disk space.
-               </p>
-               <p>
-                       For routing, at least 2 network interfaces are required.
-                       Alternatively, a 3G modem may be used. 
-               </p>
-               <p>
-                       The IPFire Developers are concerned with the ability to run IPFire on systems running as many
-                       variations as possible. This is what helps IPFire run on cheap hardware as well as high
-                       performance servers. 
-               </p>
-       {% end %}
-       <p class="links">
-               <a href="http://fireinfo.ipfire.org/" target="_blank">{{ _("Fireinfo") }}</a>
-               &bull;
-               <a href="http://wiki.ipfire.org/{{ lang }}/hardware/start" target="_blank">{{ _("Hardware section on the wiki") }}</a>
-               &bull;
-               <a href="http://wiki.ipfire.org/{{ lang }}/hardware/networking" target="_blank">{{ _("Hardware compatibility list") }} ({{ _("networking") }})</a>
-       </p>
+                               <h3>Heads up: More architectures in development!</h3>
+                               <p>
+                                       The IPFire project is always interested in creating systems
+                                       which save the environment. The ARM architecture consumes
+                                       much less power and certainly has a lot of potentional.
+                               </p>
+                               <!-- <p>
+                                       More about this may be found on the
+                                       <a href="/features/ports/arm">ARM project page</a>.
+                               </p> -->
+                       {% end %}
+               </div>
+       </div>
 
-       <div class="line"></div>
+       <hr>
 
-       <div class="screenshots">
-               <a rel="screens" href="{{ static_url("images/screenshots/en/hardware/hwtemp-1.png") }}"
-                       title="{{ _("All hardware data is monitored.") }}"><img alt="{{ _("Image 1") }}"
-                       src="{{ static_url("images/screenshots/en/hardware/hwtemp-1_thumb.png") }}" />
-               </a>
+       <div class="well">
+               <h3>{{ _("Further reading") }}</h3>
+               <ul>
+                       <li>
+                               <a href="http://fireinfo.ipfire.org/">{{ _("Fireinfo") }}</a>
+                       </li>
+                       <li>
+                               <a href="http://wiki.ipfire.org/{{ lang }}/hardware/start">
+                                       {{ _("Hardware section on the wiki") }}
+                               </a>
+                       </li>
+                       <li>
+                               <a href="http://wiki.ipfire.org/{{ lang }}/hardware/networking">
+                                       {{ _("Hardware compatibility list") }} ({{ _("networking") }})
+                               </a>
+                       </li>
+               </ul>
        </div>
+
+       <ul class="thumbnails">
+               <li class="span3">
+                       <a class="thumbnail" href="{{ static_url("images/screenshots/en/hardware/hwtemp-1.png") }}">
+                               <img src="{{ static_url("images/screenshots/en/hardware/hwtemp-1_thumb.png") }}" alt="{{ _("Screenshot") }}">
+                       </a>
+               </li>
+       </ul>
 {% end block %}
index ffe01cff7b55580ea24cd3d8dfaa2e0688f317c0..36aeeb8c197aa5590eccf5a9963224fae428642f 100644 (file)
@@ -2,60 +2,63 @@
                
 {% block title %}{{ _("Intrusion detection system") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Intrusion detection system") }}</h3>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("Intrusion detection system") }}</h1>
+       </div>
 
-       <!-- XXX needs icons -->
-       <!-- XXX needs screenshots -->
-
-       {% if lang == "de" %}
-               <p>
-                       Ein Intrusion Dection System, kurz IDS, dient zur Erkennung von Angriffen gegen Computersysteme
-                       oder Computernetze. Dabei analysiert das IDS den Netzwerktraffic und durchsucht diesen nach Angriffsmustern.
-                       Wird zum Beispiel ein einfacher Portscan auf ein IPFire-System ausgeführt um angebotene Dienste auszuspähen,
-                       dann wird dies sofort erkannt.
-               </p>
-               <p>
-                       Ein IPS, Intrusion Prevention System, hat zusätzlich zu der Erkennung die Aufgabe Aktionen auszuführen.
-                       Dabei nimmt es Informationen zum Angriff vom IDS entgegen und handelt entsprechend. Bei dem Beispiel des
-                       Portscans würde es den Angreifer blocken damit keine Daten mehr ausgetauscht werden.
-               </p>
-               <p>
-                       Arbeiten wie in IPFire beide Systeme zusammen nennt man dies ein IDPS (Intrusion detection and prevention
-                       system). Ein sehr bekannter Vertreter dafür ist Snort. Das freie Netzwerk Intrusion Dection System (NIDS)
-                       analysiert den Datenverkehr und sofern es etwas Auffälliges findet, logt es dieses. IPFire bietet die
-                       Möglichkeit die erkannten Angriffe im Webinterface detailliert durchzusehen.
-               </p>
-               <p>
-                       Automatische Gegenmaßnahmen verrichtet in IPFire Guardian, was optional nachinstalliert werden kann.
-               </p>
-               <p>
-                       Somit ist ein IDPS ein sinnvoller Zusatz zum herkömmlichen Paketfilter um intelligente Entscheidungen
-                       über einkommende Daten zu treffen.
-               </p>
-       {% else %}
-               <p>
-                       An Intrusion Dection System, shortly IDS, is a software to detect attacks against computer systems
-                       and networks. Thereby the IDS analyze the networktraffic and search for attacksamples. If someone
-                       scans the ports of the IPFire-System to see which services are available, the IDS notice it.
-               </p>
-               <p>
-                       An IPS, Intrusion Prevention System, has in addition to the detection the task to perform actions.
-                       Thereby the IPS get the information from the IDS and react. That means, if we recall the example with
-                       the portscan, the system would block the attacker in order to prevent further inquiries.
-               </p>
-               <p>
-                       It is possible to use IDS and IPS at the IPFire system. We call such a system IDPS (Intrusion Detection
-                       and Prevention System). A very important deputy is Snort. This free Network Intrusion Dection System
-                       (NIDS) analyzes the networktraffic and if something abnormal happens it will logs it. IPFire gives you
-                       the possibility to see it very explicit at the webinterface.
-               </p>
-               <p>
-                       For automatical prevention, IPFire has an addon called Guardian which can be installed optional.
-               </p>
-               <p>
-                       Therefore an IDPS is a wise addition to the normal packetfilter to get intelligent decisions about
-                       incoming and outgoing information.
-               </p>
-       {% end %}
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Ein Intrusion Dection System, kurz IDS, dient zur Erkennung von Angriffen gegen Computersysteme
+                                       oder Computernetze. Dabei analysiert das IDS den Netzwerktraffic und durchsucht diesen nach Angriffsmustern.
+                                       Wird zum Beispiel ein einfacher Portscan auf ein IPFire-System ausgeführt um angebotene Dienste auszuspähen,
+                                       dann wird dies sofort erkannt.
+                               </p>
+                               <p>
+                                       Ein IPS, Intrusion Prevention System, hat zusätzlich zu der Erkennung die Aufgabe Aktionen auszuführen.
+                                       Dabei nimmt es Informationen zum Angriff vom IDS entgegen und handelt entsprechend. Bei dem Beispiel des
+                                       Portscans würde es den Angreifer blocken damit keine Daten mehr ausgetauscht werden.
+                               </p>
+                               <p>
+                                       Arbeiten wie in IPFire beide Systeme zusammen nennt man dies ein IDPS (Intrusion detection and prevention
+                                       system). Ein sehr bekannter Vertreter dafür ist Snort. Das freie Netzwerk Intrusion Dection System (NIDS)
+                                       analysiert den Datenverkehr und sofern es etwas Auffälliges findet, logt es dieses. IPFire bietet die
+                                       Möglichkeit die erkannten Angriffe im Webinterface detailliert durchzusehen.
+                               </p>
+                               <p>
+                                       Automatische Gegenmaßnahmen verrichtet in IPFire Guardian, was optional nachinstalliert werden kann.
+                               </p>
+                               <p>
+                                       Somit ist ein IDPS ein sinnvoller Zusatz zum herkömmlichen Paketfilter um intelligente Entscheidungen
+                                       über einkommende Daten zu treffen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       An Intrusion Dection System (or IDS), is a piece of software designed to detect attacks against computer systems
+                                       and networks. Thereby the IDS will analyze the network traffic and search for attack samples. If someone
+                                       scans the ports of the IPFire-System to see which services are available, the IDS will immediately notice it.
+                               </p>
+                               <p>
+                                       An Intrusion Prevention System (or IPS), in addition to the detection system, will perform actions.
+                                       The IPS gets the information from the IDS and reacts accordingly. That means, recalling the example above with
+                                       the portscan, the system would automatically block the attacker immediately in order to prevent further inquiries.
+                               </p>
+                               <p>
+                                       It is possible to use IDS and IPS on the IPFire system. We call this system "Intrusion Detection
+                                       and Prevention System" (or IDPS). A very important deputy of this system is Snort, the free Network Intrusion Dection System
+                                       (NIDS). It analyzes the network traffic and if something abnormal happens, it will log the event. IPFire gives you
+                                       the possibility to see it very explicitly in the web interface.
+                               </p>
+                               <p>
+                                       For automatic prevention, IPFire has an add-on called Guardian which can be installed optionally.
+                               </p>
+                               <p>
+                                       An IDPS is a wise addition to the normal packet filter. It makes intelligent decisions about
+                                       incoming and outgoing network traffic and how to deal with it.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index d12279eb494e3c18a26de912393d1beb7f095524..655a231492b6f32b0bb1c0ff704744a7fe83187f 100644 (file)
@@ -2,45 +2,86 @@
                
 {% block title %}{{ _("IPFire is free software") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("IPFire is free software") }}</h3>
+{% block bodyA %}
+       <img src="{{ static_url("images/icons/itsfree.png") }}" class="pull-right" alt="{{ _("It's free") }}" />
 
-       <img src="{{ static_url("images/icons/itsfree.png") }}" class="floatTL" alt="{{ _("It's free") }}" />
-       {% if lang == "de" %}
-               <p>
-                       Lizenziert unter der <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>
-                       in Version 3 ist IPFire freie Software.
-               </p>
-               <p>
-                       Eine <a href="/donation">Spende</a> sichert den Fortbestand des Projekts,
-                       welches ohne diese Form der Unterstützung, nicht existieren könnte.
-               </p>
-               <p>
-                       Freie Software ermöglicht (unter den Bedingungen der GPLv3):
-               </p>
-               <ul class="list">
-                       <li>Kostenfreie Nutzung über einen unbegrenzten Zeitraum</li>
-                       <li>Einblick in den Quelltext</li>
-                       <li>Möglichkeiten zur Mitwirkung und Verbeserung</li>
-                       <li>Unabhängigkeit von einem Hersteller</li>
-               </ul>
-       {% else %}
-               <p>
-                       IPFire is licensed under the terms of the <a href="http://www.gnu.org/licenses/gpl.html">GNU General
-                       Public License</a> in version 3, so it is free software.
-               </p>
-               <p>
-                       The success of the project depends upon <a href="/donation">donations</a>
-                       to the community.
-               </p>
-               <p>
-                       Free software allows (under the terms of the GPLv3):
-               </p>
-               <ul class="list">
-                       <li>Free use for an unlimited amount time</li>
-                       <li>Review of the full source code</li>
-                       <li>Opportunity to take part in development and make own improvements</li>
-                       <li>Independence from a specific vendor</li>
-               </ul>
-       {% end %}
+       <div class="page-header">
+               <h1>
+                       {{ _("IPFire is free software") }}
+                       <small>{{ _("Free as in freedom") }}</small>
+               </h1>
+       </div>
+
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Die Komponenten aus denen IPFire sich zusammensetzt sind
+                                       ausschließlich unter <em>freien Softwarelizenzen</em> lizenziert.
+                                       Das bedeutet widerum, dass IPFire selbst <em>freie Software</em> ist.
+                               </p>
+                               <p>
+                                       Freie Software bietet wesentliche Vorteile im Vergleich zu
+                                       Closed-Source Entwicklungen.
+                                       Beispielweise ist es jederzeit möglich Quellcode
+                                       anzusehen und zu verbessern.
+                                       Die IPFire Entwickler erhalten laufend Patches, welche
+                                       Fehler beseitigen und neue Funktionen hinzufügen.
+                               </p>
+                               <p>
+                                       IPFire kann von jederman egal ob im Büro oder zu Hause
+                                       vollkommen unlimitiert verwendet werden,
+                                       auch ist es erlaubt Kopien an Freunde oder Kollegen
+                                       weiterzugeben.
+                               </p>
+                               <p>
+                                       Für sämtliche Software die in IPFire eingesetzt wird, ist
+                                       ebenfalls der Quellcode verfügbar.
+                               </p>
+
+                               <h2>Spenden</h2>
+                               <p>
+                                       Der Erfolg von IPFire basiert überwiegend auf Spenden und
+                                       der Arbeit, welche die Community beisteuert.
+                                       Wir möchten jeden der unsere Software herunterlädt oder
+                                       verwendet, dazu ermutigen auch ein Teil dieser Gemeinschaft
+                                       zu werden - sei es durch Hilfestellung im Forum,
+                                       Erweiterung/Korrektur der Dokumentation oder durch eine
+                                       <a href="/donation">Spende</a>.
+                                       Je mehr Leute sich einbringen, desto mehr Ressourcen
+                                       stehen zur Verfügung für Fortschritt und Entwicklung.
+                               </p>
+                       {% else %}
+                               <p>
+                                       IPFire is assembled with software that is licensed under
+                                       <em>free software</em> licences. That basically means IPFire
+                                       itself is <em>free software</em>.
+                               </p>
+                               <p>
+                                       Free software has huge advantages in difference to closed source developments.
+                                       At this project, it is possible to review the code and make it better. In fact,
+                                       IPFire is receiving a lot of code contributions that make the whole distribution
+                                       a little bit better every day.
+                               </p>
+                               <p>
+                                       People who simply use IPFire in their offices or homes can use it for an unlimited
+                                       amount of time, make copies of it and give them to friends or colleges.
+                               </p>
+                               <p>
+                                       As IPFire is including many different software packages, all of them are also
+                                       availble in source code and distributed under a free license.
+                               </p>
+
+                               <h2>Donations</h2>
+                               <p>
+                                       The ultimate success of the project is dependent on donations and community
+                                       interaction.
+                                       We encourage anyone who downloads and uses IPFire to get involved, whether
+                                       it be on the forum, adding/editing the wiki, or <a href="/donation">donating</a>.
+                                       The more we foster community development, the more resources we have
+                                       available to continue and expand development.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index 011643cca7e703607960683c641f250243505d39..24e69b5a16812d1f71589616c2ce055ce6a5a1a1 100644 (file)
                
 {% block title %}{{ _("Pakfire") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Pakfire - the IPFire package management") }}</h3>
-
-       <img src="{{ static_url("images/icons/pakfire.png") }}" class="floatTL" alt="{{ _("Pakfire") }}" />
-       {% if lang == "de" %}
-               <p>
-                       Vom technischen Standpunkt aus ist IPFire ein schlankes, gehärtetes Firewall-System, welches
-                       einen Paketmanager mitbringt, der den Namen Pakfire trägt.
-                       Mit nur wenigen Klicks ist es möglich dieses System als eine Serverlösung auszubauen.
-               </p>
-               <p>
-                       Die interessantesten Addons:
-               </p>
-               <ul class="list">
-                       <li>Dateidienste wie z.B.: Samba und vsftpd</li>
-                       <li>Eine Auswahl an Konsolentools: tcpdump, nmap und traceroute.</li>
-                       <li>Asterisk</li>
-                       <li><em>und viele mehr...</em></li>
-               </ul>
-       {% else %}
-               <p>
-                       From a technical point of view, IPFire is a minimalistic, hardened firewall system
-                       which comes with an integrated package manager called Pakfire. With a single click you
-                       can enhance the base system by providing network services.
-               </p>
-               <p>
-                       Some interesting addons:
-               </p>
-               <ul class="list">
-                       <!-- XXX make this right -->
-                       <li>File services such as Samba and vsftpd</li>
-                       <li>Communication Server Asterisk</li>
-                       <li>A collection of command line tools like tcpdump, nmap and traceroute.</li>
-                       <li><em>and many more...</em></li>
+{% block bodyA %}
+       <img src="{{ static_url("images/icons/pakfire.png") }}" class="pull-right" alt="{{ _("Pakfire") }}" />
+
+       <div class="page-header">
+               <h1>
+                       Pakfire
+                       <small>{{ _("The IPFire package management system") }}</small>
+               </h1>
+       </div>
+
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Vom technischen Standpunkt aus ist IPFire ein schlankes, gehärtetes
+                                       Firewall-System, welches den Paketmanager Pakfire mitbringt.
+                                       Die primäre Aufgabe von Pakfire ist es, Systemupdates mit nur einem Klick
+                                       einspielen zu können.
+                                       Somit ist es ganz leicht <a href="/features/updates">Sicherheitslücken
+                                       zu schließen und Bugfixes sowie neue Funktionen zu installieren</a>.
+                                       Dies macht IPFIre sicherer und schneller - oder einfach: besser.
+                               </p>
+                               <p>
+                                       Eine weitere Aufgabe ist es, zusätzliche Addons zu installieren, welche die
+                                       Funktionen des Systems erweitern.
+
+                                       Einige beliebte sind unter anderen:
+
+                                       <ul>
+                                               <li>Datei- und Druckdienste wie <em>samba</em> und <em>vsftpd</em></li>
+                                               <li>Kommunikationslösungen wie <em>Asterisk</em></li>
+                                               <li>
+                                                       Verschiedene Kommandozeilenhelfer wie
+                                                       <em>tcpdump</em>, <em>nmap</em>, <em>traceroute</em>
+                                                       und viele mehr.
+                                               </li>
+                                       </ul>
+                               </p>
+
+                               <h2>Pakfire als Buildsystem</h2>
+                               <p>
+                                       Das kommende Major-Release von IPFire wird eine neue
+                                       Generation des Pakfire Paketmanagementsystems mitbringen.
+                                       Diese ist schneller, sicherer und einfacher zu bedienen.
+                                       Dazu kommen unzählige neue Funktionen.
+                               </p>
+                               <p>
+                                       Eine der neuen Funktionen ist, dass <em>pakfire</em>
+                                       nun auch als Buildsystem fungiert.
+                                       Ein auf die IPFire-Distribution angepasstes Buildsystem
+                                       hat die Produktivität der Entwickler immens gesteigert.
+                                       Neue Pakete zu bauen ist nun einfacher und nimmt weniger
+                                       Zeit in Anspruch.
+                               </p>
+                               <p>
+                                       Qualitätssicherung ist jetzt eine Aufgabe für alle.
+                                       Mehr dazu auf <a href="http://pakfire.ipfire.org/">pakfire.ipfire.org</a>.
+                               </p>
+                       {% else %}
+                               <p>
+                                       From a technical point of view, IPFire is a minimalistic, hardened firewall system
+                                       which comes with an integrated package manager called Pakfire.
+                                       The primary task of Pakfire is to update the system with only a single click.
+                                       It is very easy to install <a href="/features/updates">security patches,
+                                       bugfixes and feature enhancements</a>, which make IPFire safer and faster
+                                       - or simply: better.
+                               </p>
+                               <p>
+                                       Another task of Pakfire is to install additional software that adds new
+                                       functionality to the IPFire system.
+
+                                       Some useful of them are:
+                                       
+                                       <ul>
+                                               <li>File sharing services such as Samba and vsftpd</li>
+                                               <li>Communications server using Asterisk</li>
+                                               <li>
+                                                       Various command-line tools as <em>tcpdump</em>,
+                                                       <em>nmap</em>, <em>traceroute</em> and many more.
+                                               </li>
+                                       </ul>
+                               </p>
+
+                               <h2>Pakfire as a build system</h2>
+                               <p>
+                                       The next major release of IPFire will also ship a new generation
+                                       of the Pakfire packagement system.
+                                       This new generation has been made faster, more secure, more
+                                       easy to handle and adds a whole bunch of new features.
+                               </p>
+                               <p>
+                                       One of this features is that <em>pakfire</em> is now the
+                                       buildsystem as well. Having a customized build system for
+                                       the needs of IPFire and the IPFire developers improved
+                                       the development process very much. Building new packages
+                                       became a lot more easy and less time-consuming.
+                               </p>
+                               <p>
+                                       Quality assurance became more social right now. Check it
+                                       out at <a href="http://pakfire.ipfire.org/">pakfire.ipfire.org</a>.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
+
+       <hr>
+
+       <div class="well">
+               <h3>{{ _("Further reading") }}</h3>
+               <ul>
+                       <li>
+                               <a href="http://wiki.ipfire.org/{{ lang }}/configuration/ipfire/pakfire/start">
+                                       {{ _("How to install a package?") }}
+                               </a>
+                       </li>
+                       <li>
+                               <a href="http://wiki.ipfire.org/{{ lang }}/addons/start">
+                                       {{ _("List of add-ons") }}
+                               </a>
+                       </li>
+                       <li>
+                               <a href="http://pakfire.ipfire.org/">
+                                       {{ _("Pakfire Build System") }}
+                               </a>
+                       </li>
                </ul>
-       {% end %}
-
-       <p class="links">
-               <a href="http://wiki.ipfire.org/{{ lang }}/configuration/ipfire/pakfire/start">{{ _("How to install a package?") }}</a>
-               &bull;
-               <a href="http://wiki.ipfire.org/{{ lang }}/addons/start">{{ _("Full list of installable addons") }}</a>
-       </p>
-
-       <div class="line"></div>
-
-       <div class="screenshots">
-               <a rel="screens" href="{{ static_url("images/screenshots/en/pakfire/pakfire-overview-1.png") }}"
-                       title="{{ _("Additional packages can be installed on your option.") }}"><img alt="{{ _("Image 1") }}"
-                       src="{{ static_url("images/screenshots/en/pakfire/pakfire-overview-1_thumb.png") }}" />
-               </a>
-               <a rel="screens" href="{{ static_url("images/screenshots/en/pakfire/addon-services-1.png") }}"
-                       title="{{ _("Each service is monitored individually.") }}"><img alt="{{ _("Image 1") }}"
-                       src="{{ static_url("images/screenshots/en/pakfire/addon-services-1_thumb.png") }}" />
-               </a>
        </div>
+
+       <ul class="thumbnails">
+               <li class="span3">
+                       <a class="thumbnail" href="{{ static_url("images/screenshots/en/pakfire/pakfire-overview-1.png") }}">
+                               <img src="{{ static_url("images/screenshots/en/pakfire/pakfire-overview-1_thumb.png") }}" alt="{{ _("Screenshot") }}">
+                       </a>
+               </li>
+               <li class="span3">
+                       <a class="thumbnail" href="{{ static_url("images/screenshots/en/pakfire/addon-services-1.png") }}">
+                               <img src="{{ static_url("images/screenshots/en/pakfire/addon-services-1_thumb.png") }}" alt="{{ _("Screenshot") }}">
+                       </a>
+               </li>
+       </ul>
 {% end block %}
index d244646c38555feb1f7f42c9faaa83f9aa5b1f6e..53a4780ba6b0fdf20f57e14a87f35698c072919b 100644 (file)
                
 {% block title %}{{ _("Web proxy") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Web proxy") }}</h3>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("Web proxy") }}</h1>
+       </div>
 
-       <!-- XXX needs icons -->
-       <!-- XXX needs screenshots -->
-
-       {% if lang == "de" %}
-               <p>
-                       Der Webproxy in IPFire, die Open-Source-Software Squid, ist der Linux und UNIX-Welt nicht unbekannt
-                       und steht unter der GNU General Public License. Nicht nur ISPs, Universitäten, Schulen und grosse
-                       Firmen nutzen diesen Proxy, denn seine Vielfältigkeit, Stabilität und ausgereifte Entwicklung macht
-                       ihn auch für kleine Heimnetzwerke zu einem nutzvollen Partner. Ergänzend zur zustandsgesteuerten
-                       Paketfilterung auf TCP/IP Ebene der Firewall können somit auch Inhalte, die über das HTTP-Protokoll
-                       übertragen werden, analysiert und geregelt werden. Dabei können sowohl  HTTP-, HTTPS- sowie
-                       FTP-Inhalte über Squid angefordert werden.
-               </p>
-               <p>
-                       Ein Proxy-Server hat im Netzwerk eine Vermittlungsfunktion. Er nimmt Anfragen der Anwender entgegen,
-                       lädt Daten aus dem Internet und leitet diese wieder zurück an den Anwender - auf Wunsch ganz
-                       transparent und ohne eine einzige Einstellung am Client. Das Zwischenspeichern von statischen
-                       Inhalten (Caching) und Webseiten kann einen stark genutzten Internetzugang Entlasten und das Surfen
-                       beschleunigen. Das Caching ist aber aufgrund von immer schnelleren Internetzungen in den Hintergrund
-                       geraten und die wichtigere Aufgabe eines Webproxies ist die Regelung von Zugangsberechtigungen (ACLs)
-                       - wobei hier sämtliche Einstellungen bequem über das IPFire-Webinterface gemacht werden können.
-               </p>
-               <ul class="list">
-                       <li>
-                               <strong>Sicherheit:</strong> Der Client fragt nicht selbst, er lässt seinen Proxy fragen.
-                               Die Antwort des Servers geht wieder an den Proxy und nicht an den Client. Der Client tritt
-                               somit nicht selbst in Erscheinung. Ein damit verbundener Angriff würde also in erster Linie
-                               den Proxy und nicht den Client treffen. Es stehen auch Funktionen zum Datenschutz zur Verfügung,
-                               was einen Vorteil gegenüber einem reinen NAT Router darstellt.
-                       </li>
-                       <li>
-                               <strong>Authentifizierung:</strong> Über Access-Listen kann Squid auch veranlasst werden,
-                               Zugriffe nur nach einer Benutzerauthentifizierung zuzulassen. Hierbei stehen LDAP, identd,
-                               Windows, Radius oder Lokale Authentifizierungsmethoden zur Verfügung, womit sich der Webproxy
-                               zum Beispiel an einen Microsoft Windows Domänencontroller anbinden lässt und nur Mitarbeitern
-                               der Zugang zum Internet gewährt werden kann.
-                       </li>
-                       <li>
-                               <strong>Kontrolle der Zugriffe:</strong> Soll der Internetzugriff nur zu speziellen Tageszeiten
-                               oder auch komplett für einzelne oder mehrere Clients eingeschränkt werden, kann dies über die
-                               “Netzwerkbasierten Zugriffskontrolle” geschehen, welche man im Webinterface findet. Ein sinnvoller
-                               Anwendungsbereich dafür sind z.B. Schulen.
-                       </li>
-                       <li>
-                               <strong>Protokollierung:</strong> Da jeder Zugriff über den Proxy protokolliert werden kann, bieten
-                               sich Möglichkeiten zur Überprüfung der Zugriffe im Nachhinein an und es können auch Statistiken
-                               und Abrechnungen erstellt werden. Durch das Analyseprogramm Calamaris lassen sich die Logdateien
-                               in unterschiedlichsten Kriterien über das IPFire Webinterface übersichtlich darstellen.
-                       </li>
-                       <li>
-                               <strong>Bandbreitenmanagement:</strong> Das Downloadmanagement lässt eine Kontrolle der Bandbreite
-                               für spezifizierte Bereiche zu. So können inhaltsbasierte Drosselungen zum Beispiel für Binärdateien,
-                               CD-Images oder Multimediadaten ebenso konfiguriert werden wie eine Download Drosselung der einzelnen
-                               Zonen oder für Hosts in den jeweiligen Zonen.
-                       </li>
-               </ul>
-       {% else %}
-               <p>
-                       IPFire includes a web proxy, which is the open-source software Squid. It is well known in the Linux
-                       and Unix world and often represented. Not only ISPs, universities, schools and large companies use
-                       this proxy because of its diversity, stability and mature development. Even for small home networks
-                       is squid a useful partner. In addition to the stateful paket inspection filtering by the firewall on
-                       the TCP/IP layer, the web content which is either transmitted over HTTP, HTTPS or FTP can be analyzed
-                       and filtered.
-               </p>
-               <p>
-                       For the local network a proxy server has got an intervention function. It takes requests from the user,
-                       forwards it to the Internet and passes the response back to the user - optionally completely transparent
-                       and without only a single adjustment on the client machine. The caching of static content and websites
-                       can speed up a heavily used Internet line and enhance the surfing experience very much, although it is
-                       mostly subordinated because of ever-faster Internet lines. The more important function of the web proxy
-                       is the task of the control of access permissions (ACLs) - all settings can be easily made via the web
-                       interface of IPFire.
-               </p>
-               <ul class="list">
-                       <li>
-                               <strong>Security:</strong> The client does not query web servers by itself, it queries his proxy.
-                               The server response goes back to the proxy and not to the client, which does not even appear on the
-                               Internet. A related attack would therefore primarily reach the proxy and not the client. There are also
-                               functions available for data privacy, which is an advantage in relation to a pure NAT router.
-                       </li>
-                       <li>
-                               <strong>Authentication:</strong> Over the access-lists, the web proxy can also be configured to allow
-                               access only after a user authentication. At this point you have the choice between LDAP, identd,
-                               Windows, Radius or local authentication methods, whereby the web proxy can connect for example to a
-                               Microsoft Windows domain controller and only the employees can be granted access to the Internet.
-                       </li>
-                       <li>
-                               <strong>Authorization:</strong> If the Internet access should be limited to specific times of a day,
-                               or if it should be even completely disabled for a single or multiple clients, is this viable by the
-                               “network-based access control”, which can also be found on the IPFire web interface. A useful scope
-                               therefore can be for example a school classroom.
-                       </li>
-                       <li>
-                               <strong>Logging:</strong> Since each access can be logged over the proxy, possibilities for the
-                               examination of the accesses can be very useful and also statistics and bills can be issued afterwards.
-                               By the analyzer which is called Calamaris, log files can be charted by lots of different criterias
-                               on the IPFire web interface.
-                       </li>
-                       <li>
-                               <strong>Bandwidth management:</strong> The download management allows the control of the bandwidth
-                               for specified zones. Thus, content-based throttling, for example for binary files, CD images or
-                               multimedia content is configurable like bandwidth limitation for individual zones or for each host
-                               in a zone.
-                       </li>
-               </ul>
-       {% end %}
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Der Webproxy in IPFire, die Open-Source-Software Squid, ist der Linux und UNIX-Welt nicht unbekannt
+                                       und steht unter der GNU General Public License. Nicht nur ISPs, Universitäten, Schulen und grosse
+                                       Firmen nutzen diesen Proxy, denn seine Vielfältigkeit, Stabilität und ausgereifte Entwicklung macht
+                                       ihn auch für kleine Heimnetzwerke zu einem nutzvollen Partner. Ergänzend zur zustandsgesteuerten
+                                       Paketfilterung auf TCP/IP Ebene der Firewall können somit auch Inhalte, die über das HTTP-Protokoll
+                                       übertragen werden, analysiert und geregelt werden. Dabei können sowohl  HTTP-, HTTPS- sowie
+                                       FTP-Inhalte über Squid angefordert werden.
+                               </p>
+                               <p>
+                                       Ein Proxy-Server hat im Netzwerk eine Vermittlungsfunktion. Er nimmt Anfragen der Anwender entgegen,
+                                       lädt Daten aus dem Internet und leitet diese wieder zurück an den Anwender - auf Wunsch ganz
+                                       transparent und ohne eine einzige Einstellung am Client. Das Zwischenspeichern von statischen
+                                       Inhalten (Caching) und Webseiten kann einen stark genutzten Internetzugang Entlasten und das Surfen
+                                       beschleunigen. Das Caching ist aber aufgrund von immer schnelleren Internetzungen in den Hintergrund
+                                       geraten und die wichtigere Aufgabe eines Webproxies ist die Regelung von Zugangsberechtigungen (ACLs)
+                                       - wobei hier sämtliche Einstellungen bequem über das IPFire-Webinterface gemacht werden können.
+                               </p>
+                               <ul>
+                                       <li>
+                                               <strong>Sicherheit:</strong> Der Client fragt nicht selbst, er lässt seinen Proxy fragen.
+                                               Die Antwort des Servers geht wieder an den Proxy und nicht an den Client. Der Client tritt
+                                               somit nicht selbst in Erscheinung. Ein damit verbundener Angriff würde also in erster Linie
+                                               den Proxy und nicht den Client treffen. Es stehen auch Funktionen zum Datenschutz zur Verfügung,
+                                               was einen Vorteil gegenüber einem reinen NAT Router darstellt.
+                                       </li>
+                                       <li>
+                                               <strong>Authentifizierung:</strong> Über Access-Listen kann Squid auch veranlasst werden,
+                                               Zugriffe nur nach einer Benutzerauthentifizierung zuzulassen. Hierbei stehen LDAP, identd,
+                                               Windows, Radius oder Lokale Authentifizierungsmethoden zur Verfügung, womit sich der Webproxy
+                                               zum Beispiel an einen Microsoft Windows Domänencontroller anbinden lässt und nur Mitarbeitern
+                                               der Zugang zum Internet gewährt werden kann.
+                                       </li>
+                                       <li>
+                                               <strong>Kontrolle der Zugriffe:</strong> Soll der Internetzugriff nur zu speziellen Tageszeiten
+                                               oder auch komplett für einzelne oder mehrere Clients eingeschränkt werden, kann dies über die
+                                               “Netzwerkbasierten Zugriffskontrolle” geschehen, welche man im Webinterface findet. Ein sinnvoller
+                                               Anwendungsbereich dafür sind z.B. Schulen.
+                                       </li>
+                                       <li>
+                                               <strong>Protokollierung:</strong> Da jeder Zugriff über den Proxy protokolliert werden kann, bieten
+                                               sich Möglichkeiten zur Überprüfung der Zugriffe im Nachhinein an und es können auch Statistiken
+                                               und Abrechnungen erstellt werden. Durch das Analyseprogramm Calamaris lassen sich die Logdateien
+                                               in unterschiedlichsten Kriterien über das IPFire Webinterface übersichtlich darstellen.
+                                       </li>
+                                       <li>
+                                               <strong>Bandbreitenmanagement:</strong> Das Downloadmanagement lässt eine Kontrolle der Bandbreite
+                                               für spezifizierte Bereiche zu. So können inhaltsbasierte Drosselungen zum Beispiel für Binärdateien,
+                                               CD-Images oder Multimediadaten ebenso konfiguriert werden wie eine Download Drosselung der einzelnen
+                                               Zonen oder für Hosts in den jeweiligen Zonen.
+                                       </li>
+                               </ul>
+                       {% else %}
+                               <p>
+                                       IPFire includes a full-fledged web proxy, which is the well-known, open-source software Squid. It is used by ISPs, universities, schools and large companies use because of its diversity, stability and mature development. Even for small home networks, it
+                                       is a useful feature. In addition to the stateful paket inspection (SPI) filtering by the firewall on
+                                       the TCP/IP layer, the web content which is transmitted over HTTP, HTTPS or FTP can be analyzed
+                                       and filtered as well.
+                               </p>
+                               <p>
+                                       For the local network, a proxy server has a useful intervention function. It takes requests from the user,
+                                       forwards it to the Internet and passes the response back to the user - optionally completely transparent
+                                       and without only a single adjustment on the client machine. The caching of static content and websites
+                                       can speed up a heavily used Internet line and enhance the surfing experience very much, although it is
+                                       mostly sub-ordinated because of ever-increasing speed of Internet lines. The more important function of the web proxy
+                                       is the task of the control of access permissions (ACLs) - all settings can be easily made via the web
+                                       interface.
+                               </p>
+                               <ul>
+                                       <li>
+                                               <strong>Security:</strong> The client does not query web servers directly, it queries the proxy first.
+                                               The server response goes back to the proxy and not to the client, which actually does not technically even appear on the
+                                               Internet. A related attack would therefore primarily reach the proxy and not the client. There are also
+                                               functions available for data privacy, which is an significant advantage in comparison to a pure NAT router.
+                                       </li>
+                                       <li>
+                                               <strong>Authentication:</strong> Using the access lists, the web proxy can also be configured to allow
+                                               access only after a user has been authenticated. At this point you have the choice between LDAP, identd,
+                                               Windows, Radius or local authentication methods. The web proxy can connect, for example to a
+                                               Microsoft Windows domain controller and only the users of that Windows domain can be granted access to the Internet.
+                                       </li>
+                                       <li>
+                                               <strong>Authorization:</strong> If the Internet access needs to  be limited to specific time of a day,
+                                               or if it should be even completely disabled for any clients, is this easily configured by the
+                                               “network-based access control”, which can also be found on the IPFire web interface. A useful application for this feature can be for example, a school classroom.
+                                       </li>
+                                       <li>
+                                               <strong>Logging:</strong> Since each access can be logged over the proxy, possibilities for the
+                                               examination of the accessed content can be very useful, as well as statistics and bills can be issued afterwards.
+                                               Through the use of a logfile analyzer named Calamaris, log files can be charted by varying criteria
+                                               on the IPFire web interface.
+                                       </li>
+                                       <li>
+                                               <strong>Bandwidth management:</strong> The download management function allows for control of the bandwidth
+                                               to specified zones. Thus, content-based throttling (for example for binary files, CD images or
+                                               multimedia content) is configurable with bandwidth limitations for individual zones or for each host
+                                               in a particular zone.
+                                       </li>
+                               </ul>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index 7cf15c4ddcf0a9c1513091e787610994b46f1301..76908b9cb5f2df93d685df45cc09323cf3f84228 100644 (file)
@@ -2,67 +2,69 @@
                
 {% block title %}{{ _("Content filter") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Web proxy: Content filter") }}</h3>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("Web proxy: Content filter") }}</h1>
+       </div>
 
-       <!-- XXX needs icons -->
-       <!-- XXX needs screenshots -->
-
-       {% if lang == "de" %}
-               <p>
-                       SquidGuard ist ein URL-Filter, der über den Redirektor-Mechanismus an den Proxy angebunden wird.
-                       Das Herz stellen sogenannte Blacklists dar, die von offizieller Seite erstellt, eine Reihe von
-                       klassifizierten Webseiten enthalten und über das Webinterface automatisch auf dem neuesten Stand
-                       gehalten werden. Es stehen unterschiedliche, freie Quellen für vorgefertigte Blacklists zur Verfügung,
-                       die erlauben unter anderem jugendgefährdende Inhalte, Shopping-, Warez-, Social-Networking- oder
-                       gewaltverherrlichende Seiten zu filtern.
-               </p>
-               <p>
-                       Individuelle Erweiterungen einzelner Domains oder URLs können für Blacklists und ebenso für Whitelists
-                       über das Webinterface eingerichtet werden. IPFire bietet auch einen Blacklist-Editor, der das Editieren
-                       und erstellen eigener Blacklists über das Webinterface anbietet.
-               </p>
-               <p>
-                       Mögliche Anwendungsbereiche für SquidGuard auf dem IPFire sind:
-               </p>
-               <ul class="list">
-                       <li>
-                               Sperren oder Einschränken spezieller Internet Inhalte in Abhängigkeit von Uhrzeit, Benutzer
-                               und verwendetem Rechner.
-                       </li>
-                       <li>
-                               Verhinderung des Zugriffs auf bestimmte (z.B. jugendgefährdende) Seiten.
-                       </li>
-                       <li>
-                               Ausblenden von Werbung.
-                       </li>
-               </ul>
-       {% else %}
-               <p>
-                       SquidGuard is a URL filter which is connected via the redirector mechanism of the proxy.
-                       The heart of SquidGuard are so-called blacklists, created by official site. They contain a number
-                       of classified websites and can be kept up to date automatically. There are different, independent
-                       sources for pre-built blacklists available, which allow among other classes filtering for adult
-                       content, shopping, warez, for social networking or sites containing violence.
-               </p>
-               <p>
-                       Individual extensions of particular domains or URLs can be set up on the IPFire web interface for
-                       blacklists and whitelists as well. IPFire also offers a black list editor, that makes the editing
-                       and creating of own blacklists quiet easy.
-               </p>
-               <p>
-                       Possible areas of application for the SquidGuard on IPFire are:
-               </p>
-               <ul class="list">
-                       <li>
-                               Block or restrict Internet content as a function of time, for user and/or computers.
-                       </li>
-                       <li>
-                               Preventing access to certain (eg. youth-endangering) pages.
-                       </li>
-                       <li>
-                               Hide advertising.
-                       </li>
-               </ul>
-       {% end %}
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       SquidGuard ist ein URL-Filter, der über den Redirektor-Mechanismus an den Proxy angebunden wird.
+                                       Das Herz stellen sogenannte Blacklists dar, die von offizieller Seite erstellt, eine Reihe von
+                                       klassifizierten Webseiten enthalten und über das Webinterface automatisch auf dem neuesten Stand
+                                       gehalten werden. Es stehen unterschiedliche, freie Quellen für vorgefertigte Blacklists zur Verfügung,
+                                       die erlauben unter anderem jugendgefährdende Inhalte, Shopping-, Warez-, Social-Networking- oder
+                                       gewaltverherrlichende Seiten zu filtern.
+                               </p>
+                               <p>
+                                       Individuelle Erweiterungen einzelner Domains oder URLs können für Blacklists und ebenso für Whitelists
+                                       über das Webinterface eingerichtet werden. IPFire bietet auch einen Blacklist-Editor, der das Editieren
+                                       und erstellen eigener Blacklists über das Webinterface anbietet.
+                               </p>
+                               <p>
+                                       Mögliche Anwendungsbereiche für SquidGuard auf dem IPFire sind:
+                               </p>
+                               <ul>
+                                       <li>
+                                               Sperren oder Einschränken spezieller Internet Inhalte in Abhängigkeit von Uhrzeit, Benutzer
+                                               und verwendetem Rechner.
+                                       </li>
+                                       <li>
+                                               Verhinderung des Zugriffs auf bestimmte (z.B. jugendgefährdende) Seiten.
+                                       </li>
+                                       <li>
+                                               Ausblenden von Werbung.
+                                       </li>
+                               </ul>
+                       {% else %}
+                               <p>
+                                       SquidGuard is a URL filter add-on which is connected via the redirector mechanism of the proxy.
+                                       The heart of SquidGuard is something called a "blacklist." This is a content control list created by the official site. These lists contain a number of categorically-classified websites and can be kept up-to-date automatically. There are different, independent
+                                       sources for pre-built blacklists available, which allow among other classes filtering for adult
+                                       content, shopping, warez, social networking, or sites containing violent/abusive content.
+                               </p>
+                               <p>
+                                       Individual extensions for particular domains or URLs can be set up on the IPFire web interface for
+                                       blacklists and whitelists as well. IPFire also offers a black list editor, that makes the editing
+                                       and creating your own blacklists quite easy.
+                               </p>
+                               <p>
+                                       Possible areas of application for the SquidGuard on IPFire are:
+                               </p>
+                               <ul>
+                                       <li>
+                                               Block or restrict Internet content conditionally by time, user and/or computers.
+                                       </li>
+                                       <li>
+                                               Preventing access to certain (eg. youth-endangering) pages and content categories.
+                                       </li>
+                                       <li>
+                                               Hiding advertising.
+                                       </li>
+                               </ul>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index 2c9365b08d82b6fa85b23f208370b7bf5058b0c9..d92ff0344d7be77455ed212bb4a65846fb799a68 100644 (file)
@@ -2,32 +2,33 @@
                
 {% block title %}{{ _("Update accelerator") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Web proxy: Update accelerator") }}</h3>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("Web proxy: Update accelerator") }}</h1>
+       </div>
 
-       <!-- XXX needs icons -->
-       <!-- XXX needs screenshots -->
-
-       {% if lang == "de" %}
-               <p>
-                       Der Update-Accelerator ist ein System, das Updates für z.B. Betriebssysteme massiv beschleunigen
-                       kann. Dazu werden alle heruntergeladenen Updates zwischengespeichert und bei einem weiteren Download
-                       aus dem lokalen Cache ausgeliefert.
-               </p>
-               <p>
-                       Bei Service Packs für Microsoft Windows, die oft einige hundert Megabytes haben, lohnt sich dieses
-                       Speichern massiv, aber auch Virenscanner und andere Produkte profitieren und machen ein Update von
-                       allen Workstations in der Firma zu einer schnell erledigten Aufgabe.
-               </p>
-       {% else %}
-               <p>
-                       The Update Accelerator is a system that can accelerate updates such as for operating systems massively.
-                       Therefore, all downloaded updates are cached and if requested another time, delivered from the cache.
-               </p>
-               <p>
-                       With for example Service Packs for Microsoft Windows, which often are several hundred megabytes,
-                       benefit as well as virus scanners and other products massively and the Update Accelerator makes an
-                       update on all workstations in the company to a quickly completed task. 
-               </p>
-       {% end %}
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Der Update-Accelerator ist ein System, das Updates für z.B. Betriebssysteme massiv beschleunigen
+                                       kann. Dazu werden alle heruntergeladenen Updates zwischengespeichert und bei einem weiteren Download
+                                       aus dem lokalen Cache ausgeliefert.
+                               </p>
+                               <p>
+                                       Bei Service Packs für Microsoft Windows, die oft einige hundert Megabytes haben, lohnt sich dieses
+                                       Speichern massiv, aber auch Virenscanner und andere Produkte profitieren und machen ein Update von
+                                       allen Workstations in der Firma zu einer schnell erledigten Aufgabe.
+                               </p>
+                       {% else %}
+                               <p>
+                                       The Update Accelerator is a feature that can greatly accelerate deploying updates for operating systems.
+                                       All downloaded updates are cached and if requested another time, are delivered from the cache.
+                               </p>
+                               <p>
+                                       For example, Service Packs for Microsoft Windows (which often are several hundred megabytes) are cached for future retrieval, as well as virus scanner definition updates and other product updates which the system automatically identifies. This saves a massive amount of time when updating large amounts of computers (such as corporate networks). 
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index 9f4dd7041fe9671c324c4dc4d46e13a0541b663e..da1f2a4f65d48732a43511af88e9a0578f0f5f04 100644 (file)
@@ -2,32 +2,33 @@
                
 {% block title %}{{ _("Virus scanner") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Web proxy: Transparent virus scanner") }}</h3>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("Web proxy: Transparent virus scanner") }}</h1>
+       </div>
 
-       <!-- XXX needs icons -->
-       <!-- XXX needs screenshots -->
-
-       {% if lang == "de" %}
-               <p>
-                       Das Paketmanagement bietet das Addon “SquidClamAV” zur Erweiterung an. Somit steht dem Webproxy
-                       ein Virenscanner zur Verfügung, der in Echtzeit den Datenverkehr nach Viren mit Hilfe des bekannten
-                       ClamAV prüft.
-               </p>
-               <p>
-                       Der zusätzliche Schutz zu einem herkömmlichen Virenscanner besteht vor allem darin, dass die Dateien
-                       nicht erst auf den Client-Rechner gelangen, bevor der Virenscan ausgeführt werden kann. Potentielle
-                       Schädlinge werden vor dem Download durch SquidClamAV geblockt.
-               </p>
-       {% else %}
-               <p>
-                       The package manager Pakfire offers the addon SquidClamAV - a virus scanner for the web proxy, which
-                       checks in real-time web traffic for viruses using the ClamAV virus definitions.
-               </p>
-               <p>
-                       The additional protection to a conventional virus scanner consists in the fact that the files get not
-                       on the client machine before the virus scan can be performed. So potential parasites are blocked by
-                       SquidClamAV before the actual download.
-               </p>
-       {% end %}
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Das Paketmanagement bietet das Addon “SquidClamAV” zur Erweiterung an. Somit steht dem Webproxy
+                                       ein Virenscanner zur Verfügung, der in Echtzeit den Datenverkehr nach Viren mit Hilfe des bekannten
+                                       ClamAV prüft.
+                               </p>
+                               <p>
+                                       Der zusätzliche Schutz zu einem herkömmlichen Virenscanner besteht vor allem darin, dass die Dateien
+                                       nicht erst auf den Client-Rechner gelangen, bevor der Virenscan ausgeführt werden kann. Potentielle
+                                       Schädlinge werden vor dem Download durch SquidClamAV geblockt.
+                               </p>
+                       {% else %}
+                               <p>
+                                       The package manager Pakfire offers the addon SquidClamAV - a virus scanner for the web proxy. This checks in real-time all web traffic for viruses, utilizing the ClamAV virus definitions and scanning engine.
+                               </p>
+                               <p>
+                                       The additional protection to a conventional virus scanner lies in the fact that the files are transparently checked before ever making it to the client machine before the client machine's virus scan can be performed. So potentially-malicious files are blocked by
+                                       SquidClamAV before the client's actual download.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index ca63a28ac98a8220ba4094de02315c79e0b401c1..46910b73152026346bbcac300ee0a8454b7b4c36 100644 (file)
@@ -2,82 +2,79 @@
                
 {% block title %}{{ _("Quality of Service") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Quality of Service") }}</h3>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("Quality of Service") }}</h1>
+       </div>
 
-       <!-- XXX needs icons -->
-       <!-- XXX needs screenshots -->
-
-       {% if lang == "de" %}
-               <p>
-                       Ein Quality of Service, oder kurz QoS, ist in der Lage die Qualität eines Dienstes über eine
-                       Internetleitung sicherzustellen. Das bedeutet, dass auf einer stark belasteten Internetverbindung
-                       einem Dienst, wie zum Beispiel einem VoIP-Telefonats, ein gewisses Maß an Bandbreite zugesichert
-                       werden kann, damit alle Sprachdaten ohne Verzögerung und verlustfrei übertragen werden können.
-                       Das geht allerdings zu Lasten der anderen Datenströme auf der Leitung, welche es aber durchaus
-                       vertragen, dass Daten langsamer übertragen werden, wie z.B. ein Upload auf einen FTP-Server.
-               </p>
-               <p>
-                       Ein QoS bietet aber nicht nur bei Echtzeitdiensten Vorteile und macht sie besser benutzbar, sondern
-                       bringt auch kleine Verbesserungen mit, die sich gut bemerktbar machen. Dazu gehören unter anderem:
-               </p>
-               <ul class="list">
-                       <li>
-                               <strong>Schnellerer Verbindungsaufbau:</strong> Verbindungen werden immer rasch aufgebaut und
-                               dann nach Dienst eingeordnet und wenn möglich abgebremst. Das verbessert das Arbeitsgefühl.
-                       </li>
-                       <li>
-                               <strong>Stabilere Verbindungen:</strong> da jedem Dienst ein Mindestmaß an Bandbreite zugesichert wird.
-                       </li>
-               </ul>
-               <p>
-                       Für die Klassifizierung der Pakete, die das System wissen lässt mit welcher Art von Daten es zu tun hat,
-                       kommt ein Layer-7-Filter zum Einsatz. Dabei wird auch der Inhalt und nicht nur Quell-Ports, -IPs und
-                       Ziel-Ports und -IPs eines Pakets untersucht. Mit dem Wissen, ob es sich z.B. um einen langen Download
-                       oder um ein Echtzeitprotokoll handelt, kann es Entscheidungen zur optimalen Auslastung der
-                       Internetverbindung treffen.
-               </p>
-               <p>
-                       Zusammengefasst ist das Endergebnis eines QoS, eine Leitung mit geringer Latenzzeit und geringer
-                       Paketverlustrate. Eine Funktion, die man schnell nicht mehr vermissen möchte, wo die Bandbreite knapp ist.
-               </p>
-               <p>
-                       Perfekte Kontrolle über die getätigten Einstellungen, findet man in der graphischen Darstellung der
-                       Leitungsauslastung (siehe Screenshots).
-               </p>
-       {% else %}
-               <p>
-                       Quality of Service (QoS) is able to save the quality of a service on one internetconnection. That
-                       means, that on a high used internetconnection a service, for example VoIP, get a stable size of bandwidth,
-                       to transfer the informations without delay and without loss. This is however at the expense of the other
-                       data flows on the line, which is tolerated but certainly, that data is transmitted more slowly, such as
-                       an upload to an FTP server.
-               </p>
-               <p>
-                       A QoS does not only increase the use of real-time services but also little improvement. For example:
-               </p>
-               <ul class="list">
-                       <li>
-                               <strong>faster dial-up:</strong> Connections establish faster and the services will classified
-                               and maybe slowed down. That increase the work feeling.
-                       </li>
-                       <li>
-                               <strong>stable connections:</strong> because every service gets a minimum size of bandwidth.
-                       </li>
-               </ul>
-               <p>
-                       For the classification of the packets, which lets the system know of what kind of data it's deals,
-                       a Level-7-Filter will be used. Thereby it also analyze the content and not only the source-ports, -IPs
-                       and destination-ports, -IPs of the packets. With the knowledge if it's a long download or a real-time
-                       protocol it could decide about the optimal use of the connection.
-               </p>
-               <p>
-                       To put all in a nutshell, Quality of Service reduces the latency and a less packetloss of an
-                       internet connection. A function that you don't want to miss where a bandwidth is limited.
-               </p>
-               <p>
-                       A perfect control about the setings can be find at the graphical diagram of the performancedate
-                       (see screenshots).
-               </p>
-       {% end %}
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Ein Quality of Service, oder kurz QoS, ist in der Lage die Qualität eines Dienstes über eine
+                                       Internetleitung sicherzustellen. Das bedeutet, dass auf einer stark belasteten Internetverbindung
+                                       einem Dienst, wie zum Beispiel einem VoIP-Telefonats, ein gewisses Maß an Bandbreite zugesichert
+                                       werden kann, damit alle Sprachdaten ohne Verzögerung und verlustfrei übertragen werden können.
+                                       Das geht allerdings zu Lasten der anderen Datenströme auf der Leitung, welche es aber durchaus
+                                       vertragen, dass Daten langsamer übertragen werden, wie z.B. ein Upload auf einen FTP-Server.
+                               </p>
+                               <p>
+                                       Ein QoS bietet aber nicht nur bei Echtzeitdiensten Vorteile und macht sie besser benutzbar, sondern
+                                       bringt auch kleine Verbesserungen mit, die sich gut bemerktbar machen. Dazu gehören unter anderem:
+                               </p>
+                               <ul>
+                                       <li>
+                                               <strong>Schnellerer Verbindungsaufbau:</strong> Verbindungen werden immer rasch aufgebaut und
+                                               dann nach Dienst eingeordnet und wenn möglich abgebremst. Das verbessert das Arbeitsgefühl.
+                                       </li>
+                                       <li>
+                                               <strong>Stabilere Verbindungen:</strong> da jedem Dienst ein Mindestmaß an Bandbreite zugesichert wird.
+                                       </li>
+                               </ul>
+                               <p>
+                                       Für die Klassifizierung der Pakete, die das System wissen lässt mit welcher Art von Daten es zu tun hat,
+                                       kommt ein Layer-7-Filter zum Einsatz. Dabei wird auch der Inhalt und nicht nur Quell-Ports, -IPs und
+                                       Ziel-Ports und -IPs eines Pakets untersucht. Mit dem Wissen, ob es sich z.B. um einen langen Download
+                                       oder um ein Echtzeitprotokoll handelt, kann es Entscheidungen zur optimalen Auslastung der
+                                       Internetverbindung treffen.
+                               </p>
+                               <p>
+                                       Zusammengefasst ist das Endergebnis eines QoS, eine Leitung mit geringer Latenzzeit und geringer
+                                       Paketverlustrate. Eine Funktion, die man schnell nicht mehr vermissen möchte, wo die Bandbreite knapp ist.
+                               </p>
+                               <p>
+                                       Perfekte Kontrolle über die getätigten Einstellungen, findet man in der graphischen Darstellung der
+                                       Leitungsauslastung (siehe Screenshots).
+                               </p>
+                       {% else %}
+                               <p>
+                                       Quality of Service (QoS) is able to save the quality of a service on one internet connection. This
+                                       means that on a highly-utilized internet connection, a service (for example VoIP) gets a stable size of bandwidth,
+                                       to transfer the information without delay and without loss. This is at the expense of the other
+                                       data flows on the line, which is tolerated, albeit transmitted more slowly (such as a file upload to an FTP server).
+                               </p>
+                               <p>
+                                       QoS does not only increase the functionality of real-time services, but also offers a little bit of overall improvement. For example:
+                               </p>
+                               <ul>
+                                       <li>
+                                               <strong>Connections establish much faster.</strong>
+                                               This is works very well on busy links.
+                                       </li>
+                                       <li>
+                                               <strong>Connections are much more stable.</strong>
+                                               Every service gets a minimum, guaranteed amount of bandwidth.
+                                       </li>
+                               </ul>
+                               <p>
+                                       For the classification of the packets, a Level-7-Filter is used. It also analyses the content, as well as the source-ports/IPs, and destination-ports/IPs of the packets. With that analysis, it will decide if it's a long download or a real-time
+                                       protocol and then subsequently determines the optimal use of the connection.
+                               </p>
+                               <p>
+                                       To put all in a nutshell, QoS reduces the latency and packet loss of an
+                                       internet connection. This is certainly a function that you don't want to miss where bandwidth is limited.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index a0eefec9118bf7089fff56581137eefe8461f504..7b352c76aac117562b91ee7911d6f6ec1e6c76a7 100644 (file)
@@ -1,44 +1,59 @@
 {% extends "../../base-feature.html" %}
-               
+
 {% block title %}{{ _("Security") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Security") }}</h3>
+{% block bodyA %}
+       <img src="{{ static_url("images/icons/security.png") }}" class="pull-right" alt="{{ _("Security") }}" />
+
+       <div class="page-header">
+               <h1>{{ _("Security") }}</h1>
+       </div>
 
-       <img src="{{ static_url("images/icons/security.png") }}" class="floatTL" alt="{{ _("Security") }}" />
-       {% if lang == "de" %}
-               <p>
-                       Der Schwerpunkt, der in der Entwicklung von IPFire am meisten wiegt, ist Sicherheit. Aber da
-                       es nicht nur einen Weg gibt Sicherheit zu erlangen, ist es notwendig, dass jeder Administrator
-                       Kenntnis darüber hat, welche Konfiguration am Besten in seiner individuellen Umgebung ist.
-               </p>
-               <p>
-                       IPFire ist die Basis für Sicherheit im Netzwerk. Durch die Fähigkeit das Netzwerk zu separieren,
-                       kann jeder Teil nach seinen Bedürfnissen gesichert werden. In der
-                       Firewall-Sektion gibt es mehr dazu.
-               </p>
-               <p>
-                       Ein weiterer sehr wichtiger Punkt, auf den die Entwickler Wert legen, ist das zügige und
-                       zuverlässige Bereitstellen von Sicherheitsupdates. Da sich IPFire direkt mit dem Internet
-                       verbindet, ist das System primäres Ziel von Hackern und Bots.
-               </p>
-       {% else %}
-               <p>
-                       The primary objective in the development of IPFire is - of course - security. But it doesn't
-                       mean there is only one way to achieve security. Rather, it is more important for every
-                       administrator to understand their environemnt and what security means <em>in that context</em>.
-               </p>
-               <p>
-                       IPFire is the base of security for a local network. It has the power to segment the network based
-                       on their required security level. This makes it easy to create custom policies for each segment.
-                       See the firewall tab for more information.
-               </p>
-               <p>
-                       Part of this focus on security involves the fast and reliable distribution of security updates
-                       of the system and its components. Updates are digitally signed and encrypted, and can be
-                       automatically installed by the Pakfire, the package manager. Since IPFire is directly
-                       connected to the Internet it is a primary target for hackers and bots. Pakfire helps
-                       administrators feel certain they are running the latest security updates and bug fixes.
-               </p>
-       {% end %}
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Das Hauptaugenmerk von IPFire liegt bei Sicherheit.
+                                       Gerade bei einem solch umfangreichen Thema gibt es nicht nur einen einzigen
+                                       Weg, um ein maximales Maß an Sicherheit zu erlangen. Mindestens genauso
+                                       wichtig ist es für den Netwzerkadministrator seine Bedürfnisse zu verstehen
+                                       und entsprechend zu handeln. IPFire stellt für diesen Zweck eine Basis bereit,
+                                       die einzelne Netzwerksegmente nach ihren Sicherheitsleveln unterteilt und erlaubt diese
+                                       anschließend anzupassen (mehr dazu unter <a href="/features/firewall">Firewall</a>).
+                               </p>
+                               <p>
+                                       Eine ebenso hohe Priorität genießt die Sicherheit der modularen Komponenten.
+                                       Aktualisierungen werden digital signiert, verschlüsselt
+                                       und können automatisch über das <a href="/features/pakfire">Pakfire
+                                       Paketmanagement-System</a> installiert werden.
+                                       Typischerweise ist IPFire direkt mit dem Internet verbunden und macht es
+                                       somit zu einem Ziel für Hacker und andere Gefahren.
+                                       Das Paketmanagement-System unterstützt den Administrator darin,
+                                       sicher zu sein, dass alle wichtigen Lücken gestopft und Fehler
+                                       in allen eingesetzten Komponenten beseitigt sind.
+                               </p>
+                       {% else %}
+                               <p>
+                                       The primary objective of IPFire is security.
+                                       As there is of course no one, single way to achieve network security, it is important
+                                       for a network administrator to understand their environment and what the term
+                                       <em>security</em> means in the context of their own network.
+                                       IPFire forms the base of a secure network.
+                                       It has the power to segment networks based on their respective security levels
+                                       and makes it easy to create custom policies that manage each segment
+                                       (see the Firewall page for more information).
+                               </p>
+                               <p>
+                                       Security of the modular components is a top priority.
+                                       Updates are digitally signed and encrypted, as well as can be automatically installed
+                                       by Pakfire (<a href="/features/updates">the IPFire package management system</a>).
+                                       Since IPFire is typically directly connected to the Internet, it is going to be a
+                                       primary target for hackers and other threats.
+                                       The simple Pakfire package manager helps administrators feel confident that
+                                       they are running the latest security updates and bug fixes for all of the
+                                       components they utilize.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index 075c64795e8b4cb3281ee250bffe4e3f4f729ed2..7e3e731f362b813423cce3046027e291eee905ad 100644 (file)
@@ -2,74 +2,76 @@
 
 {% block title %}{{ _("Updates") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Updates") }}</h3>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("Updates") }}</h1>
+       </div>
 
-       {% if lang == "de" %}
-               <p>
-                       IPFire basiert auf Linux, dem besten Open-Source-Kernel, den es gibt.
-                       Ebenso basiert IPFire <strong>nicht</strong> auf irgendeiner Distribution
-                       wie z.B. Knoppix auf Debian basiert sondern wird aus den Sourcen einer
-                       großen Anzahl von Paketen gebaut. Dieser Prozess der Entwicklung kostet
-                       viel Zeit, gibt allerdings die Möglichkeit nicht von Updatezyklen anderer
-                       abzuhängen. Dagegen hat es den Vorteil besonders zuverlässige Versionen
-                       eines Softwarepakets auszuwählen und den größten Teil der Distribution
-                       daraus aufzubauen. Der Kernel hingegen wird laufend aktualisiert und
-                       gepatcht um aktuelle und eine möglichst breite Palette an Hardware zu
-                       unterstützen - und viel wichtiger noch Sicherheitsupdates zeitnah zur
-                       Verfügung zu stellen.
-               </p>
-
-               <p>
-                       Das macht IPFire zu einem sehr leistungsfähigen und gleichzeitig
-                       gehärtetem System.
-               </p>
-
-               <p>
-                       Um dies beizubehalten und kompatibel zu der Vielzahl an Hardware auf
-                       dem Markt zu bleiben, werden sogenannte “Core Updates” in einem Abstand
-                       von etwa vier Wochen herausgegegen, um gesammelte Patches auszuliefern.
-                       Im Falle eines kritischen Sicherheitsproblems in einem der Pakete gibt
-                       es Sicherheitsupdates innerhalb weniger als 24 Stunden.
-               </p>
-
-               <p>
-                       Alle Updates können mittels des Paketmanagements eingespielt werden
-                       und die Benutzer werden per Email über eben diese informiert. So ist
-                       in allen Fällen das Update nach einem einzigen Klick installiert und
-                       das System ist wieder gesichert im Internet.
-               </p>
-       {% else %}
-               <p>
-                       IPFire is based on Linux, which is the best Open Source kernel around.
-                       Additionally, IPFire is <strong>not</strong> based on any other
-                       distribution like Knoppix is on Debian. It is compiled from the sources
-                       of every single package. This comsumes a lot of work, but finally
-                       gives the opportunity to not rely on the update cycles of others.
-                       The advantages we gain is that we are able to select very stable
-                       versions of software and build the distribution from them. For example
-                       is the most part of the distribution quite well tested and long maintained
-                       - in contrast to the kernel which is very recent and regularly updated
-                       with patches to support as much hardware as possible and more importantly
-                       fix security errors.
-               </p>
-
-               <p>
-                       This is what makes IPFire a very strong and hardened system.
-               </p>
-
-               <p>
-                       To keep up that strength and be prepared for new hardware, we give
-                       out the so called Core Updates which are issued in about every four
-                       weeks and updating collected fixes. If there is a security emergency,
-                       we provide updates in less than a day to overcome zero-day holes in
-                       the system.
-               </p>
-
-               <p>
-                       All of the updates can be installed by the package management system
-                       and users are notified by mail. So in all cases, the update is just
-                       a simple click and your system is running safe again.
-               </p>
-       {% end %}
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       IPFire basiert auf Linux, dem besten Open-Source-Kernel, den es gibt.
+                                       Ebenso basiert IPFire <strong>nicht</strong> auf irgendeiner Distribution
+                                       wie z.B. Knoppix auf Debian basiert sondern wird aus den Sourcen einer
+                                       großen Anzahl von Paketen gebaut. Dieser Prozess der Entwicklung kostet
+                                       viel Zeit, gibt allerdings die Möglichkeit nicht von Updatezyklen anderer
+                                       abzuhängen. Dagegen hat es den Vorteil besonders zuverlässige Versionen
+                                       eines Softwarepakets auszuwählen und den größten Teil der Distribution
+                                       daraus aufzubauen. Der Kernel hingegen wird laufend aktualisiert und
+                                       gepatcht um aktuelle und eine möglichst breite Palette an Hardware zu
+                                       unterstützen - und viel wichtiger noch Sicherheitsupdates zeitnah zur
+                                       Verfügung zu stellen.
+                               </p>
+                               <p>
+                                       Das macht IPFire zu einem sehr leistungsfähigen und gleichzeitig
+                                       gehärtetem System.
+                               </p>
+                               <p>
+                                       Um dies beizubehalten und kompatibel zu der Vielzahl an Hardware auf
+                                       dem Markt zu bleiben, werden sogenannte "Core Updates" in einem Abstand
+                                       von etwa vier Wochen herausgegegen, um gesammelte Patches auszuliefern.
+                                       Im Falle eines kritischen Sicherheitsproblems in einem der Pakete gibt
+                                       es Sicherheitsupdates innerhalb weniger als 24 Stunden.
+                               </p>
+                               <p>
+                                       Alle Updates können mittels des Paketmanagementsystems eingespielt werden
+                                       und die Benutzer werden per Email über eben diese informiert. So ist
+                                       in allen Fällen das Update nach einem einzigen Klick installiert und
+                                       das System ist wieder gesichert im Internet.
+                               </p>
+                       {% else %}
+                               <p>
+                                       IPFire is based on Linux, which is the best Open Source kernel around.
+                                       Additionally, IPFire is <strong>not</strong> based on any other
+                                       distribution like Knoppix is on Debian. It is compiled from the sources
+                                       of every single package. This comsumes a lot of work, but finally
+                                       gives the opportunity to not rely on the update cycles of others.
+                                       The advantages we gain is that we are able to select very stable
+                                       versions of software and build the distribution from them. For example
+                                       is the most part of the distribution quite well tested and long maintained
+                                       - in contrast to the kernel which is very recent and regularly updated
+                                       with patches to support as much hardware as possible and more importantly
+                                       fix security errors.
+                               </p>
+                               <p>
+                                       This is what makes IPFire a very strong and hardened system.
+                               </p>
+                               <p>
+                                       To keep up that strength and be prepared for new
+                                       <a href="/features/hardware">hardware</a>, we give
+                                       out the so called <strong>Core Updates</strong> which are issued in
+                                       about every four weeks and updating collected fixes. If there is a
+                                       security emergency,     we provide updates in less than a day to overcome
+                                       zero-day holes in the system.
+                               </p>
+                               <p>
+                                       All of the updates can be installed by the
+                                       <a href="/features/pakfire">package management system</a>
+                                       and users are notified by mail. So in all cases, the update is just
+                                       a simple click and your system is running safe again.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index 63ca3fd74cf20d36997f41267500b3f7e72ce520..0c78c647ff0b14508cdebee49eeef99c434adfe5 100644 (file)
                
 {% block title %}{{ _("Virtualization") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Virtualization") }}</h3>
-
-       <img src="{{ static_url("images/icons/virtualization.png") }}" class="floatTL" alt="{{ _("Virtualization") }}" />
-       {% if lang == "de" %}
-               <p>
-                       IPFire kann, als virtueller Gast, auf folgenden Lösungen betrieben werden:
-               </p>
-               <ul class="list">
-                       <li><a href="http://www.linux-kvm.org">KVM</a>/Qemu</li>
-                       <li>Xen (paravirtualisiert oder im vollvirtualisieren Modus)</li>
-                       <li>VMWare (Workstation, vSphere, ESXi, ...)</li>
-                       <li>Virtualbox</li>
-               </ul>
-               <br class="clear" />
-               <p>
-                       Um eine hohe Leistung auf allen Systemen zu gewährleisten, werden
-                       zahlreiche Frontent-Treiber mitgeliefert.
-               </p>
-       {% else %}
-               <p>
-                       IPFire can be run as a virtual guest on the following hypervisors:
-               </p>
-               <ul class="list">
-                       <li><a href="http://www.linux-kvm.org">KVM</a>/Qemu</li>
-                       <li>Xen (paravirtualized and fully virtualized mode)</li>
-                       <li>VMWare (Workstation, vSphere, ESXi, ...)</li>
-                       <li>Virtualbox</li>
-               </ul>
-               <br class="clear" />
-               <p>
-                       It brings many frontend drivers for high performance to all the hypervisors.
-               </p>
-       {% end %}
-
-       <div class="line"></div>
-
-       <div class="screenshots">
-               <a rel="screens" href="{{ static_url("images/screenshots/en/virtualization/virt-manager-1.png") }}"
-                       title="{{ _("IPFire runs perfectly in virtual environments.") }}"><img alt="{{ _("Image 1") }}"
-                       src="{{ static_url("images/screenshots/en/virtualization/virt-manager-1_thumb.png") }}" />
-               </a>
+{% block bodyA %}
+       <img src="{{ static_url("images/icons/virtualization.png") }}" class="pull-right" alt="{{ _("Virtualization") }}" />
+       <div class="page-header">
+               <h1>{{ _("Virtualization") }}</h1>
        </div>
+
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       IPFire bringt einige Frontend-Treiber für High-Performance-Virtualisierung
+                                       mit sich und arbeitet hervorragend als Gast auf den folgenden
+                                       Virtualisierungsplattformen.
+                               </p>
+
+                               <h2>Unterstützte Hypervisoren</h2>
+                               <h3>KVM</h3>
+                               <p>
+                                       <a href="http://www.linux-kvm.org">KVM</a> ist die Abkürzung
+                                       für Kernel-based Virtual Machine und wird von
+                                       <a href="http://www.redhat.com">Red Hat Inc.</a> entwickelt.
+                                       Es ist derzeit am häufigsten eingesetzte freie Virtualisierungslösung
+                                       und löst Xen zunehmend ab.
+                               </p>
+                               <p>
+                                       Der IPFire-Kernel verfügt über die <em>virtio</em> Module,
+                                       welche hervorragende Leistung bei wenig Virtualisierungsoverhead
+                                       bieten.
+                               </p>
+
+                               <h3>VMware</h3>
+                               <p>
+                                       IPFire arbeitet auf verschiedenen VMware Produkten wie
+                                       <em>vSphere</em>, <em>ESXi</em> und <em>VMware workstation</em>.
+                                       Das optionale Paket <em>open-vm-tools</em> verbessert die
+                                       Integration zusätzlich.
+                               </p>
+
+                               <h3>Xen</h3>
+                               <p>
+                                       Xen war der de-facto Open-Source-Hypervisor, wird
+                                       allerdings immer öfter durch KVM ersetzt.
+                               </p>
+                               <p>
+                                       IPFire bringt für den Einsatz auf einem Xen-Host einen
+                                       paravirtualisierten Kernel mit.
+                                       Die Installation ist sehr einfach, da bereits ein
+                                       vorinstalliertes Image auf der Downloadseite heruntergeladen
+                                       werden kann.
+                               </p>
+
+                               <h3>Andere</h3>
+                               <p>
+                                       IPFire ist nicht auf die oben genannten Lösungen beschränkt.
+                                       Ebenso läuft die Distribution auch unter <em>Qemu</em>,
+                                       <em>Microsoft Hyper-V</em> und <em>Oracle Virtualbox</em>.
+                               </p>
+
+                               <h3>Ein Hinweis zu Virtualisierung</h3>
+                               <p>
+                                       Virtualisierung hat Vorteile, allerdings nicht ohne Nachteile.
+                                       Es besteht die Möglichkeit, dass die VM-Container-Sicherheit
+                                       umgangen werden kann und somit ein Angreifer Zugang über die
+                                       virtuelle Maschine heraus erlangen kann.
+                                       Aus diesen Gründen empfehlen wir nicht IPFire virtuell
+                                       in produktiven Umgebungen einzusetzen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       IPFire brings many front-end drivers for high-performance virtualization
+                                       and can be run as virtual guest operating system on the following
+                                       virtualization platforms.
+                                       It has also been optimized to some of the mostly distributed ones to bring
+                                       the best possible performance without impacting the hardware very much.
+                               </p>
+
+                               <h2>Supported hypervisors</h2>
+                               <h3>KVM</h3>
+                               <p>
+                                       <a href="http://www.linux-kvm.org">KVM</a> is short for
+                                       Kernel-based Virtual Machine and is developed by
+                                       <a href="http://www.redhat.com">Red Hat Inc.</a>.
+                                       It is becoming the most advanced hypervisor and succeeding Xen, which
+                                       has been used so far.
+                               </p>
+                               <p>
+                                       IPFire is coming with the <em>virtio</em> kernel modules, that have best
+                                       performance due to very less virtualization overhead.
+                               </p>
+
+                               <h3>VMware</h3>
+                               <p>
+                                       IPFire runs on different VMware products like <em>vSphere</em>,
+                                       <em>ESXi</em> and <em>VMware workstation</em>. The additional package
+                                       <em>open-vm-tools</em> offers tools for a better integration.
+                               </p>
+
+                               <h3>Xen</h3>
+                               <p>
+                                       Xen has recently been the de-facto Open Source hypervisor but is now
+                                       succeeded by KVM.
+                               </p>
+                               <p>
+                                       IPFire can optionally be run with a paravirtualized kernel, which has very
+                                       less virtualization overhead as well. To make the installation very easy,
+                                       a pregenerated Xen image can be downloaded from the download page.
+                               </p>
+
+                               <h3>Others</h2>
+                               <p>
+                                       IPFire is not limited to the hypervisors described above. It runs perfectly on
+                                       <em>Qemu</em>, <em>Microsoft Hyper-V</em> or <em>Oracle VirtualBox</em>, too.
+                               </p>
+
+                               <h3>A note on virtualization</h3>
+                               <p>
+                                       Virtualization does have advantages, but it is not without disadavantages.
+                                       There is always the possibility that the VM container security can be
+                                       bypassed in some way and a hacker can gain access beyond the VM.
+                                       Because of this, it is not suggested to use IPFire as a virtual machine
+                                       in a production-level environment.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
+
+       <hr>
+
+       <ul class="thumbnails">
+               <li class="span3">
+                       <a class="thumbnail" href="{{ static_url("images/screenshots/en/virtualization/virt-manager-1.png") }}">
+                               <img src="{{ static_url("images/screenshots/en/virtualization/virt-manager-1_thumb.png") }}" alt="{{ _("Screenshot") }}">
+                       </a>
+               </li>
+       </ul>
 {% end block %}
index 6a81691833c8b7ecb6ff8f3bea8c96d5de8037ab..0a6c9c0d8f12b2a6f70b97e85599dbd78969092a 100644 (file)
@@ -2,58 +2,49 @@
                
 {% block title %}{{ _("VPN") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("VPN") }}</h3>
+{% block bodyA %}
+       <img src="{{ static_url("images/icons/vpn.png") }}" class="pull-right" alt="{{ _("VPN") }}" />
+       <div class="page-header">
+               <h1>
+                       {{ _("VPN") }}
+                       <small>{{ _("Virtual Private Networks") }}</small>
+               </h1>
+       </div>
+
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       IPFire kann zu einem VPN-Gateway (virtal private network - virtuelles, privates Netzwerk)
+                                       ausgebaut werden, welches Personen mit unterschiedlichem Standort untereinander verbindet.
+                                       Dies können zum Beispiel Mitarbeiter, Freunde oder Personen sein mit denen man Daten sicher
+                                       austauschen möchte, aber auch eine Filiale, Außenstelle, wichtige Kunden oder andere Unternehmen
+                                       mit denen kommuniziert wird.
+                               </p>
+                               <p>
+                                       Um sich über verschiedene Technologien verbinden zu können unterstützt IPFire die VPN Protokolle
+                                       IPsec und OpenVPN. Dies erlaubt dem Administrator große Freiheiten bei der Konfiguration des VPNs.
+                                       Die Verwendung dieser Protokolle erlaubt es IPFire auch sich mit VPN Endpunkten verschiedenster
+                                       Hardwarehersteller, wie Cisco, Juniper, Checkpoint, etc. zu verbinden.
+                               </p>
+                       {% else %}
+                               <p>
+                                       IPFire also includes functionality to create virtual private networks (VPN).
+                                       A VPN is a gateway which connects remote networks to the local one using an
+                                       encrypted link.
+                                       Uses for a VPN include business connections to branch offices or datacenters,
+                                       as well as providing traveling staff with a secure portal to the corporate network.
+                               </p>
+                               <p>
+                                       For maximum flexibility, IPFire uses both IPsec and OpenVPN protocols,
+                                       giving administrators maximum flexibility when configuring their VPN.
+                                       Use of these protocols allows IPFire to connect to a variety of VPN endpoint
+                                       devices by manufacturers such as Cisco, Juniper, Checkpoint, etc. 
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 
-       <img src="{{ static_url("images/icons/vpn.png") }}" class="floatTL" alt="{{ _("VPN") }}" />
-       {% if lang == "de" %}
-               <p>
-                       IPFire kann zu einem VPN-Gateway (virtal private network - virtuelles, privates Netzwerk)
-                       ausgebaut werden, welches Personen mit unterschiedlichem Standort untereinander verbindet.
-                       Dies können zum Beispiel Mitarbeiter, Freunde oder Personen sein mit denen man Daten sicher
-                       austauschen möchte, aber auch eine Filiale, Außenstelle, wichtige Kunden oder andere Unternehmen
-                       mit denen kommuniziert wird.
-               </p>
-               <p>
-                       Um sich über verschiedene Technologien verbinden zu können verfügt IPFire über folgende
-                       Implementierungen:
-               </p>
-               <ul class="list">
-                       <li>
-                               <strong>IPSec</strong>, das Netzwerke mit anderen Netzwerken transparent verbindet und
-                               gut geeignet ist für permanente Verbindungen.
-                       </li>
-                       <li>
-                               Für sogenannte <em>Roadwarrior-Clients</em> (z.B. Notebooks) gibt es <strong>OpenVPN</strong>
-                               um in verschiedenen Situationen ad hoc eine sichere Verbindung herzustellen.
-                       </li>
-               </ul>
-               <br class="clear" />
-               <p>
-                       Mit dieser Software, lässt sich IPFire leicht mit Routern oder VPN-Gateways von
-                       <a href="http://www.cisco.com" target="_blank">Cisco</a>,
-                       <a href="http:///www.juniper.net" target="_blank">Juniper</a>,
-                       <a href="http://www.checkpoint.com" target="_blank">Checkpoint</a>,
-                       andere Linux-basierten Implementierungen verbinden und vielem mehr...
-               </p>
-       {% else %}
-               <p>
-                       IPFire may be enhanced to include a virtual private network (VPN) gateway which connects
-                       remote people and places to the local network using an encrypted link. This could be staff,
-                       friends, or anyone you'd like to share data with in a secure way. Businesses use VPNs to
-                       connect branch offices, datacenters, corporate partners, and to provide traveling staff
-                       with a portal into the corporate network.
-               </p>
-               <p>
-                       IPFire uses both the IPSEC and OpenVPN protocols, affording the maximum in flexibility
-                       when configuring your VPN. These implementations allow IPFire connect to VPN endpoint
-                       devices by:
-                       <a href="http://www.cisco.com" target="_blank">Cisco</a>,
-                       <a href="http:///www.juniper.net" target="_blank">Juniper</a>,
-                       <a href="http://www.checkpoint.com" target="_blank">Checkpoint</a>,
-                       NetGear, or any Linux based implementation.
-               </p>
-       {% end %}
        <p class="links">
                <!-- XXX a link to the wiki goes here -->
                <a href="http://wiki.ipfire.org">{{ _("Learn more about configuring a VPN connection") }}</a>
index 6428ce45d724c0de0b233c17bb89d1e0afa93027..6a08144c69cf852e92380ab933e8ddb71e9358c5 100644 (file)
@@ -1,72 +1,70 @@
 {% extends "../../../base-feature.html" %}
                
-{% block title %}{{ _("IPsec") }}{% end block %}
+{% block title %}{{ _("VPN") }}: {{ _("IPsec") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("VPN: IPsec") }}</h3>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("VPN: IPsec") }}</h1>
+       </div>
 
-       <!-- XXX needs icons -->
-       <!-- XXX needs screenshots -->
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       IPsec ist ein Standard, der unter den VPN-Technologien weit bekannt
+                                       ist und im IPv6-Protokoll entwickelt wurde. Da IPv6 allerdings so
+                                       langsam seinen Weg in die Welt gefunden hat, begannen Einige damit
+                                       das IPsec-Protokoll auf IPv4 zurückzuportieren.
+                               </p>
 
-       {% if lang == "de" %}
-               <p>
-                       IPsec ist ein Standard, der unter den VPN-Technologien weit bekannt
-                       ist und im IPv6-Protokoll entwickelt wurde. Da IPv6 allerdings so
-                       langsam seinen Weg in die Welt gefunden hat, begannen Einige damit
-                       das IPsec-Protokoll auf IPv4 zurückzuportieren.
-               </p>
+                               <p>
+                                       Im Gegensatz zu den ebenfalls eingesetzten SSL-VPNs gilt IPsec als
+                                       schwer einzurichten. Diese Hürde wurde in IPFire beseitigt - zur
+                                       Verfügung steht ein einfach zu bedienendes User-Interface,
+                                       in welches man einige Konfigurationsparameter eingibt, welches dann
+                                       den Rest übernimmt. Ebenso wird automatsich dafür gesorgt, dass die
+                                       Tunnel geöffnet sind und, dass diese von allein wieder aufgebaut werden,
+                                       sollte einmal ein Tunnelpartner seine Internetverbindung verlieren.
+                                       So wird eine sichere und stabile Verbindung zu Filialen, Partnern oder
+                                       dem Zuhause innerhalb von Minuten eingerichtet und sie ist auch
+                                       kompatibel zu denen anderer Anbieter.
+                               </p>
 
-               <p>
-                       Im Gegensatz zu den ebenfalls eingesetzten SSL-VPNs gilt IPsec als
-                       schwer einzurichten. Allerdings wurde diese Hürde in IPFire beseitigt
-                       und zur Verfügung steht ein einfach zu bedienendes User-Interface,
-                       in welches man einige Konfigurationsparameter eingibt, was aber dann
-                       den Rest übernimmt. Ebenso wird automatsich dafür gesorgt, dass die
-                       Tunnel geöffnet sind und, dass sie von allein wieder aufgebaut werden,
-                       wenn einmal ein Tunnelpartner seine Internetverbindung verlieren sollte.
-                       So wird eine sichere und stabile Verbindung zu Filialen, Partnern oder
-                       dem Zuhause innerhalb von Minuten eingerichtet und sie ist auch
-                       kompatibel zu denen anderer Anbieter.
-               </p>
+                               <p>
+                                       Der hohe Grad der Kompatibilität zu anderen Herstellern wird durch
+                                       die Verwendung der freien Implementierung 
+                                       <a href="http://www.strongswan.org" target="_blank">strongSwan</a>
+                                       möglich, welches von Andreas Steffen, einem Professor für Sicherheit
+                                       in der Kommunikationstechnik und Leiter des Instituts für
+                                       Internetechnologien und -applikationen an der Universität der
+                                       angewandten Wissenschaften Rapperswil in der Schweiz entwickelt wird.
+                                       StrongSwan arbeitet besonders gut mit Produkten wie Microsoft Windows 7,
+                                       Microsoft Windows Vista und Mac OS X zusammen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       IPsec is a widely-deployed VPN solution that was originally developed to be used in conjunction with IPv6. Because it was so secure and IPv6 was so slowly deployed, it was backported to secure IPv4 traffic as well.
+                               </p>
 
-               <p>
-                       Der hohe Grad der Kompatibilität zu anderen Herstellern wird durch
-                       die Verwendung von der freien Implementierung 
-                       <a href="http://www.strongswan.org" target="_blank">strongSwan</a>
-                       möglich, welches von Andreas Steffen, einem Professor für Sicherheit
-                       in der Kommunikationstechnik und Leiter des Instituts für
-                       Internetechnologien und -applikationen an der Universität der
-                       angewandten Wissenschaften Rapperswil in der Schweiz entwickelt wird.
-                       StrongSwan arbeitet besonders gut mit Produkten wie Microsoft Windows 7,
-                       Microsoft Windows Vista und Mac OS X zusammen.
-               </p>
-       {% else %}
-               <p>
-                       IPsec is a widely deployed VPN technology that was originally developed
-                       in conjunction with IPv6. Because it was so secure and IPv6 was so
-                       slowly deployed, it was backported to secure IPv4 traffic.
-               </p>
+                               <p>
+                                       In contrast to SSL-VPNs, IPsec is hard to set-up. In IPFire, we
+                                       thought about how to make this technology easy-to-use and as a result, there
+                                       is a web user interface that handles all settings and takes care of the rest
+                                       of the configuration for you. It also keeps the tunnels alive and
+                                       re-establishes them automatically after a remote site has lost the connection. A secure connection to a branch office, a
+                                       business partner, or a home office is done within a couple of minutes
+                                       and compatible with all other implementations.
+                               </p>
 
-               <p>
-                       In contrast to SSL-VPNs, IPsec is hard to set-up. But in IPFire, we
-                       thought about how to make this technology easy to use and so there
-                       is a web user interface that awaits all settings and handles the rest
-                       of the configuration for you. It keeps the tunnels alive and
-                       re-establishes them automatically after a remote site has lost its
-                       internet connection. A secure connection to a branch office, a
-                       business partner or a home office is done within a couple of minutes
-                       and compatible with all other implementations.
-               </p>
-
-               <p>
-                       This high level of compatibility is possible by using the free
-                       implementation called
-                       <a href="http://www.strongswan.org" target="_blank">strongSwan</a>,
-                       that is maintained by Andreas Steffen, who is a professor for security
-                       in communications and head of the Institute for Internet Technologies
-                       and Applications at the University of Applied Sciences Rapperswil in
-                       Switzerland. StrongSwan also works with products like Microsoft
-                       Windows 7, Microsoft Windows Vista and Mac OS X.
-               </p>
-       {% end %}
+                               <p>
+                                       This high-level of compatibility is achieved by using the free
+                                       implementation called
+                                       <a href="http://www.strongswan.org" target="_blank">strongSwan</a>. It is maintained by Andreas Steffen, who is a professor for security in communications and head of the Institute for Internet Technologies
+                                       and Applications at the University of Applied Sciences Rapperswil, in
+                                       Switzerland. StrongSwan also works with all current, major operating systems, such as Microsoft
+                                       Windows 7, Microsoft Windows Vista and Mac OS X.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index d9f30e0a61ac4f312f7fde8d36cc14d6a0f0af2c..d31affae2a79315a48169432aca358b5f82b3dea 100644 (file)
@@ -1,69 +1,54 @@
 {% extends "../../../base-feature.html" %}
                
-{% block title %}{{ _("OpenVPN") }}{% end block %}
+{% block title %}{{ _("VPN") }}: {{ _("OpenVPN") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("VPN: OpenVPN") }}</h3>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("VPN: OpenVPN") }}</h1>
+       </div>
 
-       <!-- XXX needs icons -->
-       <!-- XXX needs screenshots -->
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       Unter den OpenSoure-SSL-VPNs ist OpenVPN ein häufig angetroffener und
+                                       beliebter Vertreter, dessen einfache Konfiguration über das IPFire-
+                                       Webinterface noch einmal erleichtert wird. Die Firewall-Einstellungen
+                                       werden von IPFire automatisch geregelt, ebenso werden die benötigten
+                                       Zertifikate mit wenigen Mausklicks erzeugt und können als kompaktes
+                                       Client-Paket heruntergeladen, verteilt und mit einem weiteren Klick
+                                       ausgeführt werden.
+                               </p>
 
-       {% if lang == "de" %}
-               <p>
-                       Unter den OpenSoure-SSL-VPNs ist OpenVPN ein häufig angetroffener und
-                       beliebter Vertreter, dessen einfache Konfiguration über das IPFire-
-                       Webinterface noch einmal erleichtert wird. Die Firewall-Einstellungen
-                       werden von IPFire automatisch geregelt, ebenso werden die benötigten
-                       Zertifikate mit wenigen Mausklicks erzeugt und können als kompaktes
-                       Client-Paket heruntergeladen, verteilt und mit einem weiteren Klick
-                       ausgeführt werden.
-               </p>
+                               <p>
+                                       Durch die hohe Kompatibilität der Software zu anderen Betriebssystemen
+                                       eignet sich OpenVPN zur Anbindung sogenannter Roadwarrior-Clients und
+                                       Ad-Hoc-Verbindungen sehr gut. Eine leicht zu konfigurierende, auf
+                                       Zertifikaten basierende, verschlüsselte Anbindung aus dem Internet
+                                       auf die Firmendaten oder das Zuhause liegende Netzwerk kann nicht
+                                       nur über Notebooks, sondern unter anderem auch über PDAs, Smartphones
+                                       oder Tablets hergestellt werden.
+                               </p>
 
-               <p>
-                       Durch die hohe Kompatibilität der Software zu anderen Betriebssystemen
-                       eignet sich OpenVPN zur Anbindung sogenannter Roadwarrior-Clients und
-                       Ad-Hoc-Verbindungen sehr gut. Eine leicht zu konfigurierende, auf
-                       Zertifikaten basierende, verschlüsselte Anbindung aus dem Internet
-                       auf die Firmendaten oder das Zuhause liegende Netzwerk kann nicht
-                       nur über Notebooks, sondern unter anderem auch über PDAs, Smartphones
-                       oder Tablets hergestellt werden.
-               </p>
-
-               <p>
-                       Sicherheit und eine geeignete Verschlüsselung ist auch im lokalen
-                       Netzwerk ein wichtiges Thema. IPFire bietet über sein Webinterface
-                       die Möglichkeit an, WLAN-Verbindungen über Zertifikate zu schützen,
-                       was einen klaren Vorteil gegenüber den gängigen Router-Verschlüsselungen
-                       wie WEP, WPA oder sogar WPA2 bedeutet, da Zertifikate gegenüber den
-                       PSKs (Private Shared Keys) einen Bruteforce-Angriff quasi unmöglich
-                       machen.
-               </p>
-       {% else %}
-               <p>
-                       Under the OpenSoure-SSL-VPNs OpenVPN is a frequently encountered and
-                       popular representative, its ease of configuration will be again easier
-                       via IPFires web interface. The firewall settings will be controlled
-                       by IPFire automatically, likewise the required certificates will be
-                       generated with a few mouse clicks and can be downloaded and distributed
-                       as a compact-client package.
-               </p>
-
-               <p>
-                       Due to the high compatibility of the software to other operating systems
-                       are suitable very well for linking OpenVPN to so called roadwarrior
-                       clients and ad-hoc connections. An easy to configure, based on certificates,
-                       encrypted connection from the Internet to the corporate data or the
-                       remote network at home can be made not only on laptops, but also
-                       including PDAs, smartphones or tablets.
-               </p>
-
-               <p>
-                       Security and a appropriated encryption are also in the local network
-                       an important issue. IPFire offers via his web interface, the ability
-                       to protect Wi-Fi connections through certificates, which is a clear
-                       advantage over the conventional router encryptions such as WEP, WPA
-                       or even WPA2 PSKs (Private Shared Keys), because a brute force attack
-                       against certificates is virtually impossible.
-               </p>
-       {% end %}
+                               <p>
+                                       Sicherheit und eine geeignete Verschlüsselung ist auch im lokalen
+                                       Netzwerk ein wichtiges Thema. IPFire bietet über sein Webinterface
+                                       die Möglichkeit an, WLAN-Verbindungen über Zertifikate zu schützen,
+                                       was einen klaren Vorteil gegenüber den gängigen Router-Verschlüsselungen
+                                       wie WEP, WPA oder sogar WPA2 bedeutet, da Zertifikate gegenüber den
+                                       PSKs (Private Shared Keys) einen Bruteforce-Angriff quasi unmöglich
+                                       machen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       Under the OpenSoure-SSL-VPNs, OpenVPN is a frequently-encountered and perhaps, the most 
+                                       popular representative. The relative ease of configuration has again, been made easier
+                                       by the IPFire web interface. The firewall settings are controlled
+                                       by IPFire automatically, as well as the required certificates will be
+                                       generated with a few mouse clicks and can be downloaded and distributed
+                                       as a very compact client package. Clients can be anything, such as other routers, laptops/desktops, PDAs, smartphones or tablets.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
index 1d6e4bcffef1724c3e654e139bce7970dcc12859..9550759c08872663962720cb2fc45c3f64897173 100644 (file)
@@ -2,38 +2,41 @@
                
 {% block title %}{{ _("Wireless Access Point") }}{% end block %}
 
-{% block content %}
-       <h3>{{ _("Wireless Access Point") }}</h3>
+{% block bodyA %}
+       <div class="page-header">
+               <h1>{{ _("Wireless Access Point") }}</h1>
+       </div>
 
-       <!-- XXX needs icons -->
-       <!-- XXX needs screenshots -->
-
-       {% if lang == "de" %}
-               <p>
-                       IPFire bietet mehrere Möglichkeiten zur Einbindung von Wireless-Clients. Zum einen kann ein
-                       Accesspoint über eine LAN Karte angeschlossen werden. Hier bietet IPFire einen MAC/IP Addressfilter,
-                       um nur erlaubte Clients zuzulassen. Die Clients dürfen in der Standardeinstellung zwar ins Internet,
-                       aber nicht auf das lokale Lan zugreifen. Als zweite Möglichkeit kann man eine WLAN-Karte in den IPFire
-                       einbauen, die über das Addon “hostapd” Funktionalität des Accesspoints übernimmt. Unterstützt werden
-                       dann unverschlüsselte sowie WPA/WPA2 verschlüsselte Verbindungen. Auch die Nutzung des 5 GHz Bandes
-                       (802.11A) ist möglich, wenn die WLAN Karte dies unterstützt.
-               </p>
-               <p>
-                       Die Unterstützung von Wireless-Karten in IPFire ist exzellent, da in dem stabilen Kernel die Treiber
-                       trotzdem auf neuestem Stand sind und somit möglichst viele Karten unterstützt werden.
-               </p>
-       {% else %}
-               <p>
-                       IPFire offers several options for the integration of wireless clients. Firstly, an access point can
-                       be connected via a LAN card. At this, IPFire offers a MAC/IP address filtering to allow only authorized
-                       clients. The clients are allowed by default, to access the Internet, but they can not access the local LAN.
-                       The second option is to install a wireless card in the IPFire that takes the functionality of the access
-                       point over the Addon “hostapd”. This Addon supports unencrypted and WPA/WPA2 encrypted connections. Also
-                       the use of 5 GHz (802.11a) is possible if the wireless card supports this standard.
-               </p>
-               <p>
-                       The support of wireless cards in IPFire is excellent, so the drivers in the stable kernel are still up to
-                       date and therefore he supports preferably a lot of W-LAN cards.
-               </p>
-       {% end %}
+       <div class="row">
+               <div class="span9">
+                       {% if lang == "de" %}
+                               <p>
+                                       IPFire bietet mehrere Möglichkeiten zur Einbindung von Wireless-Clients. Zum einen kann ein
+                                       Accesspoint über eine LAN Karte angeschlossen werden. Hier bietet IPFire einen MAC/IP Addressfilter,
+                                       um nur erlaubte Clients zuzulassen. Die Clients dürfen in der Standardeinstellung zwar ins Internet,
+                                       aber nicht auf das lokale Lan zugreifen. Als zweite Möglichkeit kann man eine WLAN-Karte in den IPFire
+                                       einbauen, die über das Addon “hostapd” Funktionalität des Accesspoints übernimmt. Unterstützt werden
+                                       dann unverschlüsselte sowie WPA/WPA2 verschlüsselte Verbindungen. Auch die Nutzung des 5 GHz Bandes
+                                       (802.11a) ist möglich, wenn die WLAN-Karte dies unterstützt.
+                               </p>
+                               <p>
+                                       Die Unterstützung von Wireless-Karten in IPFire ist exzellent, da in dem stabilen Kernel die Treiber
+                                       trotzdem auf neuestem Stand sind und somit möglichst viele Karten unterstützt werden.
+                               </p>
+                       {% else %}
+                               <p>
+                                       IPFire offers several options for the integration of wireless clients. First, an access point can
+                                       be connected via a LAN card. In this scenario, IPFire offers MAC/IP address filtering to allow only authorized
+                                       clients. The clients are allowed by default to access the Internet, but they are not allowed access the local LAN.
+                                       The second option is to install a wireless LAN (WLAN) card in the IPFire machine that takes the functionality of the access
+                                       point over, using the add-on "hostapd". This add-on supports both unencrypted and WPA/WPA2-encrypted connections. Also
+                                       the use of 5 GHz (802.11a standard) is possible if the wireless card supports it.
+                               </p>
+                               <p>
+                                       Wireless card support in IPFire is excellent. The drivers in the stable kernel are very up-to-date
+                                       and IPFire therefore supports a significant amount of WLAN cards.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
 {% end block %}
diff --git a/www/templates/static/getinvolved.html b/www/templates/static/getinvolved.html
new file mode 100644 (file)
index 0000000..611f214
--- /dev/null
@@ -0,0 +1,173 @@
+{% extends "../base-1.html" %}
+
+{% block title %}{{ _("Get involved") }}{% end block %}
+
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Get involved") }}</h1>
+       </div>
+
+       <h2>{{ _("Thanks for your support") }}</h2>
+       {% if lang == "de" %}
+               <p>
+                       Das IPFire Projekt bekommt eine Menge Unterstützung durch
+                       alle, die mitmachen. Daher sei an dieser Stelle allen, die
+                       sich in das Projekt einbringen ein Wort des Danks ausgesprochen.
+               </p>
+               <p>
+                       Die Distribution wird dank Euch jeden Tag ein kleines Stück besser.
+               </p>
+               <p>
+                       Es ist so leicht etwas zu erreichen.
+                       Hier ist eine Liste von Möglichkeiten dem Projekt in einem
+                       oder mehreren Wegen unter die Arme zu greifen:
+               </p>
+       {% else %}
+               <p>
+                       The IPFire project receives a great amount of support from
+                       the community and we would like to take the opportunity to
+                       thank each and every contributor participating.
+               </p>
+               <p>
+                       This distribution is getting better and better, every single
+                       day thanks to you.
+               </p>
+               <p>
+                       It's easy to make a difference. Here is a list of ways how
+                       you can help the IPFire project in one or more ways:
+               </p>
+       {% end %}
+
+       <br>
+
+       <div class="row">
+               <div class="span6">
+                       <h2>{{ _("Donations") }}</h2>
+                       {% if lang == "de" %}
+                               <p>
+                                       Du kannst dem Projekt helfen, indem du etwas spendest.
+                                       Dadurch kann neues Equipment angeschafft und Veranstaltungen
+                                       gestaltet werden.
+                               </p>
+                       {% else %}
+                               <p>
+                                       You can help by making a financial contribution to the project.
+                                       Due to revenue from your donations, the IPFire project can
+                                       afford to buy dedicated servers, new equipment and events.
+                               </p>
+                       {% end %}
+                       <p style="text-align: center;">
+                               <a class="btn btn-success" href="/donate">
+                                       {{ _("Donate") }}
+                               </a>
+                       </p>
+               </div>
+
+               <div class="span6">
+                       <h2>
+                               {{ _("Promotion") }}
+                               <small>{{ _("Spread the word") }}</small>
+                       </h2>
+                       {% if lang == "de" %}
+                               <p>
+                                       Wenn dir IPFire gefällt, dann lass das auch andere wissen.
+                                       Hilf uns IPFire bekannt zu machen indem du ein Review schreibst
+                                       oder all deinen Freunden und Kollegen davon erzählst.
+                                       Halte einen Vortrag in deiner lokalen Linux-User-Group,
+                                       Schule oder Universität und beantworte Fragen der Zuhörer.
+                               </p>
+                       {% else %}
+                               <p>
+                                       If you like IPFire, let people know. Help us to promote IPFire
+                                       by writing reviews or by telling your friends and colleagues.
+                                       Hold a talk at your local Linux user group, school or university
+                                       and answer people's questions.
+                               </p>
+                       {% end %}
+               </div>
+       </div>
+
+       <br>
+
+       <div class="row">
+               <div class="span6">
+                       <h2>{{ _("Join the community") }}</h2>
+                       {% if lang == "de" %}
+                               <p>
+                                       Neben der Entwicklung selbst gibt es in einem Projekt
+                                       noch viel mehr zu tun.
+                                       Es gibt Gruppen, welche sich darum kümmern Einsteigern
+                                       Hilfe zu geben, Leute, die Dokumentation schreiben,
+                                       die Übersetzungen koordinieren und vieles mehr.
+                               </p>
+                               <p>
+                                       Das ist nur ein Auszug aus den vielen Möglichkeiten für Dich
+                                       beim Projekt mitzumachen:
+                               </p>
+                       {% else %}
+                               <p>
+                                       Besides development, there is a lot more to do in a project.
+                                       There are groups which care about helping beginners to get along
+                                       with IPFire, people who write documentation, coordinate translations
+                                       and manage the infrastructure.
+                               </p>
+                               <p>
+                                       These are only a few of the many opportunities you have
+                                       to take part in the project:
+                               </p>
+                       {% end %}
+                       <ul>
+                               <li>
+                                       <a href="http://forum.ipfire.org/">
+                                               {{ _("Register on the forums") }}
+                                       </a>
+                               </li>
+                               <li>
+                                       <a href="/chat">
+                                               {{ _("Join the IRC channel") }}
+                                       </a>
+                               </li>
+                               <li>
+                                       <a href="http://planet.ipfire.org/">
+                                               {{ _("Subscribe to the planet feed") }}
+                                       </a>
+                               </li>
+                       </ul>
+               </div>
+
+               <div class="span6">
+                       <h2>{{ _("Development") }}</h2>
+                       {% if lang == "de" %}
+                               <p>
+                                       Mehr dazu, wie du bei der Entwicklung helfen kannst
+                                       befindet sich auf der <a href="/development">Entwicklungssseite</a>.
+                               </p>
+                       {% else %}
+                               <p>
+                                       Read more about getting involved into hacking the code on the
+                                       <a href="/development">development page</a>.
+                               </p>
+                       {% end %}
+
+                       <h3>{{ _("Translation") }}</h3>
+                       {% if lang == "de" %}
+                               <p>
+                                       Wenn du Englisch und noch eine weitere Sprache sprichst,
+                                       dann kannst du dabei helfen IPFire in deine Sprache zu übersetzen.
+                               </p>
+                       {% else %}
+                               <p>
+                                       If you are able to read English and speak an other language, you
+                                       can help us translating IPFire into your language.
+                               </p>
+                       {% end %}
+                       <ul>
+                               <li>
+                                       <a href="http://wiki.ipfire.org/projects/translation/start">
+                                               {{ _("Join the translation project") }}
+                                       </a>
+                               </li>
+                       </ul>
+               </div>
+       </div>
+{% end block %}
index 24976820d1b68c6286a984b9ea319bf0a4718cb1..f8ffd1c21656eee31d73a1dd856aac2a9864f2e7 100644 (file)
 
 {% block title %}{{ _("Imprint") }}{% end block %}
 
-{% block content %}
-
-       <div class=post>
-       <h3>{{ _("Imprint") }}</h3>
-       <img src="{{ static_url("images/page_icons/imprint.png") }}" class="floatTR" border="0" alt="{{ _("Imprint") }}" />
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Imprint") }}</h1>
+       </div>
 
        {% if lang == "de" %}
                <p>
-                       Dieses Projekt ist ein Open-Source-Projekt und verfolgt keine kommerziellen Ziele.
+                       <strong>Verantwortliche im Sinne von §5 TMG, §55 RfStV:</strong>
                </p>
-               
-               <p>
-                       <strong>Verantwortliche im Sinne von § 5 TMG, § 55 RfStV:</strong>
-                       <br />
+       {% end %}
 
-                       Michael Tremer (<a href="mailto:michael@ipfire.org">michael@ipfire.org</a>)<br />
-                       Gerhardstrasse 8<br />
-                       45711 Datteln<br /><br />
-               
-                       Christian Schmidt (<a href="mailto:maniacikarus@ipfire.org">maniacikarus@ipfire.org</a>)<br />
-                       Mathildenstr. 25<br />
-                       90489 Nürnberg<br /><br />
+       <div class="row">
+               <div class="span3">
+                       <address>
+                               <strong>Michael Tremer</strong><br>
+                               Gerhardstraße 8<br>
+                               D-45711 Datteln<br>
+                       
+                               <a href="mailto:michael.tremer@ipfire.org">
+                                       <i class="icon-envelope"></i>
+                                       {{ _("Mail") }}
+                               </a>
+                       </address>
+               </div>
 
-               </p>
-               
-               <h4>Haftungsausschluss</h4>
-               <p>
-                       <b>1. Inhalt des Onlineangebotes</b><br />
-                       Der Autor übernimmt keinerlei Gewähr für die Aktualität, Korrektheit, Vollständigkeit 
-                       oder Qualität der bereitgestellten Informationen. Haftungsansprüche gegen den Autor, 
-                       welche sich auf Schäden materieller oder ideeller Art beziehen, die durch die Nutzung 
-                       oder Nichtnutzung der dargebotenen Informationen bzw. durch die Nutzung fehlerhafter 
-                       und unvollständiger Informationen verursacht wurden, sind grundsätzlich ausgeschlossen, 
-                       sofern seitens des Autors kein nachweislich vorsätzliches oder grob fahrlässiges 
-                       Verschulden vorliegt.<br />
-                       Alle Angebote sind freibleibend und unverbindlich. Der Autor behält es sich ausdrücklich vor, 
-                       Teile der Seiten oder das gesamte Angebot ohne gesonderte Ankündigung zu verändern, 
-                       zu ergänzen, zu löschen oder die Veröffentlichung zeitweise oder endgültig einzustellen.
-               </p>
-       
-               <p>
-                       <b>2. Verweise und Links</b><br />
-                       Bei direkten oder indirekten Verweisen auf fremde Internetseiten ("Links"), 
-                       die außerhalb des Verantwortungsbereiches des Autors liegen, würde eine 
-                       Haftungsverpflichtung ausschließlich in dem Fall in Kraft treten, in dem der 
-                       Autor von den Inhalten Kenntnis hat und es ihm technisch möglich und zumutbar wäre, 
-                       die Nutzung im Falle rechtswidriger Inhalte zu verhindern. <br />
-                       Der Autor erklärt hiermit ausdrücklich, dass zum Zeitpunkt der Linksetzung keine 
-                       illegalen Inhalte auf den zu verlinkenden Seiten erkennbar waren. 
-                       Auf die aktuelle und zukünftige Gestaltung, die Inhalte oder die Urheberschaft 
-                       der gelinkten/verknüpften Seiten hat der Autor keinerlei Einfluss. Deshalb distanziert 
-                       er sich hiermit ausdrücklich von allen Inhalten aller gelinkten /verknüpften Seiten, 
-                       die nach der Linksetzung verändert wurden. Diese Feststellung gilt für alle innerhalb 
-                       des eigenen Internetangebotes gesetzten Links und Verweise sowie für Fremdeinträge 
-                       in vom Autor eingerichteten Gästebüchern, Diskussionsforen und Mailinglisten. 
-                       Für illegale, fehlerhafte oder unvollständige Inhalte und insbesondere für Schäden, 
-                       die aus der Nutzung oder Nichtnutzung solcherart dargebotener Informationen entstehen, 
-                       haftet allein der Anbieter der Seite, auf welche verwiesen wurde, nicht derjenige, 
-                       der über Links auf die jeweilige Veröffentlichung lediglich verweist.
-               </p>
+               <div class="span3">
+                       <address>
+                               <strong>Christian Schmidt</strong><br>
+                               Mathildenstraße 25<br>
+                               D-90489 Nürnberg<br>
+                               <a href="mailto:christian.schmidt@ipfire.org">
+                                       <i class="icon-envelope"></i>
+                                       {{ _("Mail") }}
+                               </a>
+                       </address>
+               </div>
 
-               <p>
-                       <b>3. Urheber- und Kennzeichenrecht </b><br />
-                       Der Autor ist bestrebt, in allen Publikationen die Urheberrechte der verwendeten Grafiken, 
-                       Tondokumente, Videosequenzen und Texte zu beachten, von ihm selbst erstellte Grafiken, 
-                       Tondokumente, Videosequenzen und Texte zu nutzen oder auf lizenzfreie Grafiken, Tondokumente, 
-                       Videosequenzen und Texte zurückzugreifen. <br />
-                       Alle innerhalb des Internetangebotes genannten und ggf. durch Dritte geschützten Marken- 
-                       und Warenzeichen unterliegen uneingeschränkt den Bestimmungen des jeweils gültigen Kennzeichenrechts 
-                       und den Besitzrechten der jeweiligen eingetragenen Eigentümer. Allein aufgrund der bloßen Nennung 
-                       ist nicht der Schluss zu ziehen, dass Markenzeichen nicht durch Rechte Dritter geschützt sind! <br />
-                       Das Copyright für veröffentlichte, vom Autor selbst erstellte Objekte bleibt allein beim Autor der Seiten. 
-                       Eine Vervielfältigung oder Verwendung solcher Grafiken, Tondokumente, Videosequenzen und Texte in 
-                       anderen elektronischen oder gedruckten Publikationen ist ohne ausdrückliche Zustimmung des Autors nicht gestattet.
-               </p>
-       
-               <p>
-                       <b>4. Datenschutz </b><br />
-                       Sofern innerhalb des Internetangebotes die Möglichkeit zur Eingabe persönlicher oder geschäftlicher Daten 
-                       (Emailadressen, Namen, Anschriften) besteht, so erfolgt die Preisgabe dieser Daten seitens 
-                       des Nutzers auf ausdrücklich freiwilliger Basis. Die Inanspruchnahme und Bezahlung aller 
-                       angebotenen Dienste ist - soweit technisch möglich und zumutbar - auch ohne Angabe solcher Daten 
-                       bzw. unter Angabe anonymisierter Daten oder eines Pseudonyms gestattet. Die Nutzung der im Rahmen 
-                       des Impressums oder vergleichbarer Angaben veröffentlichten Kontaktdaten wie Postanschriften, 
-                       Telefon- und Faxnummern sowie Emailadressen durch Dritte zur Übersendung von nicht ausdrücklich 
-                       angeforderten Informationen ist nicht gestattet. Rechtliche Schritte gegen die Versender von 
-                       sogenannten Spam- Mails bei Verstössen gegen dieses Verbot sind ausdrücklich vorbehalten.
-               </p>
+               <div class="span3">
+                       <address>
+                               <strong>Arne Fitzenreiter</strong><br>
+                               Hauptstraße 4<br>
+                               D-99735 Friedrichsthal<br>
+                               <a href="mailto:arne.fitzenreiter@ipfire.org">
+                                       <i class="icon-envelope"></i>
+                                       {{ _("Mail") }}
+                               </a>
+                       </address>
+               </div>
 
-               <p>
-                       <b>5. Rechtswirksamkeit dieses Haftungsausschlusses </b><br />
-                       Dieser Haftungsausschluss ist als Teil des Internetangebotes zu betrachten, von dem aus auf diese 
-                       Seite verwiesen wurde. Sofern Teile oder einzelne Formulierungen dieses Textes der geltenden 
-                       Rechtslage nicht, nicht mehr oder nicht vollständig entsprechen sollten, bleiben die übrigen 
-                       Teile des Dokumentes in ihrem Inhalt und ihrer Gültigkeit davon unberührt.
-               </p>
-               
-               <p>
-                       Dieses Impressum gilt für alle mit dem IPFire-Projekt verbundenen Webseiten.
-               </p>
-               
-       {% else %}
-               <p>
-                       Because of the fact that the people who started this project are living
-                       in Germany and the German law demands it. This side is only available in german language, 
-                       so please have a look at the german legal notes.
-               </p>
-       {% end %}
+               <div class="span3">
+                       <address>
+                               <strong>Stefan Schantl</strong><br>
+                               Beethovenstraße 6<br>
+                               A-8605 Kapfenberg<br>
+                               <a href="mailto:stefan.schantl@ipfire.org">
+                                       <i class="icon-envelope"></i>
+                                       {{ _("Mail") }}
+                               </a>
+                       </address>
+               </div>
        </div>
-       <br class="clear" />
 
-{% end block %}
+       <br>
+
+       <h2>Haftungsausschluss</h2>
+       {% if not lang == "de" %}
+               <div class="alert">
+                       This is some legal stuff that is required by the laws of Germany.
+                       where this project and website are located.
+               </div>
+       {% end %}
+
+       <h3>1. Inhalt des Onlineangebotes</h3>
+       <p>
+               Der Autor übernimmt keinerlei Gewähr für die Aktualität, Korrektheit, Vollständigkeit 
+               oder Qualität der bereitgestellten Informationen. Haftungsansprüche gegen den Autor, 
+               welche sich auf Schäden materieller oder ideeller Art beziehen, die durch die Nutzung 
+               oder Nichtnutzung der dargebotenen Informationen bzw. durch die Nutzung fehlerhafter 
+               und unvollständiger Informationen verursacht wurden, sind grundsätzlich ausgeschlossen, 
+               sofern seitens des Autors kein nachweislich vorsätzliches oder grob fahrlässiges 
+               Verschulden vorliegt.<br />
+               Alle Angebote sind freibleibend und unverbindlich. Der Autor behält es sich ausdrücklich vor, 
+               Teile der Seiten oder das gesamte Angebot ohne gesonderte Ankündigung zu verändern, 
+               zu ergänzen, zu löschen oder die Veröffentlichung zeitweise oder endgültig einzustellen.
+       </p>
+
+       <h3>2. Verweise und Links</h3>
+       <p>
+               Bei direkten oder indirekten Verweisen auf fremde Internetseiten ("Links"), 
+               die außerhalb des Verantwortungsbereiches des Autors liegen, würde eine 
+               Haftungsverpflichtung ausschließlich in dem Fall in Kraft treten, in dem der 
+               Autor von den Inhalten Kenntnis hat und es ihm technisch möglich und zumutbar wäre, 
+               die Nutzung im Falle rechtswidriger Inhalte zu verhindern. <br />
+               Der Autor erklärt hiermit ausdrücklich, dass zum Zeitpunkt der Linksetzung keine 
+               illegalen Inhalte auf den zu verlinkenden Seiten erkennbar waren. 
+               Auf die aktuelle und zukünftige Gestaltung, die Inhalte oder die Urheberschaft 
+               der gelinkten/verknüpften Seiten hat der Autor keinerlei Einfluss. Deshalb distanziert 
+               er sich hiermit ausdrücklich von allen Inhalten aller gelinkten /verknüpften Seiten, 
+               die nach der Linksetzung verändert wurden. Diese Feststellung gilt für alle innerhalb 
+               des eigenen Internetangebotes gesetzten Links und Verweise sowie für Fremdeinträge 
+               in vom Autor eingerichteten Gästebüchern, Diskussionsforen und Mailinglisten. 
+               Für illegale, fehlerhafte oder unvollständige Inhalte und insbesondere für Schäden, 
+               die aus der Nutzung oder Nichtnutzung solcherart dargebotener Informationen entstehen, 
+               haftet allein der Anbieter der Seite, auf welche verwiesen wurde, nicht derjenige, 
+               der über Links auf die jeweilige Veröffentlichung lediglich verweist.
+       </p>
+
+       <h3>3. Urheber- und Kennzeichenrecht</h3>
+       <p>
+               Der Autor ist bestrebt, in allen Publikationen die Urheberrechte der verwendeten Grafiken, 
+               Tondokumente, Videosequenzen und Texte zu beachten, von ihm selbst erstellte Grafiken, 
+               Tondokumente, Videosequenzen und Texte zu nutzen oder auf lizenzfreie Grafiken, Tondokumente, 
+               Videosequenzen und Texte zurückzugreifen. <br />
+               Alle innerhalb des Internetangebotes genannten und ggf. durch Dritte geschützten Marken- 
+               und Warenzeichen unterliegen uneingeschränkt den Bestimmungen des jeweils gültigen Kennzeichenrechts 
+               und den Besitzrechten der jeweiligen eingetragenen Eigentümer. Allein aufgrund der bloßen Nennung 
+               ist nicht der Schluss zu ziehen, dass Markenzeichen nicht durch Rechte Dritter geschützt sind! <br />
+               Das Copyright für veröffentlichte, vom Autor selbst erstellte Objekte bleibt allein beim Autor der Seiten. 
+               Eine Vervielfältigung oder Verwendung solcher Grafiken, Tondokumente, Videosequenzen und Texte in 
+               anderen elektronischen oder gedruckten Publikationen ist ohne ausdrückliche Zustimmung des Autors nicht gestattet.
+       </p>
+
+       <h3>Datenschutz</h3>
+       <p>
+               Sofern innerhalb des Internetangebotes die Möglichkeit zur Eingabe persönlicher oder geschäftlicher Daten 
+               (Emailadressen, Namen, Anschriften) besteht, so erfolgt die Preisgabe dieser Daten seitens 
+               des Nutzers auf ausdrücklich freiwilliger Basis. Die Inanspruchnahme und Bezahlung aller 
+               angebotenen Dienste ist - soweit technisch möglich und zumutbar - auch ohne Angabe solcher Daten 
+               bzw. unter Angabe anonymisierter Daten oder eines Pseudonyms gestattet. Die Nutzung der im Rahmen 
+               des Impressums oder vergleichbarer Angaben veröffentlichten Kontaktdaten wie Postanschriften, 
+               Telefon- und Faxnummern sowie Emailadressen durch Dritte zur Übersendung von nicht ausdrücklich 
+               angeforderten Informationen ist nicht gestattet. Rechtliche Schritte gegen die Versender von 
+               sogenannten Spam- Mails bei Verstössen gegen dieses Verbot sind ausdrücklich vorbehalten.
+       </p>
 
-{% block sidebar %}
+       <h3>5. Rechtswirksamkeit dieses Haftungsausschlusses</h3>
+       <p>
+               Dieser Haftungsausschluss ist als Teil des Internetangebotes zu betrachten, von dem aus auf diese 
+               Seite verwiesen wurde. Sofern Teile oder einzelne Formulierungen dieses Textes der geltenden 
+               Rechtslage nicht, nicht mehr oder nicht vollständig entsprechen sollten, bleiben die übrigen 
+               Teile des Dokumentes in ihrem Inhalt und ihrer Gültigkeit davon unberührt.
+       </p>
 {% end block %}
diff --git a/www/templates/static/pr.html b/www/templates/static/pr.html
deleted file mode 100644 (file)
index 65a2d67..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-{% extends "../base.html" %}
-               
-{% block title %}{{ _("Public Relations") }}{% end block %}
-
-{% block content %}
-       
-       
-       <div class=post>
-               <h3>{{ _("Public Relations") }}</h3>
-               <img src="{{ static_url("images/page_icons/pr.png") }}") }}" class="floatTR" border="0" alt="{{ _("Public Relations") }}" />
-               <p>
-                       {% if lang == "de" %}
-                       Euer Ansprechpartner für die Bereiche Presse, allgemeine Öffentlichkeitsarbeit und Sponsoring:
-                       {% else %}
-                       Your contact person for the fields press, general public relations and sponsorship:
-                       {% end %}
-                       <br /><br />
-                       Markus Krüger
-                        <img src="http://wiki.ipfire.org/lib/tpl/ipfire3-1/images/mail_icon.gif"  align="absmiddle"/><a href="mailto:&#109;&#97;&#114;&#107;&#117;&#115;&#46;&#107;&#114;&#117;&#101;&#103;&#101;&#114;&#64;&#105;&#112;&#102;&#105;&#114;&#101;&#46;&#111;&#114;&#103;">&#101;&#77;&#97;&#105;&#108;</a><br />
-                       Kollegstraße 2 / 432<br />
-                       44801 Bochum<br />
-                       {% if lang != "de" %}
-                       West Germany
-                       {% end %}
-               </p>
-       </div>
-       <br class="clear" />
-
-       <div class=post>
-               <a name="{{ _("Press") }}"></a><h3>{{ _("Press") }}</h3>
-               <p>
-                       <a name="{{ _("Press kit") }}"></a><h4>{{ _("Press kit") }}</h4>
-
-                       {% if lang == "de" %}
-                       <p>
-                               Hier findet hier eine groß\9fe Auswahl an Informationen rund um das Projekt IPFire.
-                       </p>
-                       {% else %}
-                       <p>
-                               Here you will find a large selection of information about the project IPFire.
-                       </p>
-                       {% end %}
-                       <br />
-                       
-                       <a name="{{ _("Logos and print artworks") }}"></a><h4>{{ _("Logos and print artworks") }}</h4>
-                       <p>
-                               <div class=pr_li>
-                               <ul>
-                                       <li>{{ _("<strong>Print</strong> media") }}:</li>
-                                               <ul>
-                                                       {% if lang == "de" %}
-                                                       <p>
-                                                               <em>Bilder von Tim -  hier rein</em>
-                                                       </p>
-                                                       {% else %}
-                                                       <p>
-                                                               <em>Picture made by Tim - put in here</em>
-                                                       </p>
-                                                       {% end %}
-                                               </ul>
-                                       <li>{{ _("<strong>Online</strong> media") }}:</li>
-                                       <ul>
-                                                <li><img src="{{ static_url("images/tux/ipfire_tux_16x16.png") }}" align="bottom" border= "0"/>
-                                                <img src="{{ static_url("images/tux/ipfire_tux_32x32.png") }}" align="bottom" border= "0"/>
-                                                <img src="{{ static_url("images/tux/ipfire_tux_64x64.png") }}" align="bottom" border= "0"/>
-                                                <img src="{{ static_url("images/tux/ipfire_tux_128x128.png") }}" align="bottom" border= "0"/>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_16x16.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (16 x 16)</a>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_32x32.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (32 x 32)</a>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_64x64.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (64 x 64)</a>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_128x128.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (128 x 128)</a>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_256x256.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (256 x 256)</a>
-                                                <br /><a href="{{ static_url("images/tux/ipfire_tux_512x512.png") }}") }}" target="_blank" border="0">
-                                                ipfire.png (512 x 512)</a></li>
-                                       </ul>
-                               </ul>
-                               </div>
-                       </p>
-               </p>
-       </div>
-       
-       <div class=post>
-               <a name="{{ _("IPFire in the press") }}"></a><h3>{{ _("IPFire in the press") }}</h3>
-               <p>
-                       {% if lang == "de" %}
-                       Hier findet ihr einige Artikel über IPFire in der internationalen Presse.<br />
-                       Wenn ihr neue Artikel über IPFire kennt die hier noch nicht aufgelistet sind, sendet uns diese an die oben angegeben Adresse, 
-                       damit diese hinzugefügt werden können.
-                       {% else %}
-                       Below are recent articles about IPFire in the international press.<br />
-                       If you know of any news stories featuring IPFire that we have not listed here, please send details to the contact given above 
-                       so that we can include them.
-                       {% end %}
-               </p>
-               <br />
-               <div class=pr_li>
-                       <ul>
-                               <li>{{ _("Press") }}:</li>
-                               <ul>
-                                       <li>www.pro-linux.de: <a href="http://www.pro-linux.de/NB3/artikel/2/613/ipfire.html" target="_blank">
-                                       Vorstellung von IPFire</a>,
-                                       &nbsp;<a href="http://www.pro-linux.de/NB3/news/1/14360/1,ipfire-25-freigegeben.html" target="_blank">
-                                       IPFire 2.5 freigegeben</a>,
-                                       &nbsp;<a href="http://www.pro-linux.de/NB3/news/1/13436/1,ipfire-23-freigegeben.html" target="_blank">
-                                       IPFire 2.3 freigegeben</a></li>                         
-                                       <li>www.heise.de: <a href="http://www.heise.de/software/download/ipfire/47736a" target="_blank">
-                                       Artikel aus c't 20/2009</a></li>
-                                       <li>www.securebase.at: <a href="http://www.securebase.at/software/application-gateways/ipfire-schutz-gegen-jegliche-art-von-spyware-malware-und-sonstigen-hacker-aktivitaten" target="_blank">Schutz gegen jegliche Art von Spyware, Malware...</a></li>
-                                       <li>www.techmonkey.de: <a href="http://www.techmonkey.de/2008/09/15/ipfire-der-nachste-star-am-soho-himmel/" target="_blank">
-                                       Der nächste Star am SOHO Himmel?</a>,
-                                       &nbsp;<a href="http://www.techmonkey.de/2009/06/24/endlich-ipfire-2-5-erschien" target="_blank">Endlich! 
-                                       IPFire 2.5 erschienen</a>
-                                       <li>www.pcwelt.de: <a href="http://www.pcwelt.de/start/sicherheit/firewall/news/187759/ipfire_auf_version_23_aktualisiert/"
-                                        target="_blank">IPFire auf Version 2.3 aktualisiert</a></li>
-                                       <li>www.lintelligence.de: <a href="http://www.lintelligence.de/news/1026" target="_blank">IPFire 2.1</a></li>
-                                       <li>www.h-online.com: <a href="http://www.h-online.com/newsticker/news/item/IPFire-the-Lean-Linux-firewall-738055.html"
-                                       target="_blank">IPFire, the Lean Linux firewall</a></li>
-                                       <li>www.4reackt.net: <a href="http://www.4reackt.net/programas-linux-rpms/5303-ipfire-v2-1-a.html"
-                                       target="_blank">IPFire v2.1</a></li>
-                               </ul>
-                               <li>Blogs:</li>
-                               <ul>
-                                       <li>linuxmini.blogspot.com: <a href="http://linuxmini.blogspot.com/2007/10/ipfire-free-firewall-for-your-home-or.html"
-                                        target="_blank">Free firewall for your home or SOHO</a></li>
-                                       <li>www.ffoutpost.net: <a href="http://www.ffoutpost.net/2009/09/01/ipfire-initial-setup" target="_blank">
-                                       IPFire Initial Setup</a>,
-                                       &nbsp;<a href="http://www.ffoutpost.net/2009/09/15/ipfire-wireless-blue-access-setup" target="_blank">IPFire 
-                                       Wireless (Blue Access) Setup</a></li>
-                               </ul>   
-                       <ul>
-               </div>          
-       </div>
-
-       <div class=post>
-               <a name="{{ _("Sponsoring") }}"></a><h3>{{ _("Sponsoring") }}</h3>
-               {% if lang == "de" %}
-               <p>
-                       Da das Projekt mittlerweile auf eine stattliche Größe angewachsen ist,
-                       sind wir in vielen Bereichen auf Eure Hilfe angewiesen.
-                       Allen voran ist die (Server-)Infrastuktur für das Aufrechterhalten der
-                       Webseite inklusive des Wikis und der Foren zu nennen.
-                       Auch für genügend Platz und Bandbreite zum erstellen, 'konservieren' und
-                       verteilen der Nightly-builds muss gesorgt werden.
-               </p><br />
-               <p>
-                       Falls ihr das Projekt also unterstützen möchtet und zufällig einen
-                       Bladeserver 'übrig' habt und/oder einen freien Platz für's Server-Housing
-                       mit entsprechender Bandbreite kostenlos zur Verfügung stellen wollt,
-                       werden wir gerne auf Eure Angebote eingehen.
-                       (Unsere Entwickler freuen sich auch immer über neue Hardware auf der
-                       ausgiebig getestet werden kann.)
-               </p><br />
-               <p>                             
-                       Abgesehen von der Hardware sind wir auch immer auf der Suche nach
-                       helfenden Händen für die IPFire-Community.
-                       Besonders gefragt sind Personen, die sich mit Linux auskennen und die
-                       neuesten Funktionen und Addons testen und Fehler melden,
-                       aktive Forenmoderatoren, Wiki-Dokumentatoren sowie Web- und Grafikdesigner.
-               </p><br />
-               <p>                             
-                       Um die IPFire-Community zu unterstützen, melden Sie sich einfach im <a href="http://forum.ipfire.org">Forum</a>
-                       oder im IRC-Channel <a href="http://webchat.freenode.net/?channels=ipfire" target="_blank">#ipfire</a> 
-                       auf irc.freenode.net.
-               </p><br />
-               <p>
-                       Momentan besonders dringend benötigt werden:
-               <div class="li_pr">
-                       <ul>
-                               <li>Neuer Server mit ausreichend Platz</li>
-                               <li>und Hosting/Housingpartner mit hoher Bandbreite</li>
-               <br />
-                               <li>Spenden für die <a href="cebit">CeBIT 2010</a></li>
-                       </ul>
-               </div>
-               </p>
-               {% else %}
-               <p>
-                       <em>General information about sponsorshop and partners - need to be translated </em>
-               </p>
-               {% end %}
-               <br />
-               
-               <a name="{{ _("friends of ipfire") }}"></a><h4>{{ _("friends of ipfire") }}</h4>
-                       <p>
-                               {% if lang == "de" %}
-                                       Die folgenden User ermöglichen dem Projekt die Nutzung ihrer persönlichen Server (<a href="downloads/mirrors">Mirror</a>,
-                                        Build und Root Server).
-                                       An dieser Stelle möchten wir uns bei Allen für ihre Unterstützung bedanken. (Liste in alphabetischer Reihenfolge.)
-                               {% else %}
-                                       The following users are supporting the project by sharing their personal server (<a href="downloads/mirrors">mirror</a>,
-                                        build, and root servers).
-                                       At this point we would like to thank all for their help. (List in alphabetical order.)
-                               {% end %}
-                               <div class=pr_li>
-                               <ul>
-                                       <li>Kim Barthel: <a href="http://www.kbarthel.de" target="_blank">www.kbarthel.de</a></li>
-                                       <li>Peter Schaelchli: <a href="http://www.scp-systems.ch" target="_blank">www.scp-systems.ch</a></li>
-                                       <li>Ronald Wiesinger: <a href="http://www.rowie.at" target="_blank">www.rowie.at</a></li>
-                                       <li>Sebastian Winter</li>
-                                </ul>
-                                </div>
-                        </p>           
-       </div>
-
-
-
-{% end block %}
-
-{% block sidebar %}
-               <h4>Public <span>relations</span></h4>
-               <ul class="links">              
-                       <li class="first"><a href="#{{ _("Press") }}">{{ _("Press") }}</a></li>
-                               <li><a href="#{{ _("Press kit") }}">{{ _("Press kit") }}</a></li>
-                               <li><a href="#{{ _("Logos and print artworks") }}">{{ _("Logos and print artworks") }}</a></li>
-                       <li class="first"><a href="#{{ _("IPFire in the press") }}">{{ _("IPFire in the press") }}</a></li>
-                       <li><a href="#{{ _("Sponsoring") }}">{{ _("Sponsoring") }}</a></li>
-                               <li><a href="#{{ _("friends of ipfire") }}">{{ _("friends of ipfire") }}</a></li>
-               </ul>
-               
-{{ modules.SidebarBanner(banner) }}
-{% end block %}
diff --git a/www/templates/static/press.html b/www/templates/static/press.html
new file mode 100644 (file)
index 0000000..a409709
--- /dev/null
@@ -0,0 +1,57 @@
+{% extends "../base-1.html" %}
+
+{% block title %}{{ _("Press") }}{% end block %}
+
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("Press") }}</h1>
+       </div>
+
+       <a class="thumbnail pull-right" href="{{ static_url("images/tux/ipfire_tux_512x512.png") }}">
+               <img src="{{ static_url("images/tux/ipfire_tux_256x256.png") }}" alt="{{ _("Logo") }}">
+       </a>
+
+       {% if lang == "de" %}
+               <p>
+                       Ihr Ansprechpartner für die Bereiche Presse und allgemeine Öffentlichkeitsarbeit und Sponsoring:
+               </p>
+       {% else %}
+               <p>
+                       Your contact for public relations:
+               </p>
+       {% end %}
+
+       <address>
+               <strong>Michael Tremer</strong><br>
+               Gerhardstraße 8<br>
+               D-45711 Datteln<br>
+       
+               <a href="mailto:michael.tremer@ipfire.org">
+                       <i class="icon-envelope"></i>
+                       {{ _("Mail") }}
+               </a>
+       </address>
+
+       <h2>{{ _("Logo") }}</h2>
+       {% if lang == "de" %}
+               <p>
+                       Klicken Sie rechts auf das Vorschaubild, um das IPFire in einer
+                       hohen Auflösung herunterzuladen.
+               </p>
+               <p>
+                       Mehr von dieser Art findet sich auf unserer
+                       <a href="/artwork">Artwork</a>-Seite.
+               </p>
+       {% else %}
+               <p>
+                       Click on the thumbnail on the right to order the IPFire logo
+                       in a high resolution.
+               </p>
+               <p>
+                       More of this kind is to be found on our
+                       <a href="/artwork">artwork</a> page.
+               </p>
+       {% end %}
+
+       <br style="clear: both;">
+{% end block %}
diff --git a/www/templates/static/screenshots.html b/www/templates/static/screenshots.html
deleted file mode 100644 (file)
index 1e8de38..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-{% extends "../base-1.html" %}
-               
-{% block title %}{{ _("Screenshots") }}{% end block %}
-
-{% block content %}
-       <div class=post>
-               <h3>{{ _("Sceenshots") }}</h3>
-               <img src="{{ static_url("images/page_icons/screenshots.png") }}" class="floatTR" border="0" alt="{{ _("Sceenshots") }}" />
-               <p>
-                       {% if lang == "de" %}
-                               Hier findet ihr einen Einblick in das IPFire Webinterface.
-                               <br /><br />
-                               Eine Auswahl von Logos befindet sich im <a href="artwork">Artwork</a>-Bereich.
-                       {% else %}
-                               Here you will find an insight into the IPFire webinterface.
-                               <br /><br />
-                               A collection of project-related logos can be found in the
-                               <a href="artwork">artwork</a> area.
-                       {% end %}
-               </p>
-       </div>
-       
-       <br class="clear" />
-       <div class=post>
-               <a name="{{ _("System") }}"></a><h3>{{ _("System") }}</h3>
-               <div id="screenshots">
-                       &nbsp;&nbsp;&nbsp;
-                       <a href="{{ static_url("images/screenshots/index_%s.png" % lang) }}" title="{{ _("Home") }}"><img src="{{ static_url("images/screenshots/index_%s_tn.png" % lang) }}" border="0" alt="{{ _("Home") }}" /></a>
-                       &nbsp;&nbsp;&nbsp;
-                       <a href="{{ static_url("images/screenshots/backup_%s.png" % lang) }}" title="{{ _("Backup") }}"><img src="{{ static_url("images/screenshots/backup_%s_tn.png" % lang) }}" border="0" alt="{{ _("Backup") }}" /></a>
-               </div>
-       </div>
-       
-       <div class=post>
-               <a name="{{ _("Status") }}"></a><h3>{{ _("Status") }}</h3>
-               <div id="screenshots">
-                       &nbsp;&nbsp;&nbsp;                              
-                       <a href={{ static_url("images/screenshots/services_%s.png" % lang) }}" title="{{ _("Services") }}"><img src={{ static_url("images/screenshots/services_%s_tn.png" % lang) }}" border="0" alt="{{ _("Services") }}"></a>
-                       &nbsp;&nbsp;&nbsp;
-                       <a href={{ static_url("images/screenshots/networkother_%s.png" % lang) }}" title="{{ _("Network (other)") }}"><img src={{ static_url("images/screenshots/networkother_%s_tn.png" % lang) }}" border="0" alt="Network (other)"></a>
-                       &nbsp;&nbsp;&nbsp;
-                       <a href={{ static_url("images/screenshots/connections_%s.png" % lang) }}" title="{{ _("Connections") }}"><img src={{ static_url("images/screenshots/connections_%s_tn.png" % lang) }}" border="0" alt="{{ _("Connections") }}"></a>
-               </div>
-       </div>          
-
-
-       <div class=post>
-               <a name="{{ _("Network") }}"></a><h3>{{ _("Network") }}</h3>
-               <div id="screenshots">
-                       &nbsp;&nbsp;&nbsp;                              
-                       <a href={{ static_url("images/screenshots/dhcp_%s.png" % lang) }}" title="{{ _("DHCP Server") }}"><img src={{ static_url("images/screenshots/dhcp_%s_tn.png" % lang) }}" border="0" alt="{{ _("DHCP Server") }}"></a>
-               </div>          
-       </div>
-
-       
-       <div class=post>
-               <a name="{{ _("Services") }}"></a><h3>{{ _("Services") }}</h3>
-               <div id="screenshots">
-                       &nbsp;&nbsp;&nbsp;                      
-                       <a href={{ static_url("images/screenshots/ipsec_%s.png" % lang) }}" title="{{ _("IPSec") }}"><img src={{ static_url("images/screenshots/ipsec_%s_tn.png" % lang) }}" border="0" alt="{{ _("IPSec") }}"></a>
-                       &nbsp;&nbsp;&nbsp;
-                       <a href={{ static_url("images/screenshots/qos_%s.png" % lang) }}" title="{{ _("Quality of Service") }}"><img src={{ static_url("images/screenshots/qos_%s_tn.png" % lang) }}" border="0" alt="{{ _("Quality of Service") }}"></a>
-               </div>  
-       </div>
-
-
-       <div class=post>
-               <a name="{{ _("Firewall") }}"></a><h3>{{ _("Firewall") }}</h3>
-               <div id="screenshots">
-                       &nbsp;&nbsp;&nbsp;                              
-                       <a href={{ static_url("images/screenshots/outgoing_fw_%s.png" % lang) }}" title="{{ _("Outgoing Firewall") }}"><img src={{ static_url("images/screenshots/outgoing_fw_%s_tn.png" % lang) }}" border="0" alt="{{ _("Outgoing Firewall") }}"></a>
-               </div>                  
-       </div>
-
-
-       <div class=post>
-               <a name="{{ _("IPFire") }}"></a><h3>{{ _("IPFire") }}</h3>
-               <div id="screenshots">
-                       &nbsp;&nbsp;&nbsp;                              
-                       <a href={{ static_url("images/screenshots/pakfire_%s.png" % lang) }}" title="{{ _("Pakfire") }}"><img src={{ static_url("images/screenshots/pakfire_%s_tn.png" % lang) }}" border="0" alt="{{ _("Pakfire") }}"></a>                                                             
-                       &nbsp;&nbsp;&nbsp;
-                       <a href={{ static_url("images/screenshots/samba_%s.png" % lang) }}" title="{{ _("Samba") }}"><img src={{ static_url("images/screenshots/samba_%s_tn.png" % lang) }}" border="0" alt="{{ _("Samba") }}"></a>
-               </div>  
-       </div>
-
-
-       <div class=post>
-               <a name="{{ _("Logs") }}"></a><h3>{{ _("Logs") }}</h3>
-               <div id="screenshots">
-                       &nbsp;&nbsp;&nbsp;                      
-                       <a href={{ static_url("images/screenshots/fwlog_ip_%s.png" % lang) }}" title="{{ _("Fw-Logdgraphs (IP)") }}"><img src={{ static_url("images/screenshots/fwlog_ip_%s_tn.png" % lang) }}" border="0" alt="{{ _("Fw-Logdgraphs (IP)") }}"></a>
-                       &nbsp;&nbsp;&nbsp;
-                       <a href={{ static_url("images/screenshots/proxy_%s.png" % lang) }}" title="{{ _("Proxy Reports") }}"><img src={{ static_url("images/screenshots/proxy_%s_tn.png" % lang) }}" border="0" alt="{{ _("Proxy Reports") }}"></a>
-               </div>
-       </div>
-       
-{% end block %}
-
-{% block javascript %}
-       <script type="text/javascript" src="{{ static_url("js/jquery.lightbox.min.js") }}"></script>
-       <script type="text/javascript">
-               $(function() {
-                       $("#screenshots a").lightBox();
-               });
-       </script>
-{% end block %}
diff --git a/www/templates/static/support.html b/www/templates/static/support.html
deleted file mode 100644 (file)
index 0fea379..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-{% extends "../base-2.html" %}
-               
-{% block title %}{{ _("Getting support") }}{% end block %}
-
-{% block content %}
-       <h3>{{ _("Documentation") }}</h3>
-       <a href="http://wiki.ipfire.org/{{ lang }}/start" target="_blank">
-               <img class="floatTR" src="{{ static_url("images/icons/wiki.png") }}" alt="wiki" />
-       </a>
-
-       {% if lang == "de" %}
-               <p>
-                       Die erste Anlaufstelle für Probleme ist das
-                       <a href="http://wiki.ipfire.org/{{ lang }}/start" target="_blank">Wiki</a>.
-                       Das Wiki enthält für die meisten Fragen die passende Antwort.
-               </p>
-       {% else %}
-               <p>
-                       The first place to go when you need help is the
-                       <a href="http://wiki.ipfire.org/{{ lang }}/start" target="_blank">wiki</a>.
-                       It is a collection of pages which will answer most of the question that may come up.
-               </p>
-       {% end %}
-       <p>
-               {{ _("Really important guides are:") }}
-       </p>
-       <ul class="list">
-               <li><a href="http://wiki.ipfire.org/{{ lang }}/installation/start" target="_blank">{{ _("Installation guide") }}</a>
-                       - {{ _("Learn how to start.") }}</li>
-               <li><a href="http://wiki.ipfire.org/{{ lang }}/configuration/start" target="_blank">{{ _("Configuration") }}</a></li>
-               <li><a href="http://wiki.ipfire.org/{{ lang }}/hardware/start" target="_blank">{{ _("Hardware") }}</a></li>
-       </ul>
-
-       <br class="clear" />
-
-       <p class="note">
-               {% if lang == "de" %}
-                       Die Dokumentation im Wiki wird von der Community gepflegt. Jedem steht es offen sich
-                       mit seinem Account anzumelden und sein Wissen zu teilen. Das ist die beste Möglichkeit
-                       um das Wiki zu der umfassendsten Resource für Informationen rund um IPFire zu machen.
-               {% else %}
-                       The wiki is maintained by the community. Feel free to log on with your account and share your
-                       knowledge. This is the only way to get the wiki to the best source of information about IPFire.
-               {% end %}
-       </p>
-       <br class="clear" />
-
-       <h3>{{ _("Forum") }}</h3>
-       <a href="http://forum.ipfire.org" target="_blank">
-               <img class="floatTR" src="{{ static_url("images/icons/forum.png") }}" alt="forum" />
-       </a>
-
-       {% if lang == "de" %}
-               <p>
-                       Die zweite Informationsquelle ist das <a href="http://forum.ipfire.org" target="_blank">Forum</a>.
-                       Spezielle Fragen, die nicht im Wiki beantwortet wurden, können hier gestellt werden.
-               </p>
-       {% else %}
-               <p>
-                       The second place is the <a href="http://forum.ipfire.org" target="_blank">forum</a>.
-                       If your question was not answered in the wiki you may probably want to ask it there.
-               </p>
-       {% end %}
-       <br class="clear" />
-
-       <h3>{{ _("Internet relay chat") }}</h3>
-       <img class="floatTR" src="{{ static_url("images/icons/irc.png") }}" alt="IRC" />
-
-       {% if lang == "de" %}
-               <p>
-                       Für prompten Support gibt es einen IRC-Channel, wo sich andere Benutzer
-                       finden lassen, die Hilfestellung geben können.
-               </p>
-       {% else %}
-               <p>
-                       If you need immediate help there is the IRC channel where you can meet fellow IPFire users
-                       that may get their hands on your configuration and check it out together.
-               </p>
-       {% end %}
-       <p>
-               <strong>{{ _("Server") }}:</strong>
-               <a href="http://webchat.freenode.net/?channels=ipfire" target="_blank">irc.freenode.net</a>
-               <br />
-               <strong>{{ _("Channel") }}:</strong> #ipfire
-       </p>
-{% end block %}
index 6683f17b7aa07f58c8c85f59fe91f2daf8f86628..5afe1eb5b8b552f6a7449a3bf310cc10b30ee142 100644 (file)
@@ -2,42 +2,33 @@
 
 {% block title %}{{ _("Torrent Downloads") }}{% end block %}
 
-{% block content %}
-       <div class="post">
-               <a name="latest"></a>
-               <h3>{{ _("IPFire Torrent Tracker") }}</h3>
-
-               <!-- <img src="{{ static_url("images/page_icons/download-torrents.png") }}"
-                       class="floatTR" border="0" alt="{{ _("IPFire Torrent Tracker") }}" /> -->
-
-               <table class="download-torrent-detail">
-                       <tr>
-                               <td>{{ _("Release") }}</td>
-                               <td>
-                                       <a href="http://downloads.ipfire.org/release/{{ release.id }}">{{ release.name }}</a>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td>{{ _("Hash") }}</td>
-                               <td>{{ release.torrent_hash }}</td>
-                       </tr>
-               </table>
-
-               {% if torrent.peers %}
-                       <h4>{{ _("Peers") }}</h4>
-                       {{ modules.TrackerPeerList(torrent.peers, percentages=True) }}
-               {% end %}
-
-               {% if torrent.seeds %}
-                       <h4>{{ _("Seeds") }}</h4>
-                       {{ modules.TrackerPeerList(torrent.seeds) }}
-               {% end %}
-
-               <br class="clear" />
-
-               <p>
-                       <a href="/">{{ _("See list of all torrents on this tracker.") }}</a>
-               </p>
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("IPFire Torrent Tracker") }}</h1>
        </div>
-{% end block %}
 
+       <table class="download-torrent-detail">
+               <tr>
+                       <td>{{ _("Release") }}</td>
+                       <td>
+                               <a href="http://downloads.ipfire.org/release/{{ release.id }}">{{ release.name }}</a>
+                       </td>
+               </tr>
+               <tr>
+                       <td>{{ _("Hash") }}</td>
+                       <td>{{ release.torrent_hash }}</td>
+               </tr>
+       </table>
+
+       <hr>
+
+       {% if torrent.peers %}
+               <h3>{{ _("Peers") }}</h3>
+               {{ modules.TrackerPeerList(torrent.peers, percentages=True) }}
+       {% end %}
+
+       {% if torrent.seeds %}
+               <h3>{{ _("Seeds") }}</h3>
+               {{ modules.TrackerPeerList(torrent.seeds) }}
+       {% end %}
+{% end block %}
index 2bb5eefbb223862ac113da9875865265096ca007..3a6ec13ac8b8ddad0a1fa149aee19e101bc679a2 100644 (file)
@@ -2,48 +2,30 @@
 
 {% block title %}{{ _("Torrent Downloads") }}{% end block %}
 
-{% block content %}
-       <div class="post">
-               <a name="latest"></a>
-               <h3>{{ _("IPFire Torrent Tracker") }}</h3>
+{% block body %}
+       <div class="page-header">
+               <h1>{{ _("IPFire Torrent Tracker") }}</h1>
+       </div>
+
+       {% if lang == "de" %}
 
-               <img src="{{ static_url("images/page_icons/download-torrents.png") }}"
-                       class="floatTR" border="0" alt="{{ _("IPFire Torrent Tracker") }}" />
 
-               {% if lang == "de" %}
-                       <p>
-                               Auf dieser Seite findet man eine Liste aller Releases, die
-                               über den IPFire-Torrent-Tracker verteilt werden.
-                       <p>
-                       <p>
-                               Das Torrentnetz ist ein Netzwerk, welches Dateien durch verteilte
-                               Downloads schnell verbreitet. IPFire nutzt dieses System um
-                               Downloads der Distributionsimages bereitzustellen.
-                       </p>
-                       <p>
-                               Mehr Informationen zu Torrent-Netzwerken gibt es in der
-                               <a href="http://de.wikipedia.org/wiki/BitTorrent"
-                               target="_blank">Wikipedia</a>.
-                       </p>
-               {% else %}
-                       <p>
-                               This page displays a list of files that are tracked by the
-                               IPFire torrent tracker.
-                       <p>
-                       <p>
-                               The bittorrent protocol transfers large files by a distributed
-                               technology. IPFire uses this system to spread the distribution's
-                               files.
-                       </p>
-                       <p>
-                               Get more information on the bittorrent protocol on
-                               <a href="http://en.wikipedia.org/wiki/BitTorrent_(protocol)"
-                               target="_blank">Wikipedia</a>.
-                       </p>
-               {% end %}
-               
-               <br class="clear" />
-               
+       {% else %}
+               <p>
+                       This is the home of the IPFire torrent tracker.
+                       This tracker is used to distribute the IPFire
+                       downloads in an efficient way with help of the Bittorrent
+                       protocol.
+               </p>
+               <p>
+                       The Bittorrent protocol transfers large files from one
+                       peer to an other without need to download data from
+                       a central server. However, there is a server which is
+                       called the tracker that enables the clients to talk to
+                       each other.
+               </p>
+       {% end %}
+
                <table class="download-torrents">
                        <tr>
                                <th>{{ _("Release") }}</th>
@@ -59,6 +41,4 @@
                        {% end %}
                </table>
 
-               <br class="clear" />
-       </div>
 {% end block %}
diff --git a/www/translations/de_DE.csv b/www/translations/de_DE.csv
deleted file mode 100644 (file)
index 348c3c3..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-"Alix image","Alix-Image"
-"An image that is meant to run on embedded devices.","Fertiges Image für Embedded-Geräte."
-"Arch","Arch"
-"Area","Bereich"
-"A ready-to-run image for Xen.","Schlüsselfertiges Xen-Image."
-"Begin download","Download starten"
-"by","von"
-"CeBIT-Donation","CeBIT-Spende"
-"Cluster's CPU load","Prozessorauslastung des Clusters"
-"Connections","Verbindungen"
-"CPU-Load","CPU-Auslastung"
-"Current unstable","Entwicklungsversion"
-"Current version","Aktuelle Version"
-"Description","Beschreibung"
-"Development","Entwicklung"
-"DHCP Server","DHCP-Server"
-"Download file","Datei herunterladen"
-"Download the CD image from the torrent network.","Laden Sie das CD-Image über das Torrent Netzwerk."
-"File","Datei"
-"Firewall","Firewall"
-"Fuzzy","Fuzzy"
-"Fw-Logdgraphs (IP)","Fw-Logdgraphs (IP)"
-"Got that information from <em>%s</em> within %.2f second(s).","Dauer der Abfrage von <em>%s</em>: %.2f Sekunde(n)."
-"Home","Startseite"
-"If the floppy image doesn't work, use this image instead.","USB-Stick-Image als Harddisk formatiert."
-"imprint","Impressum"
-"Installable CD image","Bootbares CD-Image"
-"Install IPFire from a floppy-formated USB key.","Installationsimage für USB-Sticks als Floppy formatiert."
-"IPFire in the press","IPFire in der Presse"
-"IPSec","IPSec"
-"Job load","Job-Auslastung"
-"Jobs","Jobs"
-"Language","Sprache"
-"Logos and print artworks","Logos und Druckvorlagen"
-"More security for your network","mehr sicherheit für Ihr netzwerk"
-"Name","Name"
-"Network","Netzwerk"
-"Network (other)","Netzwerk (sonstige)"
-"Number of nodes","Anzahl der Knoten"
-"Other download options","Weitere Downloadoptionen"
-"Outgoing Firewall","Ausgehende Firewall"
-"Pakfire","Pakfire"
-"Pregenerated Xen image","Xen-Image"
-"Press kit","Pressemappe"
-"Press","Presse"
-"Previous posts >>","Vorherige Einträge >>"
-"Proxy Reports","Proxyberichte"
-"Public Relations","Public Relations"
-"Quality of Service","Quality of Service"
-"<strong>release</strong> information","<strong>Release</strong>informationen"
-"Release","Release"
-"Samba","Samba"
-"See all torrents...","Alle Torrent-Downloads anzeigen..."
-"See development releases...","Entwicklungsversionen anzeigen..."
-"See older downloads...","Ältere Downloads anzeigen..."
-"Services","Dienste"
-"Sponsoring","Sponsoring"
-"Status","Status"
-"<strong>Online</strong> media","<strong>Online</strong>medien"
-"<strong>Print</strong> media","<strong>Print</strong>medien"
-"System","System"
-"Template","Vorlage"
-"Torrent file","Torrent-Download"
-"Translated","Übersetzt"
-"Translation Status","Übersetzungsüberblick"
-"Untranslated","Nicht übersetzt"
-"USB FDD image","USB-Floppy-Image"
-"USB HDD image","USB-Harddisk-Image"
-"Use this image to burn a CD and install IPFire from it.","Brennen Sie dieses Image und booten Sie die Installation davon."
-"Owner (Hostname)","Eigentümer (Hostname)"
-"Priority","Priorität"
-"Location","Standort"
-"Latency","Latenz"
-"Legend","Legende"
-"Server is reachable","Server ist erreichbar"
-"Server is unreachable","Server ist nicht erreichbar"
-"Get back to latest stable downloads.","Zurück zur aktuellen Version."
-"Here you will find the downloads for the version","Hier findet ihr die Downloads für die Version"
-"These are the ancient downloads of IPFire. They are just saved for historical reasons and should not be used in a productive environment.","Dies sind veraltete Downloads von IPFire. Sie sind nur aus historischen Gründen gespeichert und sollten nicht mehr in einer produktiven Umgebung eingesetzt werden."
-"Donation","Spende"
-"Development Area","Entwicklungsbereich"
-"See a list of mirrors...","Liste der Mirror-Server anzeigen..."
-"Flash image where a serial console is enabled by default.","Flash-Image mit eingeschalteter serieller Konsole."
-"Flash image","Flash-Image"
-"Licenses","Lizenzen"
-"firewall functions","Firewallfunktionalitäten"
-"essential networking services","Grundlegende Netzwerkdienste"
-"http proxy","Web-Proxy"
-"virtual private networking","Virtuelle private Netzwerke"
-"supported connection types","Unterstützte Verbindungstypen"
-"configuration","Konfiguration"
-"monitoring","Überwachung"
-"Torrent Downloads","Torrent-Downloads"
-"Development Downloads","Experimentelle Downloads"
-"Ancient Downloads","Veraltete Downloads"
-"1 second ago","Vor einer Sekunde"
-"%(seconds)d seconds ago","vor %(seconds)d Sekunden"
-"1 minute ago","Vor einer Minute"
-"%(minutes)d minutes ago","Vor %(minutes)d Minuten"
-"1 hour ago","Vor einer Stunde"
-"%(hours)d hours ago","Vor %(hours)d Stunden"
-"%(time)s","%(time)s"
-"yesterday","gestern"
-"yesterday at %(time)s","gestern um %(time)s"
-"%(weekday)s","%(weekday)s"
-"%(weekday)s at %(time)s","%(weekday)s um %(time)s"
-"%(month_name)s %(day)s","%(day)s. %(month_name)s"
-"%(month_name)s %(day)s at %(time)s","%(day)s. %(month_name)s um %(time)s"
-"%(month_name)s %(day)s, %(year)s","%(day)s. %(month_name)s %(year)s"
-"%(month_name)s %(day)s, %(year)s at %(time)s","%(day)s. %(month_name)s %(year)s um %(time)s"
-"Posted by %s on","Gepostet von %s am"
-"January","Januar"
-"February","Februar"
-"March","März"
-"April","April"
-"May","Mai"
-"June","Juni"
-"July","Juli"
-"August","August"
-"September","September"
-"October","Oktober"
-"Nomvember","November"
-"December","Dezember"
-"Monday","Montag"
-"Tuesday","Dienstag"
-"Wednesday","Mittwoch"
-"Thursday","Donnerstag"
-"Friday","Freitag"
-"Saturday","Samstag"
-"Sunday","Sonntag"
-"Read more","Mehr..."
-"Last update","Letzte Aktualisierung"
-"Out of synchronization","Nicht synchronisiert"
-"Up","Online"
-"Down","Offline"
-"Unknown","Unbekannt"
-"List of servers","Liste der Server"
-"List of all mirror servers","Liste aller Mirror-Server"
-"Flexibility","Flexibilität"
-"Security","Sicherheit"
-"Learn more.","Mehr erfahren."
-"Get involved.","Mitmachen."
-"See what makes IPFire so great:","Was macht IPFire so besonders?"
-"Subscribe to the latest news of IPFire","Neuigkeiten von IPFire abbonieren"
-"See newer entries","Aktuellere Beiträge"
-"See older entries","Ältere Beiträge"
-"Posted by","Gepostet von"
-"on","am"
-"Last updated on","Zuletzt aktualisiert am"
-"%s did no postings, yet.","%s hat bisher noch keine Beiträge verfasst."
-"People on the planet","Vom Planeten IPFire..."
-"About","Über IPFire"
-"Recent news","Vorangegangene Neuigkeiten"
-"All posts","Alle Einträge"
-"All rights reserved.","Alle Rechte vorbehalten."
-"release information","Release-Informationen"
-"Quick links","Links"
-"About IPFire","Über IPFire"
-"<< Back to home","<< Zurück zur Startseite"
-"State","Status"
-"Open mirror","Mirror öffnen"
-"Virtualization","Virtualisierung"
-"It's free","IPFire ist frei"
-"Package management","Paketmanagement"
-"Really important guides are:","Empfehlenswerte Artikel sind:"
-"Installation guide","Installationsanleitung"
-"Learn how to start.","Wie fängt man an?"
-"Server","Server"
-"Channel","Channel"
-"Getting support","Support"
-"Concept of the system","Konzept"
-"Hardware section on the wiki","Hardware-Sektion im Wiki"
-"Hardware compatibility list","Hardwarekompatibilitätsliste"
-"networking","Netzwerk"
-"How to install a package?","Wie wird ein Paket installiert?"
-"Full list of installable addons","Komplette Liste aller Addons"
-"Outgoing firewall configuration","Konfiguration der ausgehenden Firewall"
-"Learn more about configuring a VPN connection","Mehr über die VPN-Konfiguration erfahren"
-"Go to the planet","Den planet besuchen"
-"Source code","Quellcode"
-"Important howtos","Wichtige Howtos"
-"Building IPFire","IPFire bauen"
-"Building a new addon","Ein neues Addon bauen"
-"Creating a language file","Eine neue Sprachdatei erstellen"
-"Development for IPFire 2.x","Entwicklung von IPFire 2.x"
-"Development for IPFire 3.x","Entwicklung von IPFire 3.x"
-"green","grün"
-"blue","blau"
-"red","rot"
-"orange","orange"
-"GREEN","GRÜN"
-"BLUE","BLAU"
-"RED","ROT"
-"ORANGE","ORANGE"
-"Networks: %s","Netzwerke: %s"
-"Mem: %s","RAM: %s"
-"Disk: %s","HDD: %s"
-"Unclassified","Unklassifiziert"
-"Mass storage","Massenspeicher"
-"Memory controller","Speicher-Controller"
-"Bridge","Bridges"
-"Communication","Kommunikation"
-"Generic system peripheral","Sonstige Peripherie"
-"Input device","Eingabegerät"
-"Docking station","Docking-Station"
-"Processor","Prozessor"
-"Serial bus","Serieller Bus"
-"Intelligent controller","Intelligenter Controller"
-"Satellite communications controller","Satellitenkommunikations-Controller"
-"Encryption","Verschlüsselung"
-"Signal processing controller","Signalverarbeitungsprozessor"
-"Unassigned class","Nicht zugewiesene Klasse"
-"Image","Bildverarbeitung"
-"Printer","Drucker"
-"Smart card","Smart Card"
-"Personal Healthcare","Gesundheit"
-"Diagnostic Device","Diagnosegerät"
-"Vendor","Hersteller"
-"Model","Modell"
-"Network configuration","Netzwerkkonfiguration"
-"Operating system","Betriebssystem"
-"This device is installed on approximately %.2f%% of all systems.","Dieses Gerät ist schätzungsweise in %.2f%% aller Geräte verbaut."
-"Show profile","Profil anzeigen"
-"What is fireinfo?","Was ist fireinfo?"
-"Version","Version"
-"Architecture","Architektur"
-"Kernel version","Kernel-Version"
-"Hypervisor","Hypervisor"
-"This machine is running in a virtual environment.","Diese Maschine läuft in einer virtuellen Umgebung."
-"Type","Typ"
-"Core count","Anzahl der Kerne"
-"Speed","Geschwindigkeit"
-"Supported features","Unterstützte Features"
-"64 bit","64-Bit"
-"Memory","Speicher"
-"Size","Größe"
-"Disk","Festplatte"
-"Signature images","Signaturbilder"
-"Signature image","Signaturbild"
-"Module","Modul"
-"Processors","Prozessoren"
-"Processor flags","Prozessor-Flags"
-"IPFire versions","IPFire-Versionen"
-"Geographical information","Geographische Informationen"
-"CPUs that support virtualization","CPUs mit Virtualisierungserweiterungen"
-"CPUs with PAE","CPUs mit PAE"
-"CPUs that support 64 bits","CPUs mit 64-Bit-Unterstützung"
-"CPU vendors","Prozessor-Hersteller"
-"See statistics about common CPU flags","Statistiken über wichtige CPU-Flags"
-"The average speed of all systems in the database is: <strong>%.2f MHz</strong>.","Die durchschnittliche Geschwindigkeit aller Systeme beträgt: <strong>%.2f MHz</strong>."
-"Language selection","Sprachauswahl"
-"Geo locations","Geographische Standorte"
-"The average amount of memory of all systems in the database is: <strong>%.2f MB</strong>.","Die durchschnittliche Menge an Arbeitsspeicher aller Systeme beträgt: <strong>%.2f MB</strong>."
-"Kernels","Kernel"
-"fireinfo statistics","Fireinfo-Statistiken"
-"Go to the wiki","Zum Wiki"
-"Documentation","Dokumentation"
-"Configuration","Konfiguration"
-"Mirror servers nearby","Mirror-Server in der Nähe"
-"Worldwide mirror servers","Weltweite Mirror-Server"
-"Preferred for","Bevorzugt für"
-"Profile not found","Profil nicht gefunden"
-"See a breakdown of the CPU cores that are installed on the IPFire systems.","Hier ist eine Übersicht über die Anzahl der CPU-Kerne, die in den IPFire-Systemen installiert sind."
-"CPU cores counter","CPU-Kerne"
-"All together, there are <strong>%s bogomips</strong> out there.","Insgesamt bringen es alle Systeme auf <strong>%s bogomips</strong>."
-"Have you already seen?","Schon gesehen?"
-"talks about","redet über"
-"on the IPFire planet.","auf dem IPFire planet."
diff --git a/www/translations/de_DE/LC_MESSAGES/webapp.po b/www/translations/de_DE/LC_MESSAGES/webapp.po
new file mode 100644 (file)
index 0000000..63868b7
--- /dev/null
@@ -0,0 +1,1600 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-07-15 11:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: templates/downloads-index.html:6
+msgid "IPFire Download Center"
+msgstr "IPFire Download-Center"
+
+#: templates/downloads-index.html:24 templates/downloads-index.html:39
+#: templates/modules/release-item.html:2
+#: templates/modules/sidebar-release.html:4
+msgid "Latest release"
+msgstr "Neuestes Release"
+
+#: templates/downloads-index.html:25
+msgid "List of older downloads"
+msgstr "Liste älterer Downloads"
+
+#: templates/downloads-index.html:26 templates/downloads-index.html:41
+msgid "Development releases"
+msgstr "Entwicklungsreleases"
+
+#: templates/downloads-index.html:27 templates/downloads-index.html:42
+#: templates/static/development.html:83
+msgid "Source code"
+msgstr "Quellcode"
+
+#: templates/downloads-index.html:37
+msgid "Download options"
+msgstr "Downloadoptionen"
+
+#: templates/downloads-index.html:40
+msgid "Older downloads"
+msgstr "Ältere Downloads"
+
+#: templates/downloads-index.html:45
+msgid "Other options"
+msgstr "Andere Optionen"
+
+#: templates/downloads-index.html:47
+msgid "Mirror list"
+msgstr "Mirrorliste"
+
+#: templates/stasy-profile.html:3 templates/stasy-profile.html:6
+msgid "Profile lookup"
+msgstr "Profilsuche"
+
+#: templates/admin-downloads-base.html:5
+msgid "Back to home"
+msgstr "Zurück zur Startseite"
+
+#: templates/admin-downloads-base.html:8 templates/admin-base.html:6
+msgid "Options"
+msgstr "Optionen"
+
+#: templates/admin-downloads-base.html:11
+msgid "Mirror stats"
+msgstr "Mirrorstatistiken"
+
+#: templates/downloads-older.html:3 templates/downloads-older.html:7
+msgid "Ancient downloads"
+msgstr "Veraltete Downloads"
+
+#: templates/downloads-older.html:10 templates/downloads-all.html:10
+msgid ""
+"These are the ancient downloads of IPFire. They are just saved for "
+"historical reasons and should not be used in a productive environment."
+msgstr ""
+"Dieses sind veraltete Downloads von IPFire. Sie wurden hier archiviert und "
+"sollten nicht in produktiven Umgebungen eingesetzt werden."
+
+#: templates/downloads-older.html:14
+msgid ""
+"Beware that these releases could lack possible security-fixes\tand so it is "
+"recommended to use the <em>latest</em> version."
+msgstr ""
+"Achtung! Diese Releases könnten potentielle Sicherheitsprobleme aufweisen. "
+"Daher wird empfohlen die <em>neueste</em> Version einzusetzen."
+
+#: templates/downloads-older.html:18 templates/downloads-all.html:14
+msgid "Go back to latest stable downloads."
+msgstr "Zurück zu den neuesten stabilen Downloads."
+
+#: templates/downloads-older.html:26 templates/tracker-torrent-detail.html:12
+#: templates/tracker-torrents.html:31
+msgid "Release"
+msgstr "Release"
+
+#: templates/downloads-older.html:27
+msgid "Published on"
+msgstr "Veröffentlicht am"
+
+#: templates/admin-login.html:3
+msgid "Please login"
+msgstr "Bitte einloggen"
+
+#: templates/mirrors-item.html:3
+#, python-format
+msgid "Mirror %s"
+msgstr "Mirror %s"
+
+#: templates/mirrors-item.html:8
+msgid "Up"
+msgstr "Verfügbar"
+
+#: templates/mirrors-item.html:10
+msgid "Down"
+msgstr "Nicht verfügbar"
+
+#: templates/mirrors-item.html:12
+msgid "Out of sync"
+msgstr "Nicht synchronisiert"
+
+#: templates/mirrors-item.html:14 templates/stasy-profile-detail.html:74
+#: templates/stasy-profile-detail.html:82
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: templates/mirrors-item.html:22 templates/downloads-mirrors.html:51
+#: templates/stasy-profile-detail.html:231
+#: templates/download-mirror-detail.html:21 templates/admin-mirrors.html:15
+msgid "Last update"
+msgstr "Letztes Update"
+
+#: templates/mirrors-item.html:26 templates/downloads-mirrors.html:48
+#: templates/admin-mirrors-create.html:20
+#: templates/download-mirror-detail.html:17
+#: templates/admin-mirrors-details.html:21
+msgid "Owner"
+msgstr "Eigentümer"
+
+#: templates/mirrors-item.html:31
+msgid "Preferred for"
+msgstr "Bevorzugt für"
+
+#: templates/mirrors-item.html:37
+msgid "Go to mirror"
+msgstr "Zum Mirror"
+
+#: templates/mirrors-item.html:42
+msgid "Mirror location"
+msgstr "Mirrorort"
+
+#: templates/mirrors-item.html:44
+#, python-format
+msgid "The mirror <em>%s</em> is located in %s."
+msgstr "Der Mirrorserver <em>%s</em> befindet sich in %s."
+
+#: templates/admin-downloads-mirrors.html:5 templates/admin-downloads.html:5
+msgid "Download statistics"
+msgstr "Downloadstatistiken"
+
+#: templates/admin-downloads-mirrors.html:7
+msgid "Mirror load from today"
+msgstr "Mirrorauslastung von heute"
+
+#: templates/admin-downloads-mirrors.html:10
+msgid "Mirror load"
+msgstr "Mirrorauslastung"
+
+#: templates/tracker-torrent-detail.html:3 templates/tracker-torrents.html:3
+msgid "Torrent Downloads"
+msgstr "Torrent-Downloads"
+
+#: templates/tracker-torrent-detail.html:7 templates/tracker-torrents.html:7
+msgid "IPFire Torrent Tracker"
+msgstr "IPFire Torrent-Tracker"
+
+#: templates/tracker-torrent-detail.html:18
+msgid "Hash"
+msgstr "Hash"
+
+#: templates/tracker-torrent-detail.html:26 templates/tracker-torrents.html:33
+msgid "Peers"
+msgstr "Peers"
+
+#: templates/tracker-torrent-detail.html:31
+msgid "Seeds"
+msgstr "Seeds"
+
+#: templates/stasy-stats-geo.html:3 templates/stasy-stats-geo.html:7
+#: templates/stasy-stats.html:50
+msgid "Geo locations"
+msgstr "Geographischer Standort"
+
+#: templates/stasy-stats-geo.html:28
+msgid "Language selection"
+msgstr "Sprachauswahl"
+
+#: templates/stasy-stats-network.html:3 templates/stasy-stats.html:118
+#: templates/stasy-profile-detail.html:95
+msgid "Network"
+msgstr "Netzwerk"
+
+#: templates/stasy-stats-network.html:7
+msgid "Network configuration"
+msgstr "Netzwerkkonfiguration"
+
+#: templates/sources.html:3
+msgid "Sources"
+msgstr "Quellen"
+
+#: templates/sources.html:6
+msgid "Source Code"
+msgstr "Quellcode"
+
+#: templates/sources.html:9
+#, python-format
+msgid "There are %s source files on the server."
+msgstr "Es befinden sich %s Quelldateien auf dem Server."
+
+#: templates/news-author.html:7
+#, python-format
+msgid "%s's announcements"
+msgstr "%ss Ankündigungen"
+
+#: templates/planet-main.html:3 templates/planet-main.html:7
+#: templates/planet-user.html:3 templates/planet-posting.html:3
+msgid "IPFire Planet"
+msgstr "IPFire Planet"
+
+#: templates/planet-main.html:43 templates/planet-user.html:19
+#: templates/news.html:31
+msgid "Older posts"
+msgstr "Ältere Beiträge"
+
+#: templates/planet-main.html:47 templates/planet-user.html:23
+#: templates/news.html:35
+msgid "Newer posts"
+msgstr "Neuere Beiträge"
+
+#: templates/planet-main.html:58
+msgid "Subscribe"
+msgstr "Abbonieren"
+
+#: templates/planet-main.html:72
+msgid "Feed"
+msgstr "Feed"
+
+#: templates/planet-main.html:82
+msgid "People on the IPFire planet"
+msgstr "Auf dem IPFire Planet"
+
+#: templates/stasy-stats-virtual.html:3 templates/stasy-stats.html:139
+#: templates/base-feature.html:65
+#: templates/static/features/virtualization.html:3
+#: templates/static/features/virtualization.html:8
+msgid "Virtualization"
+msgstr "Virtualisierung"
+
+#: templates/stasy-stats-virtual.html:7
+msgid "Virtualization support"
+msgstr "Virtualisierungsunterstützung"
+
+#: templates/stasy-stats-virtual.html:35
+msgid "Hypervisors"
+msgstr "Hypervisoren"
+
+#: templates/admin-index.html:5
+msgid "Admin Area"
+msgstr "Adminbereich"
+
+#: templates/admin-base.html:3
+msgid "IPFire Admin Area"
+msgstr "IPFire Adminbereich"
+
+#: templates/admin-base.html:9
+msgid "Accounts"
+msgstr "Accounts"
+
+#: templates/admin-base.html:10 templates/modules/menu.html:89
+msgid "Mirrors"
+msgstr "Mirrors"
+
+#: templates/admin-base.html:11 templates/modules/menu.html:71
+msgid "Planet"
+msgstr "Planet"
+
+#: templates/admin-base.html:12 templates/downloads.html:3
+msgid "Downloads"
+msgstr "Downloads"
+
+#: templates/admin-planet-compose.html:5 templates/admin-planet.html:8
+msgid "Compose new entry"
+msgstr "Neuen Beitrag erstellen"
+
+#: templates/admin-planet-compose.html:14 templates/admin-planet.html:14
+msgid "Title"
+msgstr "Titel"
+
+#: templates/stasy-stats-cpus.html:3
+msgid "Processors"
+msgstr "Prozessoren"
+
+#: templates/stasy-stats-cpus.html:7 templates/stasy-stats.html:71
+msgid "Hardware: CPUs"
+msgstr "Hardware: CPUs"
+
+#: templates/stasy-stats-cpus.html:12
+msgid "See statistics about common CPU flags"
+msgstr "Statistiken über CPU-Funktionen"
+
+#: templates/stasy-stats-cpus.html:19
+msgid "Vendors"
+msgstr "Hersteller"
+
+#: templates/stasy-stats-cpus.html:36 templates/stasy-profile-detail.html:154
+msgid "Speed"
+msgstr "Geschwindigkeit"
+
+#: templates/stasy-stats-cpus.html:38
+#, python-format
+msgid ""
+"The average speed of all systems in the database is: <strong>%.2f MHz</"
+"strong>."
+msgstr ""
+"Die durchschnittliche Geschwindigkeit aller System ist: <strong>%.2f MHz</"
+"strong>."
+
+#: templates/stasy-stats-cpus.html:40
+#, python-format
+msgid "All together, there are <strong>%s bogomips</strong> out there."
+msgstr "Zusammengenomen sind es <strong>%s Bogomips</strong>."
+
+#: templates/stasy-stats-cpus.html:48
+msgid "CPU core counter"
+msgstr "CPU Kerne"
+
+#: templates/stasy-stats-cpus.html:50
+msgid ""
+"See a breakdown of the CPU cores that are installed on the IPFire systems."
+msgstr "Eine Übersicht über die CPU Kerne, der IPFire Systeme."
+
+#: templates/stasy-stats-memory.html:3 templates/stasy-stats-memory.html:7
+msgid "Memory"
+msgstr "Arbeitsspeicher"
+
+#: templates/stasy-stats-memory.html:13
+#, python-format
+msgid ""
+"The average amount of memory of all systems in the database is: <strong>%.2f "
+"MB</strong>."
+msgstr ""
+"Die durchschnittliche Menge an Arbeitsspeicher aller System ist: <strong>"
+"%.2f MB</strong>."
+
+#: templates/download-splash.html:3 templates/download-splash.html:8
+msgid "Thanks for downloading IPFire!"
+msgstr "Vielen Dank, für das herunterladen von IPFire! "
+
+#: templates/download-splash.html:15 templates/static/donation.html:7
+msgid "Please consider donating!"
+msgstr "Wir bitten um eine Spende!"
+
+#: templates/download-splash.html:42 templates/modules/menu.html:109
+#: templates/static/getinvolved.html:61
+msgid "Donate"
+msgstr "Spenden"
+
+#: templates/download-splash.html:66
+msgid "Next steps"
+msgstr "Nächste Schritte"
+
+#: templates/download-splash.html:71
+msgid "Install IPFire"
+msgstr "IPFire installieren"
+
+#: templates/download-splash.html:86
+msgid "Access documentation"
+msgstr "Dokumentation lesen"
+
+#: templates/download-splash.html:103 templates/static/getinvolved.html:94
+msgid "Join the community"
+msgstr "Der Community beitreten"
+
+#: templates/downloads-development.html:3
+#: templates/downloads-development.html:6
+msgid "Development Downloads"
+msgstr "Development Downloads"
+
+#: templates/error-500.html:6
+msgid "Detailed information"
+msgstr "Mehr Informationen"
+
+#: templates/admin-planet.html:5
+msgid "Planet Administrator"
+msgstr "Planet Administrator"
+
+#: templates/admin-planet.html:13
+msgid "Author"
+msgstr "Autor"
+
+#: templates/admin-planet.html:21 templates/admin-mirrors.html:24
+#: templates/admin-accounts.html:20
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: templates/downloads-mirrors.html:3 templates/download-mirror-detail.html:3
+msgid "Mirror-Server"
+msgstr "Mirrorserver"
+
+#: templates/downloads-mirrors.html:8 templates/download-mirror-detail.html:8
+msgid "IPFire Mirrors"
+msgstr "IPFire Mirrors"
+
+#: templates/downloads-mirrors.html:49 templates/admin-mirrors-create.html:12
+#: templates/download-mirror-detail.html:13 templates/admin-mirrors.html:14
+#: templates/admin-mirrors-details.html:13
+msgid "Hostname"
+msgstr "Hostname"
+
+#: templates/downloads-mirrors.html:50 templates/admin-mirrors-create.html:24
+#: templates/admin-mirrors-details.html:25
+msgid "Location"
+msgstr "Standort"
+
+#: templates/downloads-mirrors.html:64
+msgid "details"
+msgstr "Details"
+
+#: templates/stasy-stats-cpu-flags.html:3
+msgid "CPU flags"
+msgstr "CPU Flags"
+
+#: templates/stasy-stats-cpu-flags.html:7
+msgid "Processor flags"
+msgstr "Prozessor-Flags"
+
+#: templates/stasy-stats-cpu-flags.html:30
+msgid "CPUs that support 64 bits"
+msgstr "CPUs, die 64 Bit unterstützen"
+
+#: templates/stasy-stats-cpu-flags.html:46
+msgid "CPUs with PAE"
+msgstr "CPUs mit PAE"
+
+#: templates/stasy-stats-cpu-flags.html:62
+msgid "CPUs that support virtualization"
+msgstr "CPUs, die Virtualisierung unterstützen"
+
+#: templates/planet-user.html:30
+#, python-format
+msgid "%s did not write any posts, yet."
+msgstr "%s hat bisher noch keine Beiträge verfasst."
+
+#: templates/planet-user.html:44 templates/static/press.html:31
+#: templates/static/imprint.html:25 templates/static/imprint.html:37
+#: templates/static/imprint.html:49 templates/static/imprint.html:61
+msgid "Mail"
+msgstr "Mail"
+
+#: templates/downloads.html:7 templates/downloads-all.html:7
+msgid "Download IPFire"
+msgstr "IPFire herunterladen"
+
+#: templates/downloads.html:39
+msgid "Get yourself involved"
+msgstr "Selbst mitmachen"
+
+#: templates/downloads.html:55
+msgid "Need help with the first steps?"
+msgstr "Hilfe bei den ersten Schritten?"
+
+#: templates/admin-mirrors-create.html:5 templates/admin-mirrors.html:8
+msgid "Create new mirror"
+msgstr "Neuen Mirror erstellen"
+
+#: templates/admin-mirrors-create.html:16
+msgid "Path"
+msgstr "Pfad"
+
+#: templates/admin-mirrors-create.html:28
+#: templates/admin-mirrors-details.html:33
+msgid "File mirror"
+msgstr "Dateimirror"
+
+#: templates/admin-mirrors-create.html:31
+#: templates/admin-mirrors-create.html:40
+#: templates/admin-mirrors-create.html:49
+#: templates/admin-mirrors-create.html:58
+msgid "yes"
+msgstr "Ja"
+
+#: templates/admin-mirrors-create.html:32
+#: templates/admin-mirrors-create.html:41
+#: templates/admin-mirrors-create.html:50
+#: templates/admin-mirrors-create.html:59
+msgid "no"
+msgstr "Nein"
+
+#: templates/admin-mirrors-create.html:37
+#: templates/admin-mirrors-details.html:37
+msgid "Pakfire 2 mirror"
+msgstr "Pakfire 2 Mirror"
+
+#: templates/admin-mirrors-create.html:46
+#: templates/admin-mirrors-details.html:41
+msgid "Pakfire 3 mirror"
+msgstr "Pakfire 3 Mirror"
+
+#: templates/admin-mirrors-create.html:55
+#: templates/admin-mirrors-details.html:45
+msgid "Disabled?"
+msgstr "Ausgeschaltet?"
+
+#: templates/planet-posting.html:18 templates/modules/planet-entry.html:18
+msgid "Posted by"
+msgstr "Erstellt von"
+
+#: templates/planet-posting.html:19 templates/modules/planet-entry.html:19
+msgid "on"
+msgstr "am"
+
+#: templates/admin-downloads.html:7
+msgid "Download counters"
+msgstr "Downloadzähler"
+
+#: templates/admin-downloads.html:10
+msgid "Today"
+msgstr "Heute"
+
+#: templates/admin-downloads.html:14
+msgid "Yesterday"
+msgstr "Gestern"
+
+#: templates/admin-downloads.html:18
+msgid "Total"
+msgstr "Insgesamt"
+
+#: templates/admin-downloads.html:23
+msgid "Downloads by country"
+msgstr "Downloads pro Land"
+
+#: templates/stasy-stats.html:3 templates/modules/menu.html:117
+msgid "Statistics"
+msgstr "Statistiken"
+
+#: templates/stasy-stats.html:7
+msgid "fireinfo statistics"
+msgstr "Fireinfo Statistiken"
+
+#: templates/stasy-stats.html:29
+msgid "IPFire versions"
+msgstr "IPFire-Versionen"
+
+#: templates/stasy-stats.html:85
+msgid "CPU features"
+msgstr "CPU-Funktionen"
+
+#: templates/stasy-stats.html:97
+msgid "Hardware: Memory"
+msgstr "Hardware: Arbeitsspeicher"
+
+#: templates/news.html:7
+msgid "What is new on the IPFire project?"
+msgstr "Was gibt es neues im IPFire Projekt?"
+
+#: templates/base-feature.html:6 templates/static/features.html:3
+#: templates/static/features.html:7
+msgid "About IPFire"
+msgstr "Über IPFire"
+
+#: templates/base-feature.html:9 templates/static/features/security.html:3
+#: templates/static/features/security.html:9 templates/index.html:76
+msgid "Security"
+msgstr "Sicherheit"
+
+#: templates/base-feature.html:12 templates/static/features/firewall.html:3
+#: templates/static/features/firewall.html:9
+msgid "Firewall"
+msgstr "Firewall"
+
+#: templates/base-feature.html:15 templates/static/features/pakfire.html:3
+msgid "Pakfire"
+msgstr "Pakfire"
+
+#: templates/base-feature.html:18 templates/static/features/updates.html:3
+#: templates/static/features/updates.html:7
+msgid "Updates"
+msgstr "Updates"
+
+#: templates/base-feature.html:21
+msgid "It's free"
+msgstr "IPFire ist frei"
+
+#: templates/base-feature.html:25
+msgid "Features"
+msgstr "Features"
+
+#: templates/base-feature.html:28 templates/static/features/dialup.html:3
+#: templates/static/features/dialup.html:7
+msgid "Dialup"
+msgstr "Einwahl"
+
+#: templates/base-feature.html:31 templates/static/features/proxy.html:3
+#: templates/static/features/proxy.html:7
+msgid "Web proxy"
+msgstr "Webproxy"
+
+#: templates/base-feature.html:35
+#: templates/static/features/proxy/content-filter.html:3
+msgid "Content filter"
+msgstr "Inhaltsfilter"
+
+#: templates/base-feature.html:38
+#: templates/static/features/proxy/update-accelerator.html:3
+msgid "Update accelerator"
+msgstr "Update Accelerator"
+
+#: templates/base-feature.html:41
+msgid "Virus scan"
+msgstr "Virusscanner"
+
+#: templates/base-feature.html:45 templates/static/features/vpn/ipsec.html:3
+#: templates/static/features/vpn/openvpn.html:3
+#: templates/static/features/vpn.html:3 templates/static/features/vpn.html:9
+msgid "VPN"
+msgstr "VPN"
+
+#: templates/base-feature.html:49 templates/static/features/vpn/ipsec.html:3
+msgid "IPsec"
+msgstr "IPsec"
+
+#: templates/base-feature.html:52 templates/static/features/vpn/openvpn.html:3
+msgid "OpenVPN"
+msgstr "OpenVPN"
+
+#: templates/base-feature.html:56
+msgid "Intrusion detection"
+msgstr "Einbruchsdetektion"
+
+#: templates/base-feature.html:59 templates/static/features/qos.html:3
+#: templates/static/features/qos.html:7
+msgid "Quality of Service"
+msgstr "Quality of Service"
+
+#: templates/base-feature.html:62 templates/stasy-profile-detail.html:119
+#: templates/static/features/hardware.html:3
+#: templates/static/features/hardware.html:8
+msgid "Hardware"
+msgstr "Hardware"
+
+#: templates/base-feature.html:68
+msgid "Wireless AP"
+msgstr "WLAN-Access-Point"
+
+#: templates/stasy-profile-detail.html:3 templates/stasy-profile-detail.html:7
+msgid "Profile"
+msgstr "Profil"
+
+#: templates/stasy-profile-detail.html:12 templates/stasy-stats-oses.html:3
+msgid "Operating system"
+msgstr "Betriebssystem"
+
+#: templates/stasy-profile-detail.html:16
+msgid "Version"
+msgstr "Version"
+
+#: templates/stasy-profile-detail.html:24
+msgid "Architecture"
+msgstr "Architektur"
+
+#: templates/stasy-profile-detail.html:32
+msgid "Kernel version"
+msgstr "Kernelversion"
+
+#: templates/stasy-profile-detail.html:43
+msgid "Hypervisor"
+msgstr "Hypervisor"
+
+#: templates/stasy-profile-detail.html:45
+msgid "This machine is running in a virtual environment."
+msgstr "Diese Maschine läuft in einer virtuellen Umgebung."
+
+#: templates/stasy-profile-detail.html:51
+#: templates/stasy-profile-detail.html:71
+#: templates/stasy-profile-detail.html:130
+msgid "Vendor"
+msgstr "Hersteller"
+
+#: templates/stasy-profile-detail.html:59
+msgid "Type"
+msgstr "Typ"
+
+#: templates/stasy-profile-detail.html:67
+msgid "Hardware vendor"
+msgstr "Hardwarehersteller"
+
+#: templates/stasy-profile-detail.html:79
+#: templates/stasy-profile-detail.html:138
+msgid "Model"
+msgstr "Modell"
+
+#: templates/stasy-profile-detail.html:97
+msgid "Enabled network zones"
+msgstr "Eingeschaltete Netzwerkzonen"
+
+#: templates/stasy-profile-detail.html:125
+msgid "CPU"
+msgstr "CPU"
+
+#: templates/stasy-profile-detail.html:141
+msgid "Not available"
+msgstr "Nicht verfügbar"
+
+#: templates/stasy-profile-detail.html:146
+msgid "Cores"
+msgstr "Kerne"
+
+#: templates/stasy-profile-detail.html:166
+msgid "Supported features"
+msgstr "Unterstützte Funktionen"
+
+#: templates/stasy-profile-detail.html:170
+msgid "64 bit capable"
+msgstr "64-Bit fähig"
+
+#: templates/stasy-profile-detail.html:174
+msgid "PAE capable"
+msgstr "PAE fähig"
+
+#: templates/stasy-profile-detail.html:178
+msgid "VT-x/AMD-V"
+msgstr "VT-x/AMD-V"
+
+#: templates/stasy-profile-detail.html:190
+msgid "Memory size"
+msgstr "Arbeitsspeichergröße"
+
+#: templates/stasy-profile-detail.html:198
+msgid "System disk size"
+msgstr "Systemplattengröße"
+
+#: templates/stasy-profile-detail.html:211
+msgid "Peripherial devices"
+msgstr "Peripheriegeräte"
+
+#: templates/stasy-profile-detail.html:216
+msgid "Signature images"
+msgstr "Signaturbilder"
+
+#: templates/download-mirror-detail.html:25
+msgid "Number of files"
+msgstr "Anzahl von Dateien"
+
+#: templates/download-mirror-detail.html:33
+msgid "View list of all mirror servers."
+msgstr "Liste aller Mirrorserver."
+
+#: templates/downloads-all.html:3
+msgid "Ancient Downloads"
+msgstr "Veraltete Downloads"
+
+#: templates/nopaste-index.html:3 templates/nopaste-index.html:6
+msgid "IPFire nopaste service"
+msgstr "IPFire nopaste Service"
+
+#: templates/nopaste-index.html:14
+msgid "Subject"
+msgstr "Betreff"
+
+#: templates/admin-accounts-edit.html:5 templates/admin-accounts.html:5
+msgid "Account Administrator"
+msgstr "Accountadministrator"
+
+#: templates/stasy-index.html:8
+msgid "A hardware data collection tool for IPFire"
+msgstr "Ein Hardwaredatensammeltool für IPFire"
+
+#: templates/stasy-index.html:50
+msgid "Show profile"
+msgstr "Profil anzeigen"
+
+#: templates/stasy-model-detail.html:11
+#, python-format
+msgid "This device is installed on approximately %.2f%% of all systems."
+msgstr "Dieses Gerät ist in etwa %.2f%% aller Systeme installiert."
+
+#: templates/stasy-model-detail.html:14
+msgid "Feedback"
+msgstr "Feedback"
+
+#: templates/stasy-model-detail.html:28
+msgid "Go to the wiki"
+msgstr "Zum Wiki"
+
+#: templates/stasy-stats-admin.html:3
+msgid "Admin"
+msgstr "Administrator"
+
+#: templates/stasy-stats-admin.html:11
+msgid "Sending profiles"
+msgstr "Senden Profile"
+
+#: templates/stasy-stats-admin.html:19
+msgid "Archive size"
+msgstr "Archivgröße"
+
+#: templates/stasy-stats-admin.html:27
+msgid "Updates in the last 24 hours"
+msgstr "Updates innerhalb der vergangenen 24 Stunden"
+
+#: templates/base.html:4
+msgid "No title given"
+msgstr "Kein Titel"
+
+#: templates/base.html:67 templates/static/press.html:3
+#: templates/static/press.html:7
+msgid "Press"
+msgstr "Presse"
+
+#: templates/base.html:69
+msgid "imprint"
+msgstr "Impressum"
+
+#: templates/admin-mirrors.html:5
+msgid "Mirror Administrator"
+msgstr "Mirroradministrator"
+
+#: templates/admin-mirrors.html:9
+msgid "Re-check now"
+msgstr "Jetzt neu prüfen"
+
+#: templates/admin-mirrors.html:23 templates/admin-mirrors-details.html:5
+msgid "Details"
+msgstr "Details"
+
+#: templates/admin-mirrors.html:25 templates/admin-accounts.html:21
+msgid "Delete"
+msgstr "Löschen"
+
+#: templates/tracker-torrents.html:32
+msgid "Seeders"
+msgstr "Seeders"
+
+#: templates/error.html:3
+msgid "Error"
+msgstr "Error"
+
+#: templates/modules/release-item.html:12
+msgid "Choose an architecture:"
+msgstr "Architektur auswählen:"
+
+#: templates/modules/release-item.html:91
+msgid "Image type"
+msgstr "Imagetyp"
+
+#: templates/modules/release-item.html:92
+msgid "Size"
+msgstr "Größe"
+
+#: templates/modules/release-item.html:115
+#: templates/modules/release-item-short.html:13
+msgid "There are no downloads available for this release."
+msgstr "Es gibt keine Downloads für dieses Release."
+
+#: templates/modules/sidebar-release.html:9
+msgid "Download now"
+msgstr "Jetzt herunterladen"
+
+#: templates/modules/release-item-short.html:4
+msgid "Here you will find the downloads for the version"
+msgstr "Hier gibt es alle Downloads für diese Version"
+
+#: templates/modules/news-preview.html:6
+msgid "by"
+msgstr "von"
+
+#: templates/modules/download-button.html:2
+#, python-format
+msgid "Download %s"
+msgstr "Lade %s herunter"
+
+#: templates/modules/stasy-table-devices.html:6
+msgid "Kernel module"
+msgstr "Kernelmodul"
+
+#: templates/modules/menu.html:4
+msgid "Download"
+msgstr "Download"
+
+#: templates/modules/menu.html:7
+msgid "About"
+msgstr "Über"
+
+#: templates/modules/menu.html:10
+msgid "Get Involved"
+msgstr "Mitmachen"
+
+#: templates/modules/menu.html:14
+msgid "More"
+msgstr "Mehr"
+
+#: templates/modules/menu.html:18
+msgid "Documentation"
+msgstr "Dokumentation"
+
+#: templates/modules/menu.html:23
+msgid "Wiki"
+msgstr "Wiki"
+
+#: templates/modules/menu.html:28
+msgid "Support"
+msgstr "Support"
+
+#: templates/modules/menu.html:33
+msgid "Forum"
+msgstr "Forum"
+
+#: templates/modules/menu.html:39 templates/static/chat.html:3
+#: templates/static/chat.html:7
+msgid "Chat"
+msgstr "Chat"
+
+#: templates/modules/menu.html:44 templates/static/development.html:3
+#: templates/static/development.html:8 templates/static/getinvolved.html:139
+msgid "Development"
+msgstr "Entwicklung"
+
+#: templates/modules/menu.html:49
+msgid "Overview"
+msgstr "Übersicht"
+
+#: templates/modules/menu.html:55
+msgid "Pakfire Build Service"
+msgstr "Pakfire Buildsystem"
+
+#: templates/modules/menu.html:61 templates/static/development.html:44
+msgid "Bugtracker"
+msgstr "Bugtracker"
+
+#: templates/modules/menu.html:66
+msgid "Miscellaneous"
+msgstr "Verschiedenes"
+
+#: templates/modules/menu.html:77 templates/static/features/hardware.html:80
+msgid "Fireinfo"
+msgstr "Fireinfo"
+
+#: templates/modules/menu.html:83
+msgid "Mailing lists"
+msgstr "Mailinglisten"
+
+#: templates/modules/menu.html:95 templates/static/artwork.html:3
+#: templates/static/artwork.html:7
+msgid "Artwork"
+msgstr "Artwork"
+
+#: templates/modules/menu.html:101
+msgid "CeBIT"
+msgstr "CeBIT"
+
+#: templates/modules/menu.html:127
+msgid "Return to www.ipfire.org"
+msgstr "Zurück zu www.ipfire.org"
+
+#: templates/modules/news-item.html:6
+msgid "Announcement"
+msgstr "Ankündigung"
+
+#: templates/static/press.html:35
+msgid "Logo"
+msgstr "Logo"
+
+#: templates/static/development.html:28
+msgid "Development tools"
+msgstr "Entwicklungstools"
+
+#: templates/static/development.html:65
+msgid "Development Mailing List"
+msgstr "Entwicklungsmailingliste"
+
+#: templates/static/development.html:101
+msgid "IPFire Git repositories"
+msgstr "IPFire Git-Repositorien"
+
+#: templates/static/development.html:106
+msgid "Important repositories"
+msgstr "Wichtige Repositorien"
+
+#: templates/static/development.html:144
+msgid "How to build IPFire?"
+msgstr "Wie kompiliert man IPFire?"
+
+#: templates/static/development.html:178
+msgid "How to submit patches?"
+msgstr "Wie sendet man Patches?"
+
+#: templates/static/development.html:206
+msgid "How to translate IPFire?"
+msgstr "Wie übersetzt man IPFire?"
+
+#: templates/static/features/vpn/ipsec.html:7
+msgid "VPN: IPsec"
+msgstr "VPN: IPsec"
+
+#: templates/static/features/vpn/openvpn.html:7
+msgid "VPN: OpenVPN"
+msgstr "VPN: OpenVPN"
+
+#: templates/static/features/proxy/update-accelerator.html:7
+msgid "Web proxy: Update accelerator"
+msgstr "Webproxy: Update Accelerator"
+
+#: templates/static/features/proxy/virus-scanner.html:3
+msgid "Virus scanner"
+msgstr "Virenscanner"
+
+#: templates/static/features/proxy/virus-scanner.html:7
+msgid "Web proxy: Transparent virus scanner"
+msgstr "Webproxy: Transparenter Virenscanner"
+
+#: templates/static/features/proxy/content-filter.html:7
+msgid "Web proxy: Content filter"
+msgstr "Webproxy: Inhaltsfilter"
+
+#: templates/static/features/pakfire.html:11
+msgid "The IPFire package management system"
+msgstr "Das IPFire Paketmanagementsystem"
+
+#: templates/static/features/pakfire.html:113
+#: templates/static/features/hardware.html:77
+#: templates/static/features/firewall.html:168
+msgid "Further reading"
+msgstr "Mehr zum Lesen"
+
+#: templates/static/features/pakfire.html:117
+msgid "How to install a package?"
+msgstr "Wie installiert man ein Paket?"
+
+#: templates/static/features/pakfire.html:122
+msgid "List of add-ons"
+msgstr "Liste der Addons"
+
+#: templates/static/features/pakfire.html:127
+msgid "Pakfire Build System"
+msgstr "Pakfire Buildsystem"
+
+#: templates/static/features/itsfree.html:3
+#: templates/static/features/itsfree.html:10
+msgid "IPFire is free software"
+msgstr "IPFire ist freie Software"
+
+#: templates/static/features/itsfree.html:11
+msgid "Free as in freedom"
+msgstr "Frei wie in Freiheit"
+
+#: templates/static/features/wireless.html:3
+#: templates/static/features/wireless.html:7
+msgid "Wireless Access Point"
+msgstr "WLAN-Access-Point"
+
+#: templates/static/features/hardware.html:84
+msgid "Hardware section on the wiki"
+msgstr "Hardwarebereich im Wiki"
+
+#: templates/static/features/hardware.html:89
+msgid "Hardware compatibility list"
+msgstr "Hardwarekompatibilitätsliste"
+
+#: templates/static/features/hardware.html:89
+msgid "networking"
+msgstr "Netzwerk"
+
+#: templates/static/features/ids.html:3 templates/static/features/ids.html:7
+msgid "Intrusion detection system"
+msgstr "Einbruchsdetektierung"
+
+#: templates/static/features/firewall.html:171
+msgid "Outgoing firewall configuration"
+msgstr "Ausgehende Firewall-Konfiguration"
+
+#: templates/static/features/vpn.html:10
+msgid "Virtual Private Networks"
+msgstr "Virtuelle private Netzwerke"
+
+#: templates/static/features/vpn.html:50
+msgid "Learn more about configuring a VPN connection"
+msgstr "Mehr über die Konfiguration einer VPN-Verbindung"
+
+#: templates/static/chat.html:29
+msgid "Server"
+msgstr "Server"
+
+#: templates/static/chat.html:32
+msgid "Channel"
+msgstr "Channel"
+
+#: templates/static/chat.html:37
+msgid "Use the web client"
+msgstr "Web-Client benutzen"
+
+#: templates/static/cebit.html:3
+msgid "CeBIT special"
+msgstr "CeBIT-Spezial"
+
+#: templates/static/cebit.html:7
+msgid "IPFire at CeBIT 2010"
+msgstr "IPFire auf der CeBIT 2010"
+
+#: templates/static/getinvolved.html:3 templates/static/getinvolved.html:7
+msgid "Get involved"
+msgstr "Mitmachen"
+
+#: templates/static/getinvolved.html:10
+msgid "Thanks for your support"
+msgstr "Vielen Dank für die Unterstützung"
+
+#: templates/static/getinvolved.html:45
+msgid "Donations"
+msgstr "Spenden"
+
+#: templates/static/getinvolved.html:68
+msgid "Promotion"
+msgstr "Promotion"
+
+#: templates/static/getinvolved.html:69
+msgid "Spread the word"
+msgstr "Spread the word"
+
+#: templates/static/getinvolved.html:122
+msgid "Register on the forums"
+msgstr "Im Forum registrieren"
+
+#: templates/static/getinvolved.html:127
+msgid "Join the IRC channel"
+msgstr "Dem IRC-Channel beitreten"
+
+#: templates/static/getinvolved.html:132
+msgid "Subscribe to the planet feed"
+msgstr "Den Planet-Feed abonnieren"
+
+#: templates/static/getinvolved.html:152
+msgid "Translation"
+msgstr "Übersetzung"
+
+#: templates/static/getinvolved.html:167
+msgid "Join the translation project"
+msgstr "Dem Übersetzungsteam beitreten"
+
+#: templates/static/artwork.html:31
+msgid "The IPFire Logo"
+msgstr "Das IPFire-Logo"
+
+#: templates/static/artwork.html:43
+msgid "Flyers, Rollups, CDs and more"
+msgstr "Flyer, Rollups, CDs und mehr"
+
+#: templates/static/imprint.html:3 templates/static/imprint.html:7
+msgid "Imprint"
+msgstr "Impressum"
+
+#: templates/static/donation.html:3
+msgid "Donation"
+msgstr "Spende"
+
+#: templates/index.html:3
+msgid "Home"
+msgstr "Startseite"
+
+#: templates/index.html:7
+msgid "Follow us"
+msgstr "Folge uns"
+
+#: templates/index.html:16
+msgid "An Open Source Firewall Solution"
+msgstr "An Open Source Firewall Solution"
+
+#: templates/index.html:95
+msgid "Flexibility"
+msgstr "Flexibilität"
+
+#: templates/index.html:114
+msgid "Open Source"
+msgstr "Open Source"
+
+#: templates/admin-mirrors-details.html:8
+msgid "All mirrors"
+msgstr "Alle Mirrors"
+
+#: templates/admin-mirrors-details.html:17
+msgid "Status"
+msgstr "Status"
+
+#: templates/admin-mirrors-details.html:29
+msgid "GeoIP Location"
+msgstr "GeoIP Standort"
+
+#: templates/admin-mirrors-details.html:51
+msgid "Filelist"
+msgstr "Dateiliste"
+
+#: templates/stasy-stats-oses.html:7
+msgid "Releases"
+msgstr "Releases"
+
+#: templates/stasy-stats-oses.html:18
+msgid "Architectures"
+msgstr "Architekturen"
+
+#: templates/stasy-stats-oses.html:25
+msgid "Kernels"
+msgstr "Kernel"
+
+#: templates/admin-accounts.html:8
+msgid "Create new account"
+msgstr "Neuen Account erstellen"
+
+#: templates/admin-accounts.html:13
+msgid "Name (Nickname)"
+msgstr "Name (Nickname)"
+
+#: templates/mirrors.html:25
+msgid "Mirror servers nearby"
+msgstr "Nahgelegene Mirrorserver"
+
+#: templates/mirrors.html:28 templates/mirrors.html:31
+msgid "Worldwide mirror servers"
+msgstr "Weltweite Mirrorserver"
+
+#: templates/builds.html:3
+msgid "Builds"
+msgstr "Builds"
+
+#: templates/builds.html:6
+msgid "Nightly builds"
+msgstr "Nightly Builds"
+
+#: templates/builds.html:13
+msgid "Less than 12 hours ago"
+msgstr "Vor weniger als 12 Stunden"
+
+#: templates/builds.html:24
+msgid "More than 12 hours ago"
+msgstr "Mehr als 12 Stunden"
+
+#: templates/builds.html:35
+msgid "More than a day ago"
+msgstr "Vor mehr als einem Tag"
+
+#: templates/stasy-profile-notfound.html:3
+#: templates/stasy-profile-notfound.html:8
+msgid "Profile not found"
+msgstr "Profil nicht gefunden"
+
+#: webapp/handlers_news.py:44 webapp/ui_modules.py:70
+msgid "Unknown author"
+msgstr "Unbekannter Autor"
+
+#: webapp/ui_modules.py:217
+#, python-format
+msgid "%s to %s"
+msgstr "%s nach %s"
+
+#: webapp/backend/releases.py:39
+msgid "Installable CD image"
+msgstr "Bootbares CD-Image"
+
+#: webapp/backend/releases.py:40
+msgid "Torrent file"
+msgstr "Torrentdatei"
+
+#: webapp/backend/releases.py:41
+msgid "Flash image"
+msgstr "Flash-Image"
+
+#: webapp/backend/releases.py:42
+msgid "Alix image"
+msgstr "Alix-Image"
+
+#: webapp/backend/releases.py:43
+msgid "USB FDD Image"
+msgstr "USB-FDD-Image"
+
+#: webapp/backend/releases.py:44
+msgid "USB HDD Image"
+msgstr "USB-HDD-Image"
+
+#: webapp/backend/releases.py:45
+msgid "Pregenerated Xen image"
+msgstr "Vorgefertigtes Xen-Image"
+
+#: webapp/backend/releases.py:51 webapp/backend/releases.py:88
+msgid "Unknown image type"
+msgstr "Unbekanntes Imageformat"
+
+#: webapp/backend/releases.py:76
+msgid "Use this image to burn a CD and install IPFire from it."
+msgstr ""
+"Nutze dieses Image um eine CD zu erstellen und IPFire von dieser zu "
+"installieren."
+
+#: webapp/backend/releases.py:77
+msgid "Download the CD image from the torrent network."
+msgstr "CD-Image mit aus dem Torrentnetzwerk laden"
+
+#: webapp/backend/releases.py:78
+msgid "An image that is meant to run on embedded devices."
+msgstr "Ein Image, das für eingebettete Systeme optimiert ist."
+
+#: webapp/backend/releases.py:79
+msgid "Flash image where a serial console is enabled by default."
+msgstr "Image, bei welchem die serielle Konsole eingeschaltet ist."
+
+#: webapp/backend/releases.py:80
+msgid "Install IPFire from a floppy-formated USB key."
+msgstr "IPFire von einem Floppy-formatiertem USB-Stick installieren-"
+
+#: webapp/backend/releases.py:81
+msgid "If the floppy image doesn't work, use this image instead."
+msgstr "Wenn das Floppy-Image nicht funktioniert, dieses verwenden."
+
+#: webapp/backend/releases.py:82
+msgid "A ready-to-run image for Xen."
+msgstr "Ein fertiges Image für Xen."
+
+#: webapp/backend/iuse.py:165
+#, python-format
+msgid "Mem: %s"
+msgstr "RAM: %s"
+
+#: webapp/backend/iuse.py:168
+#, python-format
+msgid "Disk: %s"
+msgstr "HDD: %s"
+
+#: webapp/backend/iuse.py:180
+#, python-format
+msgid "Networks: %s"
+msgstr "Netzwerke: %s"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:225
+msgid "January"
+msgstr "Januar"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:225
+msgid "February"
+msgstr "Februar"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:225
+msgid "March"
+msgstr "März"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:225
+msgid "April"
+msgstr "April"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:226
+msgid "May"
+msgstr "Mai"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:226
+msgid "June"
+msgstr "Juni"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:226
+msgid "July"
+msgstr "Juli"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:226
+msgid "August"
+msgstr "August"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:227
+msgid "September"
+msgstr "September"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:227
+msgid "October"
+msgstr "Oktober"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:227
+msgid "November"
+msgstr "November"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:227
+msgid "December"
+msgstr "Dezember"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:229
+msgid "Monday"
+msgstr "Montag"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:229
+msgid "Tuesday"
+msgstr "Dienstag"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:229
+msgid "Wednesday"
+msgstr "Mittwoch"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:229
+msgid "Thursday"
+msgstr "Donnerstag"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:230
+msgid "Friday"
+msgstr "Freitag"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:230
+msgid "Saturday"
+msgstr "Samstag"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:230
+msgid "Sunday"
+msgstr "Sonntag"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:274
+#, python-format
+msgid "1 second ago"
+msgid_plural "%(seconds)d seconds ago"
+msgstr[0] "vor einer Sekunde"
+msgstr[1] "vor %(seconds)d Sekunden"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:279
+#, python-format
+msgid "1 minute ago"
+msgid_plural "%(minutes)d minutes ago"
+msgstr[0] "vor einer Minute"
+msgstr[1] "vor %(minutes)d Minuten"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:283
+#, python-format
+msgid "1 hour ago"
+msgid_plural "%(hours)d hours ago"
+msgstr[0] "vor einer Stunde"
+msgstr[1] "vor %(hours)d Stunden"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:287
+#, python-format
+msgid "%(time)s"
+msgstr "%(time)s"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:290
+msgid "yesterday"
+msgstr "gestern"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:291
+#, python-format
+msgid "yesterday at %(time)s"
+msgstr "gestern um %(time)s"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:293
+#, python-format
+msgid "%(weekday)s"
+msgstr "%(weekday)s"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:294
+#, python-format
+msgid "%(weekday)s at %(time)s"
+msgstr "%(weekday)s um %(time)s"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:296
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:338
+#, python-format
+msgid "%(month_name)s %(day)s"
+msgstr "%(day)s. %(month_name)s"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:297
+#, python-format
+msgid "%(month_name)s %(day)s at %(time)s"
+msgstr "%(day)s. %(month_name)s um %(time)s"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:300
+#, python-format
+msgid "%(month_name)s %(day)s, %(year)s"
+msgstr "%(day)s %(month_name)s %(year)s"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:301
+#, python-format
+msgid "%(month_name)s %(day)s, %(year)s at %(time)s"
+msgstr "%(day)s. %(month_name)s %(year)s um %(time)s"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:332
+#, python-format
+msgid "%(weekday)s, %(month_name)s %(day)s"
+msgstr "%(weekday)s, %(day)s. %(month_name)s"
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:353
+#, python-format
+msgid "%(commas)s and %(last)s"
+msgstr "%(commas)s und %(last)s"
+
+#~ msgid "Getting support"
+#~ msgstr "Support bekommen"
+
+#~ msgid "Go to the IPFire Wiki"
+#~ msgstr "Zum IPFire Wiki"
+
+#~ msgid "Forums"
+#~ msgstr "Forum"
+
+#~ msgid "Go to the IPFire Forums"
+#~ msgstr "Zum IPFire Forum"
+
+#~ msgid "Internet Relay Chat"
+#~ msgstr "Internet Relay Chat"
+
+#~ msgid "Go to the IPFire IRC"
+#~ msgstr "Zum IPFire IRC"
+
+#~ msgid "Really important guides are:"
+#~ msgstr "Wichtige Anleitungen sind:"
+
+#~ msgid "Installation guide"
+#~ msgstr "Installationsanleitung"
+
+#~ msgid "Learn how to start."
+#~ msgstr "Erste Schritte"
+
+#~ msgid "Configuration"
+#~ msgstr "Konfiguration"
+
+#~ msgid "Internet relay chat"
+#~ msgstr "Internet Relay Chat"
+
+#~ msgid "Public Relations"
+#~ msgstr "PR"
+
+#~ msgid "Press kit"
+#~ msgstr "Pressekit"
+
+#~ msgid "Logos and print artworks"
+#~ msgstr "Logos und andere Kunstwerke"
+
+#~ msgid "<strong>Print</strong> media"
+#~ msgstr "Printmedien"
+
+#~ msgid "<strong>Online</strong> media"
+#~ msgstr "Onlinemedien"
+
+#~ msgid "IPFire in the press"
+#~ msgstr "IPFire in der Presse"
+
+#~ msgid "Sponsoring"
+#~ msgstr "Unterstützung"
+
+#~ msgid "Screenshots"
+#~ msgstr "Screenshots"
+
+#~ msgid "System"
+#~ msgstr "System"
+
+#~ msgid "Services"
+#~ msgstr "Dienste"
+
+#~ msgid "Network (other)"
+#~ msgstr "Netzwerk"
+
+#~ msgid "Connections"
+#~ msgstr "Verbindung"
+
+#~ msgid "DHCP Server"
+#~ msgstr "DHCP-Server"
+
+#~ msgid "IPSec"
+#~ msgstr "IPsec"
+
+#~ msgid "Outgoing Firewall"
+#~ msgstr "Ausgehende Firewall"
+
+#~ msgid "IPFire"
+#~ msgstr "IPFire"
+
+#~ msgid "Samba"
+#~ msgstr "Samba"
+
+#~ msgid "Logs"
+#~ msgstr "Logs"
+
+#~ msgid "Online media"
+#~ msgstr "Onlinemedien"
+
+#~ msgid "Print media"
+#~ msgstr "Printmedien"
+
+#~ msgid "Financial help"
+#~ msgstr "Finanzielle Hilfe"
+
+#~ msgid "Sponsorships"
+#~ msgstr "Sponsorships"
+
+#~ msgid "Become a sponsor"
+#~ msgstr "Sponsor werden"
diff --git a/www/translations/webapp.pot b/www/translations/webapp.pot
new file mode 100644 (file)
index 0000000..7a85296
--- /dev/null
@@ -0,0 +1,1488 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-07-15 11:01+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: templates/downloads-index.html:6
+msgid "IPFire Download Center"
+msgstr ""
+
+#: templates/downloads-index.html:24 templates/downloads-index.html:39
+#: templates/modules/release-item.html:2
+#: templates/modules/sidebar-release.html:4
+msgid "Latest release"
+msgstr ""
+
+#: templates/downloads-index.html:25
+msgid "List of older downloads"
+msgstr ""
+
+#: templates/downloads-index.html:26 templates/downloads-index.html:41
+msgid "Development releases"
+msgstr ""
+
+#: templates/downloads-index.html:27 templates/downloads-index.html:42
+#: templates/static/development.html:83
+msgid "Source code"
+msgstr ""
+
+#: templates/downloads-index.html:37
+msgid "Download options"
+msgstr ""
+
+#: templates/downloads-index.html:40
+msgid "Older downloads"
+msgstr ""
+
+#: templates/downloads-index.html:45
+msgid "Other options"
+msgstr ""
+
+#: templates/downloads-index.html:47
+msgid "Mirror list"
+msgstr ""
+
+#: templates/stasy-profile.html:3 templates/stasy-profile.html:6
+msgid "Profile lookup"
+msgstr ""
+
+#: templates/admin-downloads-base.html:5
+msgid "Back to home"
+msgstr ""
+
+#: templates/admin-downloads-base.html:8 templates/admin-base.html:6
+msgid "Options"
+msgstr ""
+
+#: templates/admin-downloads-base.html:11
+msgid "Mirror stats"
+msgstr ""
+
+#: templates/downloads-older.html:3 templates/downloads-older.html:7
+msgid "Ancient downloads"
+msgstr ""
+
+#: templates/downloads-older.html:10 templates/downloads-all.html:10
+msgid ""
+"These are the ancient downloads of IPFire. They are just saved for "
+"historical reasons and should not be used in a productive environment."
+msgstr ""
+
+#: templates/downloads-older.html:14
+msgid ""
+"Beware that these releases could lack possible security-fixes\tand so it is "
+"recommended to use the <em>latest</em> version."
+msgstr ""
+
+#: templates/downloads-older.html:18 templates/downloads-all.html:14
+msgid "Go back to latest stable downloads."
+msgstr ""
+
+#: templates/downloads-older.html:26 templates/tracker-torrent-detail.html:12
+#: templates/tracker-torrents.html:31
+msgid "Release"
+msgstr ""
+
+#: templates/downloads-older.html:27
+msgid "Published on"
+msgstr ""
+
+#: templates/admin-login.html:3
+msgid "Please login"
+msgstr ""
+
+#: templates/mirrors-item.html:3
+#, python-format
+msgid "Mirror %s"
+msgstr ""
+
+#: templates/mirrors-item.html:8
+msgid "Up"
+msgstr ""
+
+#: templates/mirrors-item.html:10
+msgid "Down"
+msgstr ""
+
+#: templates/mirrors-item.html:12
+msgid "Out of sync"
+msgstr ""
+
+#: templates/mirrors-item.html:14 templates/stasy-profile-detail.html:74
+#: templates/stasy-profile-detail.html:82
+msgid "Unknown"
+msgstr ""
+
+#: templates/mirrors-item.html:22 templates/downloads-mirrors.html:51
+#: templates/stasy-profile-detail.html:231
+#: templates/download-mirror-detail.html:21 templates/admin-mirrors.html:15
+msgid "Last update"
+msgstr ""
+
+#: templates/mirrors-item.html:26 templates/downloads-mirrors.html:48
+#: templates/admin-mirrors-create.html:20
+#: templates/download-mirror-detail.html:17
+#: templates/admin-mirrors-details.html:21
+msgid "Owner"
+msgstr ""
+
+#: templates/mirrors-item.html:31
+msgid "Preferred for"
+msgstr ""
+
+#: templates/mirrors-item.html:37
+msgid "Go to mirror"
+msgstr ""
+
+#: templates/mirrors-item.html:42
+msgid "Mirror location"
+msgstr ""
+
+#: templates/mirrors-item.html:44
+#, python-format
+msgid "The mirror <em>%s</em> is located in %s."
+msgstr ""
+
+#: templates/admin-downloads-mirrors.html:5 templates/admin-downloads.html:5
+msgid "Download statistics"
+msgstr ""
+
+#: templates/admin-downloads-mirrors.html:7
+msgid "Mirror load from today"
+msgstr ""
+
+#: templates/admin-downloads-mirrors.html:10
+msgid "Mirror load"
+msgstr ""
+
+#: templates/tracker-torrent-detail.html:3 templates/tracker-torrents.html:3
+msgid "Torrent Downloads"
+msgstr ""
+
+#: templates/tracker-torrent-detail.html:7 templates/tracker-torrents.html:7
+msgid "IPFire Torrent Tracker"
+msgstr ""
+
+#: templates/tracker-torrent-detail.html:18
+msgid "Hash"
+msgstr ""
+
+#: templates/tracker-torrent-detail.html:26 templates/tracker-torrents.html:33
+msgid "Peers"
+msgstr ""
+
+#: templates/tracker-torrent-detail.html:31
+msgid "Seeds"
+msgstr ""
+
+#: templates/stasy-stats-geo.html:3 templates/stasy-stats-geo.html:7
+#: templates/stasy-stats.html:50
+msgid "Geo locations"
+msgstr ""
+
+#: templates/stasy-stats-geo.html:28
+msgid "Language selection"
+msgstr ""
+
+#: templates/stasy-stats-network.html:3 templates/stasy-stats.html:118
+#: templates/stasy-profile-detail.html:95
+msgid "Network"
+msgstr ""
+
+#: templates/stasy-stats-network.html:7
+msgid "Network configuration"
+msgstr ""
+
+#: templates/sources.html:3
+msgid "Sources"
+msgstr ""
+
+#: templates/sources.html:6
+msgid "Source Code"
+msgstr ""
+
+#: templates/sources.html:9
+#, python-format
+msgid "There are %s source files on the server."
+msgstr ""
+
+#: templates/news-author.html:7
+#, python-format
+msgid "%s's announcements"
+msgstr ""
+
+#: templates/planet-main.html:3 templates/planet-main.html:7
+#: templates/planet-user.html:3 templates/planet-posting.html:3
+msgid "IPFire Planet"
+msgstr ""
+
+#: templates/planet-main.html:43 templates/planet-user.html:19
+#: templates/news.html:31
+msgid "Older posts"
+msgstr ""
+
+#: templates/planet-main.html:47 templates/planet-user.html:23
+#: templates/news.html:35
+msgid "Newer posts"
+msgstr ""
+
+#: templates/planet-main.html:58
+msgid "Subscribe"
+msgstr ""
+
+#: templates/planet-main.html:72
+msgid "Feed"
+msgstr ""
+
+#: templates/planet-main.html:82
+msgid "People on the IPFire planet"
+msgstr ""
+
+#: templates/stasy-stats-virtual.html:3 templates/stasy-stats.html:139
+#: templates/base-feature.html:65
+#: templates/static/features/virtualization.html:3
+#: templates/static/features/virtualization.html:8
+msgid "Virtualization"
+msgstr ""
+
+#: templates/stasy-stats-virtual.html:7
+msgid "Virtualization support"
+msgstr ""
+
+#: templates/stasy-stats-virtual.html:35
+msgid "Hypervisors"
+msgstr ""
+
+#: templates/admin-index.html:5
+msgid "Admin Area"
+msgstr ""
+
+#: templates/admin-base.html:3
+msgid "IPFire Admin Area"
+msgstr ""
+
+#: templates/admin-base.html:9
+msgid "Accounts"
+msgstr ""
+
+#: templates/admin-base.html:10 templates/modules/menu.html:89
+msgid "Mirrors"
+msgstr ""
+
+#: templates/admin-base.html:11 templates/modules/menu.html:71
+msgid "Planet"
+msgstr ""
+
+#: templates/admin-base.html:12 templates/downloads.html:3
+msgid "Downloads"
+msgstr ""
+
+#: templates/admin-planet-compose.html:5 templates/admin-planet.html:8
+msgid "Compose new entry"
+msgstr ""
+
+#: templates/admin-planet-compose.html:14 templates/admin-planet.html:14
+msgid "Title"
+msgstr ""
+
+#: templates/stasy-stats-cpus.html:3
+msgid "Processors"
+msgstr ""
+
+#: templates/stasy-stats-cpus.html:7 templates/stasy-stats.html:71
+msgid "Hardware: CPUs"
+msgstr ""
+
+#: templates/stasy-stats-cpus.html:12
+msgid "See statistics about common CPU flags"
+msgstr ""
+
+#: templates/stasy-stats-cpus.html:19
+msgid "Vendors"
+msgstr ""
+
+#: templates/stasy-stats-cpus.html:36 templates/stasy-profile-detail.html:154
+msgid "Speed"
+msgstr ""
+
+#: templates/stasy-stats-cpus.html:38
+#, python-format
+msgid ""
+"The average speed of all systems in the database is: <strong>%.2f MHz</"
+"strong>."
+msgstr ""
+
+#: templates/stasy-stats-cpus.html:40
+#, python-format
+msgid "All together, there are <strong>%s bogomips</strong> out there."
+msgstr ""
+
+#: templates/stasy-stats-cpus.html:48
+msgid "CPU core counter"
+msgstr ""
+
+#: templates/stasy-stats-cpus.html:50
+msgid ""
+"See a breakdown of the CPU cores that are installed on the IPFire systems."
+msgstr ""
+
+#: templates/stasy-stats-memory.html:3 templates/stasy-stats-memory.html:7
+msgid "Memory"
+msgstr ""
+
+#: templates/stasy-stats-memory.html:13
+#, python-format
+msgid ""
+"The average amount of memory of all systems in the database is: <strong>%.2f "
+"MB</strong>."
+msgstr ""
+
+#: templates/download-splash.html:3 templates/download-splash.html:8
+msgid "Thanks for downloading IPFire!"
+msgstr ""
+
+#: templates/download-splash.html:15 templates/static/donation.html:7
+msgid "Please consider donating!"
+msgstr ""
+
+#: templates/download-splash.html:42 templates/modules/menu.html:109
+#: templates/static/getinvolved.html:61
+msgid "Donate"
+msgstr ""
+
+#: templates/download-splash.html:66
+msgid "Next steps"
+msgstr ""
+
+#: templates/download-splash.html:71
+msgid "Install IPFire"
+msgstr ""
+
+#: templates/download-splash.html:86
+msgid "Access documentation"
+msgstr ""
+
+#: templates/download-splash.html:103 templates/static/getinvolved.html:94
+msgid "Join the community"
+msgstr ""
+
+#: templates/downloads-development.html:3
+#: templates/downloads-development.html:6
+msgid "Development Downloads"
+msgstr ""
+
+#: templates/error-500.html:6
+msgid "Detailed information"
+msgstr ""
+
+#: templates/admin-planet.html:5
+msgid "Planet Administrator"
+msgstr ""
+
+#: templates/admin-planet.html:13
+msgid "Author"
+msgstr ""
+
+#: templates/admin-planet.html:21 templates/admin-mirrors.html:24
+#: templates/admin-accounts.html:20
+msgid "Edit"
+msgstr ""
+
+#: templates/downloads-mirrors.html:3 templates/download-mirror-detail.html:3
+msgid "Mirror-Server"
+msgstr ""
+
+#: templates/downloads-mirrors.html:8 templates/download-mirror-detail.html:8
+msgid "IPFire Mirrors"
+msgstr ""
+
+#: templates/downloads-mirrors.html:49 templates/admin-mirrors-create.html:12
+#: templates/download-mirror-detail.html:13 templates/admin-mirrors.html:14
+#: templates/admin-mirrors-details.html:13
+msgid "Hostname"
+msgstr ""
+
+#: templates/downloads-mirrors.html:50 templates/admin-mirrors-create.html:24
+#: templates/admin-mirrors-details.html:25
+msgid "Location"
+msgstr ""
+
+#: templates/downloads-mirrors.html:64
+msgid "details"
+msgstr ""
+
+#: templates/stasy-stats-cpu-flags.html:3
+msgid "CPU flags"
+msgstr ""
+
+#: templates/stasy-stats-cpu-flags.html:7
+msgid "Processor flags"
+msgstr ""
+
+#: templates/stasy-stats-cpu-flags.html:30
+msgid "CPUs that support 64 bits"
+msgstr ""
+
+#: templates/stasy-stats-cpu-flags.html:46
+msgid "CPUs with PAE"
+msgstr ""
+
+#: templates/stasy-stats-cpu-flags.html:62
+msgid "CPUs that support virtualization"
+msgstr ""
+
+#: templates/planet-user.html:30
+#, python-format
+msgid "%s did not write any posts, yet."
+msgstr ""
+
+#: templates/planet-user.html:44 templates/static/press.html:31
+#: templates/static/imprint.html:25 templates/static/imprint.html:37
+#: templates/static/imprint.html:49 templates/static/imprint.html:61
+msgid "Mail"
+msgstr ""
+
+#: templates/downloads.html:7 templates/downloads-all.html:7
+msgid "Download IPFire"
+msgstr ""
+
+#: templates/downloads.html:39
+msgid "Get yourself involved"
+msgstr ""
+
+#: templates/downloads.html:55
+msgid "Need help with the first steps?"
+msgstr ""
+
+#: templates/admin-mirrors-create.html:5 templates/admin-mirrors.html:8
+msgid "Create new mirror"
+msgstr ""
+
+#: templates/admin-mirrors-create.html:16
+msgid "Path"
+msgstr ""
+
+#: templates/admin-mirrors-create.html:28
+#: templates/admin-mirrors-details.html:33
+msgid "File mirror"
+msgstr ""
+
+#: templates/admin-mirrors-create.html:31
+#: templates/admin-mirrors-create.html:40
+#: templates/admin-mirrors-create.html:49
+#: templates/admin-mirrors-create.html:58
+msgid "yes"
+msgstr ""
+
+#: templates/admin-mirrors-create.html:32
+#: templates/admin-mirrors-create.html:41
+#: templates/admin-mirrors-create.html:50
+#: templates/admin-mirrors-create.html:59
+msgid "no"
+msgstr ""
+
+#: templates/admin-mirrors-create.html:37
+#: templates/admin-mirrors-details.html:37
+msgid "Pakfire 2 mirror"
+msgstr ""
+
+#: templates/admin-mirrors-create.html:46
+#: templates/admin-mirrors-details.html:41
+msgid "Pakfire 3 mirror"
+msgstr ""
+
+#: templates/admin-mirrors-create.html:55
+#: templates/admin-mirrors-details.html:45
+msgid "Disabled?"
+msgstr ""
+
+#: templates/planet-posting.html:18 templates/modules/planet-entry.html:18
+msgid "Posted by"
+msgstr ""
+
+#: templates/planet-posting.html:19 templates/modules/planet-entry.html:19
+msgid "on"
+msgstr ""
+
+#: templates/admin-downloads.html:7
+msgid "Download counters"
+msgstr ""
+
+#: templates/admin-downloads.html:10
+msgid "Today"
+msgstr ""
+
+#: templates/admin-downloads.html:14
+msgid "Yesterday"
+msgstr ""
+
+#: templates/admin-downloads.html:18
+msgid "Total"
+msgstr ""
+
+#: templates/admin-downloads.html:23
+msgid "Downloads by country"
+msgstr ""
+
+#: templates/stasy-stats.html:3 templates/modules/menu.html:117
+msgid "Statistics"
+msgstr ""
+
+#: templates/stasy-stats.html:7
+msgid "fireinfo statistics"
+msgstr ""
+
+#: templates/stasy-stats.html:29
+msgid "IPFire versions"
+msgstr ""
+
+#: templates/stasy-stats.html:85
+msgid "CPU features"
+msgstr ""
+
+#: templates/stasy-stats.html:97
+msgid "Hardware: Memory"
+msgstr ""
+
+#: templates/news.html:7
+msgid "What is new on the IPFire project?"
+msgstr ""
+
+#: templates/base-feature.html:6 templates/static/features.html:3
+#: templates/static/features.html:7
+msgid "About IPFire"
+msgstr ""
+
+#: templates/base-feature.html:9 templates/static/features/security.html:3
+#: templates/static/features/security.html:9 templates/index.html:76
+msgid "Security"
+msgstr ""
+
+#: templates/base-feature.html:12 templates/static/features/firewall.html:3
+#: templates/static/features/firewall.html:9
+msgid "Firewall"
+msgstr ""
+
+#: templates/base-feature.html:15 templates/static/features/pakfire.html:3
+msgid "Pakfire"
+msgstr ""
+
+#: templates/base-feature.html:18 templates/static/features/updates.html:3
+#: templates/static/features/updates.html:7
+msgid "Updates"
+msgstr ""
+
+#: templates/base-feature.html:21
+msgid "It's free"
+msgstr ""
+
+#: templates/base-feature.html:25
+msgid "Features"
+msgstr ""
+
+#: templates/base-feature.html:28 templates/static/features/dialup.html:3
+#: templates/static/features/dialup.html:7
+msgid "Dialup"
+msgstr ""
+
+#: templates/base-feature.html:31 templates/static/features/proxy.html:3
+#: templates/static/features/proxy.html:7
+msgid "Web proxy"
+msgstr ""
+
+#: templates/base-feature.html:35
+#: templates/static/features/proxy/content-filter.html:3
+msgid "Content filter"
+msgstr ""
+
+#: templates/base-feature.html:38
+#: templates/static/features/proxy/update-accelerator.html:3
+msgid "Update accelerator"
+msgstr ""
+
+#: templates/base-feature.html:41
+msgid "Virus scan"
+msgstr ""
+
+#: templates/base-feature.html:45 templates/static/features/vpn/ipsec.html:3
+#: templates/static/features/vpn/openvpn.html:3
+#: templates/static/features/vpn.html:3 templates/static/features/vpn.html:9
+msgid "VPN"
+msgstr ""
+
+#: templates/base-feature.html:49 templates/static/features/vpn/ipsec.html:3
+msgid "IPsec"
+msgstr ""
+
+#: templates/base-feature.html:52 templates/static/features/vpn/openvpn.html:3
+msgid "OpenVPN"
+msgstr ""
+
+#: templates/base-feature.html:56
+msgid "Intrusion detection"
+msgstr ""
+
+#: templates/base-feature.html:59 templates/static/features/qos.html:3
+#: templates/static/features/qos.html:7
+msgid "Quality of Service"
+msgstr ""
+
+#: templates/base-feature.html:62 templates/stasy-profile-detail.html:119
+#: templates/static/features/hardware.html:3
+#: templates/static/features/hardware.html:8
+msgid "Hardware"
+msgstr ""
+
+#: templates/base-feature.html:68
+msgid "Wireless AP"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:3 templates/stasy-profile-detail.html:7
+msgid "Profile"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:12 templates/stasy-stats-oses.html:3
+msgid "Operating system"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:16
+msgid "Version"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:24
+msgid "Architecture"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:32
+msgid "Kernel version"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:43
+msgid "Hypervisor"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:45
+msgid "This machine is running in a virtual environment."
+msgstr ""
+
+#: templates/stasy-profile-detail.html:51
+#: templates/stasy-profile-detail.html:71
+#: templates/stasy-profile-detail.html:130
+msgid "Vendor"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:59
+msgid "Type"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:67
+msgid "Hardware vendor"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:79
+#: templates/stasy-profile-detail.html:138
+msgid "Model"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:97
+msgid "Enabled network zones"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:125
+msgid "CPU"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:141
+msgid "Not available"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:146
+msgid "Cores"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:166
+msgid "Supported features"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:170
+msgid "64 bit capable"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:174
+msgid "PAE capable"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:178
+msgid "VT-x/AMD-V"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:190
+msgid "Memory size"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:198
+msgid "System disk size"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:211
+msgid "Peripherial devices"
+msgstr ""
+
+#: templates/stasy-profile-detail.html:216
+msgid "Signature images"
+msgstr ""
+
+#: templates/download-mirror-detail.html:25
+msgid "Number of files"
+msgstr ""
+
+#: templates/download-mirror-detail.html:33
+msgid "View list of all mirror servers."
+msgstr ""
+
+#: templates/downloads-all.html:3
+msgid "Ancient Downloads"
+msgstr ""
+
+#: templates/nopaste-index.html:3 templates/nopaste-index.html:6
+msgid "IPFire nopaste service"
+msgstr ""
+
+#: templates/nopaste-index.html:14
+msgid "Subject"
+msgstr ""
+
+#: templates/admin-accounts-edit.html:5 templates/admin-accounts.html:5
+msgid "Account Administrator"
+msgstr ""
+
+#: templates/stasy-index.html:8
+msgid "A hardware data collection tool for IPFire"
+msgstr ""
+
+#: templates/stasy-index.html:50
+msgid "Show profile"
+msgstr ""
+
+#: templates/stasy-model-detail.html:11
+#, python-format
+msgid "This device is installed on approximately %.2f%% of all systems."
+msgstr ""
+
+#: templates/stasy-model-detail.html:14
+msgid "Feedback"
+msgstr ""
+
+#: templates/stasy-model-detail.html:28
+msgid "Go to the wiki"
+msgstr ""
+
+#: templates/stasy-stats-admin.html:3
+msgid "Admin"
+msgstr ""
+
+#: templates/stasy-stats-admin.html:11
+msgid "Sending profiles"
+msgstr ""
+
+#: templates/stasy-stats-admin.html:19
+msgid "Archive size"
+msgstr ""
+
+#: templates/stasy-stats-admin.html:27
+msgid "Updates in the last 24 hours"
+msgstr ""
+
+#: templates/base.html:4
+msgid "No title given"
+msgstr ""
+
+#: templates/base.html:67 templates/static/press.html:3
+#: templates/static/press.html:7
+msgid "Press"
+msgstr ""
+
+#: templates/base.html:69
+msgid "imprint"
+msgstr ""
+
+#: templates/admin-mirrors.html:5
+msgid "Mirror Administrator"
+msgstr ""
+
+#: templates/admin-mirrors.html:9
+msgid "Re-check now"
+msgstr ""
+
+#: templates/admin-mirrors.html:23 templates/admin-mirrors-details.html:5
+msgid "Details"
+msgstr ""
+
+#: templates/admin-mirrors.html:25 templates/admin-accounts.html:21
+msgid "Delete"
+msgstr ""
+
+#: templates/tracker-torrents.html:32
+msgid "Seeders"
+msgstr ""
+
+#: templates/error.html:3
+msgid "Error"
+msgstr ""
+
+#: templates/modules/release-item.html:12
+msgid "Choose an architecture:"
+msgstr ""
+
+#: templates/modules/release-item.html:91
+msgid "Image type"
+msgstr ""
+
+#: templates/modules/release-item.html:92
+msgid "Size"
+msgstr ""
+
+#: templates/modules/release-item.html:115
+#: templates/modules/release-item-short.html:13
+msgid "There are no downloads available for this release."
+msgstr ""
+
+#: templates/modules/sidebar-release.html:9
+msgid "Download now"
+msgstr ""
+
+#: templates/modules/release-item-short.html:4
+msgid "Here you will find the downloads for the version"
+msgstr ""
+
+#: templates/modules/news-preview.html:6
+msgid "by"
+msgstr ""
+
+#: templates/modules/download-button.html:2
+#, python-format
+msgid "Download %s"
+msgstr ""
+
+#: templates/modules/stasy-table-devices.html:6
+msgid "Kernel module"
+msgstr ""
+
+#: templates/modules/menu.html:4
+msgid "Download"
+msgstr ""
+
+#: templates/modules/menu.html:7
+msgid "About"
+msgstr ""
+
+#: templates/modules/menu.html:10
+msgid "Get Involved"
+msgstr ""
+
+#: templates/modules/menu.html:14
+msgid "More"
+msgstr ""
+
+#: templates/modules/menu.html:18
+msgid "Documentation"
+msgstr ""
+
+#: templates/modules/menu.html:23
+msgid "Wiki"
+msgstr ""
+
+#: templates/modules/menu.html:28
+msgid "Support"
+msgstr ""
+
+#: templates/modules/menu.html:33
+msgid "Forum"
+msgstr ""
+
+#: templates/modules/menu.html:39 templates/static/chat.html:3
+#: templates/static/chat.html:7
+msgid "Chat"
+msgstr ""
+
+#: templates/modules/menu.html:44 templates/static/development.html:3
+#: templates/static/development.html:8 templates/static/getinvolved.html:139
+msgid "Development"
+msgstr ""
+
+#: templates/modules/menu.html:49
+msgid "Overview"
+msgstr ""
+
+#: templates/modules/menu.html:55
+msgid "Pakfire Build Service"
+msgstr ""
+
+#: templates/modules/menu.html:61 templates/static/development.html:44
+msgid "Bugtracker"
+msgstr ""
+
+#: templates/modules/menu.html:66
+msgid "Miscellaneous"
+msgstr ""
+
+#: templates/modules/menu.html:77 templates/static/features/hardware.html:80
+msgid "Fireinfo"
+msgstr ""
+
+#: templates/modules/menu.html:83
+msgid "Mailing lists"
+msgstr ""
+
+#: templates/modules/menu.html:95 templates/static/artwork.html:3
+#: templates/static/artwork.html:7
+msgid "Artwork"
+msgstr ""
+
+#: templates/modules/menu.html:101
+msgid "CeBIT"
+msgstr ""
+
+#: templates/modules/menu.html:127
+msgid "Return to www.ipfire.org"
+msgstr ""
+
+#: templates/modules/news-item.html:6
+msgid "Announcement"
+msgstr ""
+
+#: templates/static/press.html:35
+msgid "Logo"
+msgstr ""
+
+#: templates/static/development.html:28
+msgid "Development tools"
+msgstr ""
+
+#: templates/static/development.html:65
+msgid "Development Mailing List"
+msgstr ""
+
+#: templates/static/development.html:101
+msgid "IPFire Git repositories"
+msgstr ""
+
+#: templates/static/development.html:106
+msgid "Important repositories"
+msgstr ""
+
+#: templates/static/development.html:144
+msgid "How to build IPFire?"
+msgstr ""
+
+#: templates/static/development.html:178
+msgid "How to submit patches?"
+msgstr ""
+
+#: templates/static/development.html:206
+msgid "How to translate IPFire?"
+msgstr ""
+
+#: templates/static/features/vpn/ipsec.html:7
+msgid "VPN: IPsec"
+msgstr ""
+
+#: templates/static/features/vpn/openvpn.html:7
+msgid "VPN: OpenVPN"
+msgstr ""
+
+#: templates/static/features/proxy/update-accelerator.html:7
+msgid "Web proxy: Update accelerator"
+msgstr ""
+
+#: templates/static/features/proxy/virus-scanner.html:3
+msgid "Virus scanner"
+msgstr ""
+
+#: templates/static/features/proxy/virus-scanner.html:7
+msgid "Web proxy: Transparent virus scanner"
+msgstr ""
+
+#: templates/static/features/proxy/content-filter.html:7
+msgid "Web proxy: Content filter"
+msgstr ""
+
+#: templates/static/features/pakfire.html:11
+msgid "The IPFire package management system"
+msgstr ""
+
+#: templates/static/features/pakfire.html:113
+#: templates/static/features/hardware.html:77
+#: templates/static/features/firewall.html:168
+msgid "Further reading"
+msgstr ""
+
+#: templates/static/features/pakfire.html:117
+msgid "How to install a package?"
+msgstr ""
+
+#: templates/static/features/pakfire.html:122
+msgid "List of add-ons"
+msgstr ""
+
+#: templates/static/features/pakfire.html:127
+msgid "Pakfire Build System"
+msgstr ""
+
+#: templates/static/features/itsfree.html:3
+#: templates/static/features/itsfree.html:10
+msgid "IPFire is free software"
+msgstr ""
+
+#: templates/static/features/itsfree.html:11
+msgid "Free as in freedom"
+msgstr ""
+
+#: templates/static/features/wireless.html:3
+#: templates/static/features/wireless.html:7
+msgid "Wireless Access Point"
+msgstr ""
+
+#: templates/static/features/hardware.html:84
+msgid "Hardware section on the wiki"
+msgstr ""
+
+#: templates/static/features/hardware.html:89
+msgid "Hardware compatibility list"
+msgstr ""
+
+#: templates/static/features/hardware.html:89
+msgid "networking"
+msgstr ""
+
+#: templates/static/features/ids.html:3 templates/static/features/ids.html:7
+msgid "Intrusion detection system"
+msgstr ""
+
+#: templates/static/features/firewall.html:171
+msgid "Outgoing firewall configuration"
+msgstr ""
+
+#: templates/static/features/vpn.html:10
+msgid "Virtual Private Networks"
+msgstr ""
+
+#: templates/static/features/vpn.html:50
+msgid "Learn more about configuring a VPN connection"
+msgstr ""
+
+#: templates/static/chat.html:29
+msgid "Server"
+msgstr ""
+
+#: templates/static/chat.html:32
+msgid "Channel"
+msgstr ""
+
+#: templates/static/chat.html:37
+msgid "Use the web client"
+msgstr ""
+
+#: templates/static/cebit.html:3
+msgid "CeBIT special"
+msgstr ""
+
+#: templates/static/cebit.html:7
+msgid "IPFire at CeBIT 2010"
+msgstr ""
+
+#: templates/static/getinvolved.html:3 templates/static/getinvolved.html:7
+msgid "Get involved"
+msgstr ""
+
+#: templates/static/getinvolved.html:10
+msgid "Thanks for your support"
+msgstr ""
+
+#: templates/static/getinvolved.html:45
+msgid "Donations"
+msgstr ""
+
+#: templates/static/getinvolved.html:68
+msgid "Promotion"
+msgstr ""
+
+#: templates/static/getinvolved.html:69
+msgid "Spread the word"
+msgstr ""
+
+#: templates/static/getinvolved.html:122
+msgid "Register on the forums"
+msgstr ""
+
+#: templates/static/getinvolved.html:127
+msgid "Join the IRC channel"
+msgstr ""
+
+#: templates/static/getinvolved.html:132
+msgid "Subscribe to the planet feed"
+msgstr ""
+
+#: templates/static/getinvolved.html:152
+msgid "Translation"
+msgstr ""
+
+#: templates/static/getinvolved.html:167
+msgid "Join the translation project"
+msgstr ""
+
+#: templates/static/artwork.html:31
+msgid "The IPFire Logo"
+msgstr ""
+
+#: templates/static/artwork.html:43
+msgid "Flyers, Rollups, CDs and more"
+msgstr ""
+
+#: templates/static/imprint.html:3 templates/static/imprint.html:7
+msgid "Imprint"
+msgstr ""
+
+#: templates/static/donation.html:3
+msgid "Donation"
+msgstr ""
+
+#: templates/index.html:3
+msgid "Home"
+msgstr ""
+
+#: templates/index.html:7
+msgid "Follow us"
+msgstr ""
+
+#: templates/index.html:16
+msgid "An Open Source Firewall Solution"
+msgstr ""
+
+#: templates/index.html:95
+msgid "Flexibility"
+msgstr ""
+
+#: templates/index.html:114
+msgid "Open Source"
+msgstr ""
+
+#: templates/admin-mirrors-details.html:8
+msgid "All mirrors"
+msgstr ""
+
+#: templates/admin-mirrors-details.html:17
+msgid "Status"
+msgstr ""
+
+#: templates/admin-mirrors-details.html:29
+msgid "GeoIP Location"
+msgstr ""
+
+#: templates/admin-mirrors-details.html:51
+msgid "Filelist"
+msgstr ""
+
+#: templates/stasy-stats-oses.html:7
+msgid "Releases"
+msgstr ""
+
+#: templates/stasy-stats-oses.html:18
+msgid "Architectures"
+msgstr ""
+
+#: templates/stasy-stats-oses.html:25
+msgid "Kernels"
+msgstr ""
+
+#: templates/admin-accounts.html:8
+msgid "Create new account"
+msgstr ""
+
+#: templates/admin-accounts.html:13
+msgid "Name (Nickname)"
+msgstr ""
+
+#: templates/mirrors.html:25
+msgid "Mirror servers nearby"
+msgstr ""
+
+#: templates/mirrors.html:28 templates/mirrors.html:31
+msgid "Worldwide mirror servers"
+msgstr ""
+
+#: templates/builds.html:3
+msgid "Builds"
+msgstr ""
+
+#: templates/builds.html:6
+msgid "Nightly builds"
+msgstr ""
+
+#: templates/builds.html:13
+msgid "Less than 12 hours ago"
+msgstr ""
+
+#: templates/builds.html:24
+msgid "More than 12 hours ago"
+msgstr ""
+
+#: templates/builds.html:35
+msgid "More than a day ago"
+msgstr ""
+
+#: templates/stasy-profile-notfound.html:3
+#: templates/stasy-profile-notfound.html:8
+msgid "Profile not found"
+msgstr ""
+
+#: webapp/handlers_news.py:44 webapp/ui_modules.py:70
+msgid "Unknown author"
+msgstr ""
+
+#: webapp/ui_modules.py:217
+#, python-format
+msgid "%s to %s"
+msgstr ""
+
+#: webapp/backend/releases.py:39
+msgid "Installable CD image"
+msgstr ""
+
+#: webapp/backend/releases.py:40
+msgid "Torrent file"
+msgstr ""
+
+#: webapp/backend/releases.py:41
+msgid "Flash image"
+msgstr ""
+
+#: webapp/backend/releases.py:42
+msgid "Alix image"
+msgstr ""
+
+#: webapp/backend/releases.py:43
+msgid "USB FDD Image"
+msgstr ""
+
+#: webapp/backend/releases.py:44
+msgid "USB HDD Image"
+msgstr ""
+
+#: webapp/backend/releases.py:45
+msgid "Pregenerated Xen image"
+msgstr ""
+
+#: webapp/backend/releases.py:51 webapp/backend/releases.py:88
+msgid "Unknown image type"
+msgstr ""
+
+#: webapp/backend/releases.py:76
+msgid "Use this image to burn a CD and install IPFire from it."
+msgstr ""
+
+#: webapp/backend/releases.py:77
+msgid "Download the CD image from the torrent network."
+msgstr ""
+
+#: webapp/backend/releases.py:78
+msgid "An image that is meant to run on embedded devices."
+msgstr ""
+
+#: webapp/backend/releases.py:79
+msgid "Flash image where a serial console is enabled by default."
+msgstr ""
+
+#: webapp/backend/releases.py:80
+msgid "Install IPFire from a floppy-formated USB key."
+msgstr ""
+
+#: webapp/backend/releases.py:81
+msgid "If the floppy image doesn't work, use this image instead."
+msgstr ""
+
+#: webapp/backend/releases.py:82
+msgid "A ready-to-run image for Xen."
+msgstr ""
+
+#: webapp/backend/iuse.py:165
+#, python-format
+msgid "Mem: %s"
+msgstr ""
+
+#: webapp/backend/iuse.py:168
+#, python-format
+msgid "Disk: %s"
+msgstr ""
+
+#: webapp/backend/iuse.py:180
+#, python-format
+msgid "Networks: %s"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:225
+msgid "January"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:225
+msgid "February"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:225
+msgid "March"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:225
+msgid "April"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:226
+msgid "May"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:226
+msgid "June"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:226
+msgid "July"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:226
+msgid "August"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:227
+msgid "September"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:227
+msgid "October"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:227
+msgid "November"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:227
+msgid "December"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:229
+msgid "Monday"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:229
+msgid "Tuesday"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:229
+msgid "Wednesday"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:229
+msgid "Thursday"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:230
+msgid "Friday"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:230
+msgid "Saturday"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:230
+msgid "Sunday"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:274
+#, python-format
+msgid "1 second ago"
+msgid_plural "%(seconds)d seconds ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:279
+#, python-format
+msgid "1 minute ago"
+msgid_plural "%(minutes)d minutes ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:283
+#, python-format
+msgid "1 hour ago"
+msgid_plural "%(hours)d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:287
+#, python-format
+msgid "%(time)s"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:290
+msgid "yesterday"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:291
+#, python-format
+msgid "yesterday at %(time)s"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:293
+#, python-format
+msgid "%(weekday)s"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:294
+#, python-format
+msgid "%(weekday)s at %(time)s"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:296
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:338
+#, python-format
+msgid "%(month_name)s %(day)s"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:297
+#, python-format
+msgid "%(month_name)s %(day)s at %(time)s"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:300
+#, python-format
+msgid "%(month_name)s %(day)s, %(year)s"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:301
+#, python-format
+msgid "%(month_name)s %(day)s, %(year)s at %(time)s"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:332
+#, python-format
+msgid "%(weekday)s, %(month_name)s %(day)s"
+msgstr ""
+
+#: /usr/lib/python2.7/site-packages/tornado/locale.py:353
+#, python-format
+msgid "%(commas)s and %(last)s"
+msgstr ""
index f2295a5871efb2fd7b1d0ff832598551e07ff7a7..a8656d0ffc1e70f2ded9ba267f517b2179269ace 100644 (file)
@@ -16,7 +16,8 @@ from ui_modules import *
 
 BASEDIR = os.path.join(os.path.dirname(__file__), "..")
 
-tornado.locale.load_translations(os.path.join(BASEDIR, "translations"))
+# Load translations.
+tornado.locale.load_gettext_translations(os.path.join(BASEDIR, "translations"), "webapp")
 
 class Application(tornado.web.Application):
        def __init__(self):
@@ -27,6 +28,7 @@ class Application(tornado.web.Application):
                        login_url = "/login",
                        template_path = os.path.join(BASEDIR, "templates"),
                        ui_modules = {
+                               "DownloadButton" : DownloadButtonModule,
                                "Menu"           : MenuModule,
                                "MirrorItem"     : MirrorItemModule,
                                "MirrorsTable"   : MirrorsTableModule,
@@ -65,11 +67,15 @@ class Application(tornado.web.Application):
                        (r"/author/(.*)", NewsAuthorHandler),
 
                        # Download sites
-                       (r"/downloads?", DownloadHandler),
+                       (r"/download", DownloadHandler),
+                       (r"/downloads", tornado.web.RedirectHandler, { "url" : "/download" }),
 
                        # Handle old pages that have moved elsewhere
                        (r"/screenshots", tornado.web.RedirectHandler, { "url" : "/about" }),
-                       (r"/features", tornado.web.RedirectHandler, { "url" : "/about" }),
+                       (r"/about", tornado.web.RedirectHandler, { "url" : "/features" }),
+                       (r"/support", tornado.web.RedirectHandler, { "url" : "/getinvolved" }),
+
+                       (r"/donate", tornado.web.RedirectHandler, { "url" : "/donation" }),
 
                        # RSS feed
                        (r"/news.rss", RSSNewsHandler),
@@ -83,7 +89,7 @@ class Application(tornado.web.Application):
                ])
 
                # downloads.ipfire.org
-               self.add_handlers(r"downloads?\.ipfire\.org", [
+               self.add_handlers(r"downloads\.ipfire\.org", [
                        (r"/", DownloadsIndexHandler),
                        (r"/latest", DownloadsLatestHandler),
                        (r"/release/([0-9]+)", DownloadsReleaseHandler),
@@ -91,10 +97,14 @@ class Application(tornado.web.Application):
                        (r"/development", DownloadsDevelopmentHandler),
                        (r"/mirrors", tornado.web.RedirectHandler, { "url" : "http://mirrors.ipfire.org/" }),
                        (r"/source", tornado.web.RedirectHandler, { "url" : "http://source.ipfire.org/" }),
+                       (r"/download-splash", DownloadSplashHandler),
                ] + static_handlers + [
                        (r"/(iso|torrent)/(.*)", DownloadCompatHandler),
                        (r"/(.*)", DownloadFileHandler),
                ])
+               self.add_handlers(r"download\.ipfire\.org", [
+                       (r".*", tornado.web.RedirectHandler, { "url" : "http://downloads.ipfire.org" })
+               ])
 
                # mirrors.ipfire.org
                self.add_handlers(r"mirrors\.ipfire\.org", [
@@ -114,7 +124,7 @@ class Application(tornado.web.Application):
                ] + static_handlers)
 
                # stasy.ipfire.org
-               self.add_handlers(r"(fireinfo|stasy)\.ipfire\.org", [
+               self.add_handlers(r"fireinfo\.ipfire\.org", [
                        (r"/", StasyIndexHandler),
                        (r"/profile/([a-z0-9]{40})", StasyProfileDetailHandler),
                        (r"/vendor/(pci|usb)/([0-9a-f]{4})", StasyStatsVendorDetail),
@@ -144,6 +154,12 @@ class Application(tornado.web.Application):
                        (r"/torrent/([0-9a-f]+)", TrackerDetailHandler),
                ] + static_handlers)
 
+               # nopaste.ipfire.org
+               self.add_handlers(r"nopaste\.ipfire\.org", [
+                       (r"/", NopasteIndexHandler),
+                       (r"/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", NopasteEntryHandler),
+               ] + static_handlers)
+
                # admin.ipfire.org
                self.add_handlers(r"admin\.ipfire\.org", [
                        (r"/", AdminIndexHandler),
@@ -166,6 +182,10 @@ class Application(tornado.web.Application):
                        (r"/mirrors/update", AdminMirrorsUpdateHandler),
                        # Fireinfo
                        (r"/fireinfo/stats", AdminFireinfoStatsHandler),
+                       # Downloads
+                       (r"/downloads", AdminDownloadsHandler),
+                       (r"/downloads/mirrors", AdminDownloadsMirrorsHandler),
+                       (r"/downloads/test", AdminDownloadsGraphHandler),
                        # API
                        (r"/api/planet/render", AdminApiPlanetRenderMarkupHandler)
                ] + static_handlers)
index bad4e05bc9cf7e1cc26c4299e06772a7db992e7f..8e29990ae1cf6d7f3b1af3b3cfcb399c2faff917 100644 (file)
@@ -12,7 +12,7 @@ from geoip            import GeoIP
 from iuse              import IUse
 from memcached import Memcached
 from menu              import Menu
-from mirrors   import Mirrors
+from mirrors   import Downloads, Mirrors
 from netboot   import NetBoot
 from news              import News
 from planet            import Planet, PlanetEntry
index e3ffd42dfa430f54daaf778ba1b4f0b868253347..54b8f325ada7f8cbda51f7e1ca9392e60a86390d 100644 (file)
@@ -136,10 +136,12 @@ class Account(object):
 
                logging.debug("Checking credentials for %s" % self.dn)
                try:
-                       self.db.simple_bind_s(self.dn, password)
+                       self.db.simple_bind_s(self.dn, password.encode("utf-8"))
                except ldap.INVALID_CREDENTIALS:
+                       logging.debug("Account credentials are invalid.")
                        return False
 
+               logging.debug("Successfully authenticated.")
                return True
 
        @property
@@ -171,6 +173,7 @@ class Account(object):
 
                return gravatar_url
 
+
 if __name__ == "__main__":
        a = Accounts()
 
index 542c935a890921d256e9f3607741c59a83fff861..42f4952c618fddd2096a14f8b0b4b6303b76cf63 100644 (file)
@@ -8,7 +8,7 @@ from misc import Singleton
 class Row(tornado.database.Row):
        pass
 
-MYSQL_SERVER = "172.28.1.150"
+MYSQL_SERVER = "mysql-master.ipfire.org"
 
 class Databases(object):
        __metaclass__ = Singleton
diff --git a/www/webapp/backend/menu.py b/www/webapp/backend/menu.py
deleted file mode 100644 (file)
index a2ecd2a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/python
-
-import re
-
-from databases import Databases
-from misc import Singleton
-
-class Menu(object):
-       __metaclass__ = Singleton
-
-       @property
-       def db(self):
-               return Databases().webapp
-
-       def get(self, host):
-               menu = []
-               for m in self.db.query("SELECT * FROM menu ORDER BY prio ASC"):
-                       try:
-                               if not re.match(m.sites, host) is None:
-                                       menu.append(m)
-                       except re.error:
-                               # Drop all exceptions that occour when matching the expressions.
-                               pass
-
-               return menu
index ac55b631faabf7559488018ba4886b7801f91397..61675fc2a7d1a1ed256a5a5221b87709b8082bbc 100644 (file)
@@ -13,6 +13,78 @@ from geoip import GeoIP
 from memcached import Memcached
 from misc import Singleton
 
+class Downloads(object):
+       __metaclass__ = Singleton
+
+       @property
+       def db(self):
+               return Databases().webapp
+
+       @property
+       def mirrors(self):
+               return Mirrors()
+
+       @property
+       def total(self):
+               ret = self.db.get("SELECT COUNT(*) AS total FROM log_download")
+
+               return ret.total
+
+       @property
+       def today(self):
+               ret = self.db.get("SELECT COUNT(*) AS today FROM log_download WHERE date >= NOW() - 1000000")
+
+               return ret.today
+
+       @property
+       def yesterday(self):
+               ret = self.db.get("SELECT COUNT(*) AS yesterday FROM log_download WHERE DATE(date) = DATE(NOW())-1")
+
+               return ret.yesterday
+
+       @property
+       def daily_map(self):
+               ret = self.db.query("SELECT DATE(date) AS date, COUNT(*) AS downloads FROM log_download"
+                       " WHERE DATE(date) BETWEEN DATE(NOW()) - 31 AND DATE(NOW()) GROUP BY DATE(date)")
+
+               return ret
+
+       def get_countries(self, duration="all"):
+               query = "SELECT country_code, count(country_code) AS count FROM log_download"
+
+               if duration == "today":
+                       query += " WHERE date >= NOW() - 1000000"
+
+               query += " GROUP BY country_code ORDER BY count DESC"
+
+               results = self.db.query(query)
+               ret = {}
+
+               count = sum([o.count for o in results])
+               for res in results:
+                       ret[res.country_code] = float(res.count) / count
+
+               return ret
+
+       def get_mirror_load(self, duration="all"):
+               query = "SELECT mirror, COUNT(mirror) AS count FROM log_download"
+
+               if duration == "today":
+                       query += " WHERE date >= NOW() - 1000000"
+
+               query += " GROUP BY mirror ORDER BY count DESC"
+
+               results = self.db.query(query)
+               ret = {}
+
+               count = sum([o.count for o in results])
+               for res in results:
+                       mirror = self.mirrors.get(res.mirror)
+                       ret[mirror.hostname] = float(res.count) / count
+
+               return ret
+
+
 class Mirrors(object):
        __metaclass__ = Singleton
 
index 7ce641d7e277e4ce77e38cfb5c7c22f14f3deb71..b03f21f695e08b3984355f7117d6838c4307c8cf 100644 (file)
@@ -59,6 +59,7 @@ class File(object):
                        "alix"          : 41,
                        "usbfdd"        : 31,
                        "usbhdd"        : 30,
+                       "arm"       : 40,
                        "xen"           : 50,
                }
                
@@ -98,6 +99,20 @@ class File(object):
        def basename(self):
                return os.path.basename(self.filename)
 
+       @property
+       def size(self):
+               return self.__data.get("filesize")
+
+       @property
+       def arch(self):
+               known_arches = ("i586", "arm")
+
+               for arch in known_arches:
+                       if arch in self.basename:
+                               return arch
+
+               return "N/A" 
+
 
 class Release(object):
        @property
@@ -121,7 +136,7 @@ class Release(object):
        def files(self):
                if not self.__files:
                        files = self.db.query("SELECT id FROM files WHERE releases = %s \
-                                       AND loadable = 'Y'", self.id)
+                                       AND loadable = 'Y' AND NOT filetype = 'torrent'", self.id)
 
                        self.__files = [File(self, f.id) for f in files]
                        self.__files.sort(lambda a, b: cmp(a.prio, b.prio))
@@ -190,6 +205,9 @@ class Release(object):
                if "usb-hdd" in filename:
                        return "usbhdd"
 
+               if "arm" in filename:
+                       return "arm"
+
                if "scon" in filename:
                        return "alix"
 
index ca6b5ce4387063c5d9e8019eed15287f106f690a..21cb8a4162e99ffee051a0126f35dbe8a67feb7d 100644 (file)
@@ -10,7 +10,7 @@ import re
 
 from misc import Singleton
 
-DATABASE_HOST = ["irma.ipfire.org", "madeye.ipfire.org"]
+DATABASE_HOST = ["wilhelmina.ipfire.org"]
 DATABASE_NAME = "stasy"
 
 CPU_SPEED_CONSTRAINTS = (0, 500, 1000, 1500, 2000, 2500, 3000, 3500)
index 32751a38f95c02b7544b118468b83eca3c2e25f8..5f922df33b0f05eb1d1ef41f3a538319e26e738b 100644 (file)
@@ -21,6 +21,7 @@ from handlers_download import *
 from handlers_iuse import *
 from handlers_mirrors import *
 from handlers_news import *
+from handlers_nopaste import *
 from handlers_planet import *
 from handlers_rss import *
 from handlers_stasy import *
@@ -56,10 +57,8 @@ class IndexHandler(BaseHandler):
        def get(self):
                # Get a list of the most recent news items and put them on the page.            
                latest_news = self.news.get_latest(limit=1, locale=self.locale)
-               recent_planets = self.planet.get_entries(limit=1)
 
-               return self.render("index.html",
-                       latest_news=latest_news, recent_planets=recent_planets)
+               return self.render("index.html", latest_news=latest_news)
 
 
 class StaticHandler(BaseHandler):
index 4096800c9a92a213383be6bf62a7d9f2309adc4e..eeddffdddf36be68782fe81e7e1cd85cb0a358a2 100644 (file)
@@ -1,9 +1,13 @@
 #!/usr/bin/python
 
-# XXX most of this is broken
-
 import tornado.web
 
+import matplotlib
+matplotlib.use("Agg")
+
+import matplotlib.pyplot as plt
+import matplotlib.dates
+
 from handlers_base import *
 
 import backend
@@ -17,6 +21,10 @@ class AdminBaseHandler(BaseHandler):
        def planet(self):
                return backend.Planet()
 
+       @property
+       def downloads(self):
+               return backend.Downloads()
+
        def get_current_user(self):
                return self.get_secure_cookie("account")
 
@@ -255,3 +263,45 @@ class AdminNewsCreateHandler(AdminNewsBaseHandler):
 
 class AdminNewsEditHandler(AdminNewsCreateHandler):
        pass
+
+
+class AdminDownloadsHandler(AdminBaseHandler):
+       @tornado.web.authenticated
+       def get(self):
+               self.render("admin-downloads.html",
+                       downloads_total = self.downloads.total,
+                       downloads_today = self.downloads.today,
+                       downloads_yesterday = self.downloads.yesterday,
+                       downloads_locations_today = self.downloads.get_countries("today"),
+                       downloads_locations_total = self.downloads.get_countries(),
+               )
+
+
+class AdminDownloadsMirrorsHandler(AdminBaseHandler):
+       @tornado.web.authenticated
+       def get(self):
+               self.render("admin-downloads-mirrors.html",
+                       mirror_load_total = self.downloads.get_mirror_load(),
+                       mirror_load_today = self.downloads.get_mirror_load("today"),
+               )
+
+
+class AdminDownloadsGraphHandler(AdminBaseHandler):
+       @tornado.web.authenticated
+       def get(self):
+               x = []
+               y = []
+               for row in self.downloads.daily_map:
+                       x.append(matplotlib.dates.date2num(row.date))
+                       y.append(row.downloads)
+
+               print x, y
+
+               # Create output image.
+               fig = plt.figure()
+
+               # Plot the data.
+               plot = fig.add_subplot(111)
+               plot.plot(x, y)
+
+               fig.savefig("nice-image.svg")
index e78cb6b270acd898e502f271f5024a808e51442f..209d9b6289a8d11635c2eee98455a3156d0072c2 100644 (file)
@@ -1,5 +1,7 @@
 #!/usr/bin/python
 
+from __future__ import division
+
 import httplib
 import time
 import tornado.locale
@@ -7,6 +9,17 @@ import tornado.web
 
 import backend
 
+def format_size(b):
+       units = ["B", "k", "M", "G"]
+       unit_pointer = 0
+
+       while b >= 1024 and unit_pointer < len(units):
+               b /= 1024
+               unit_pointer += 1
+
+       return "%.1f%s" % (b, units[unit_pointer])
+
+
 class BaseHandler(tornado.web.RequestHandler):
        rss_url = None
 
@@ -14,36 +27,60 @@ class BaseHandler(tornado.web.RequestHandler):
                # Find the name of the author
                return self.accounts.find(uid)
 
-       def get_user_locale(self):
-               DEFAULT_LOCALE = tornado.locale.get("en_US")
-               ALLOWED_LOCALES = \
-                       [tornado.locale.get(l) for l in tornado.locale.get_supported_locales(None)]
+       def get_supported_locales(self):
+               for l in tornado.locale.get_supported_locales(None):
+                       yield tornado.locale.get(l)
+
+       def valid_locale(self, locale):
+               if not locale:
+                       return False
+
+               for l in self.get_supported_locales():
+                       if l.code.startswith(locale):
+                               return True
 
-               # One can append "?locale=de" to mostly and URI on the site and
-               # another output that guessed.
+               return False
+
+       def get_query_locale(self):
                locale = self.get_argument("locale", None)
+
+               if locale is None:
+                       return
+
+               if self.valid_locale(locale):
+                       return locale
+
+       def prepare(self):
+               locale = self.get_query_locale()
                if locale:
-                       for l in ALLOWED_LOCALES:
-                               if not l.code.startswith(locale):
-                                       continue
+                       self.set_cookie("locale", locale)
 
-                               return l
+       def get_user_locale(self):
+               default_locale = tornado.locale.get("en_US")
 
                # The planet is always in english.
                if self.request.host == "planet.ipfire.org":
-                       return DEFAULT_LOCALE
+                       return default_locale
 
-               # If no locale was provided we guess what the browser sends us
-               locale = self.get_browser_locale()
-               if locale in ALLOWED_LOCALES:
-                       return locale
+               # Get the locale from the query.
+               locale = self.get_query_locale()
+               if not locale:
+                       # Read the locale from the cookies.
+                       locale = self.get_cookie("locale", None)
+
+                       if not locale:
+                               locale = self.get_browser_locale().code
+
+               for l in self.get_supported_locales():
+                       if l.code.startswith(locale):
+                               return l
 
-               # If no one of the cases above worked we use our default locale
-               return DEFAULT_LOCALE
+               return default_locale
 
        @property
        def render_args(self):
                return {
+                       "format_size" : format_size,
                        "hostname" : self.request.host,
                        "lang" : self.locale.code[:2],
                        "rss_url" : self.rss_url,
index e93b3b665507c6e66f465c4dfcc30dadd98c8dba..f6416ce3c1d5c1f31ebfa0c3dbfc2ba9762c5576 100644 (file)
@@ -107,3 +107,6 @@ class DownloadCompatHandler(BaseHandler):
 
                self.redirect("/%s" % _filename)
 
+class DownloadSplashHandler(BaseHandler):
+       def get(self):
+               self.render("download-splash.html")
diff --git a/www/webapp/handlers_nopaste.py b/www/webapp/handlers_nopaste.py
new file mode 100644 (file)
index 0000000..ec29f7e
--- /dev/null
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+
+import tornado.web
+
+from handlers_base import *
+
+
+class NopasteIndexHandler(BaseHandler):
+       def get(self):
+               self.render("nopaste-index.html")
+
+       def post(self):
+               pass
+
+
+class NopasteEntryHandler(BaseHandler):
+       def get(self, uuid):
+               pass
+
index 0e7b7a37c61e66053dd6df22b31253142f75ca48..c77b3bece63dd23fc6435746b39a85ddb4a55574 100644 (file)
@@ -40,23 +40,7 @@ class UIModule(tornado.web.UIModule):
 
 class MenuModule(UIModule):
        def render(self):
-               hostname = self.request.host.lower().split(':')[0]
-
-               menuitems = []
-               for m in backend.Menu().get(hostname):
-                       m.active = False
-
-                       if m.uri and self.request.uri.endswith(m.uri):
-                               m.active = True
-
-                       # Translate the description of the link
-                       m.description = \
-                               self.locale.translate(m.description)
-                       m.description = tornado.escape.xhtml_escape(m.description)
-
-                       menuitems.append(m)
-
-               return self.render_string("modules/menu.html", menuitems=menuitems)
+               return self.render_string("modules/menu.html")
 
 
 class NewsItemModule(UIModule):
@@ -69,7 +53,7 @@ class NewsItemModule(UIModule):
                        _ = self.locale.translate
                        return _("Unknown author")
 
-       def render(self, item, uncut=False):
+       def render(self, item, uncut=True, announcement=False, show_heading=True):
                # Get author
                item.author = self.get_author(item.author_id)
 
@@ -86,7 +70,8 @@ class NewsItemModule(UIModule):
 
                item.text = text
 
-               return self.render_string("modules/news-item.html", item=item, uncut=uncut)
+               return self.render_string("modules/news-item.html", item=item,
+                       uncut=uncut, announcement=announcement, show_heading=show_heading)
 
 
 class NewsLineModule(NewsItemModule):
@@ -111,8 +96,20 @@ class SidebarReleaseModule(UIModule):
 
 
 class ReleaseItemModule(UIModule):
-       def render(self, item):
-               return self.render_string("modules/release-item.html", release=item)
+       def render(self, release, latest=False):
+               files = {
+                       "i586" : [],
+                       "arm"  : [],
+               }
+
+               for file in release.files:
+                       try:
+                               files[file.arch].append(file)
+                       except KeyError:
+                               pass
+
+               return self.render_string("modules/release-item.html",
+                       release=release, latest=latest, files=files)
 
 
 class SidebarBannerModule(UIModule):
@@ -123,10 +120,27 @@ class SidebarBannerModule(UIModule):
                return self.render_string("modules/sidebar-banner.html", item=item)
 
 
+class DownloadButtonModule(UIModule):
+       def render(self, release, text="Download now!"):
+               best_image = None
+
+               for file in release.files:
+                       if file.type == "iso":
+                               best_image = file
+                               break
+
+               # Show nothing when there was no image found.
+               if not best_image:
+                       return ""
+
+               return self.render_string("modules/download-button.html",
+                       release=release, image=best_image)
+
+
 class PlanetEntryModule(UIModule):
-       def render(self, entry, short=False):
+       def render(self, entry, show_avatar=True):
                return self.render_string("modules/planet-entry.html",
-                       entry=entry, short=short)
+                       entry=entry, show_avatar=show_avatar)
 
 
 class TrackerPeerListModule(UIModule):