diff --git a/misc/update_scripts/nix_scripts/tmux/lib/IRCScraper/settings_example.php b/misc/update_scripts/nix_scripts/tmux/lib/IRCScraper/settings.example.php similarity index 100% rename from misc/update_scripts/nix_scripts/tmux/lib/IRCScraper/settings_example.php rename to misc/update_scripts/nix_scripts/tmux/lib/IRCScraper/settings.example.php diff --git a/newznab/controllers/AdminPage.php b/newznab/controllers/AdminPage.php index 9ba9e1355..6c551bdfb 100644 --- a/newznab/controllers/AdminPage.php +++ b/newznab/controllers/AdminPage.php @@ -15,9 +15,9 @@ class AdminPage extends BasePage $tplpaths = []; if ($this->settings->getSetting('style') != "default") - $tplpaths["style_admin"] = WWW_DIR.'templates/'.$this->settings->getSetting('style').'/views/admin'; - $tplpaths["admin"] = WWW_DIR.'templates/default/views/admin'; - $tplpaths["frontend"] = WWW_DIR.'templates/default/views/frontend'; + $tplpaths["style_admin"] = WWW_DIR.'templates_shared/views/admin'; + $tplpaths["admin"] = WWW_DIR.'templates_shared/views/admin'; + $tplpaths["frontend"] = WWW_DIR.'templates/nntmux/views/frontend'; $this->smarty->setTemplateDir($tplpaths); $users = new Users(); diff --git a/newznab/controllers/BasePage.php b/newznab/controllers/BasePage.php index 4c059bd44..4c3d0061b 100644 --- a/newznab/controllers/BasePage.php +++ b/newznab/controllers/BasePage.php @@ -75,7 +75,7 @@ class BasePage $this->smarty->setTemplateDir( [ 'user_frontend' => NN_WWW . 'templates/' . $this->settings->getSetting('style') . '/views/frontend', - 'frontend' => NN_WWW . 'templates/default/views/frontend' + 'frontend' => NN_WWW . 'templates/nntmux/views/frontend' ] ); $this->smarty->setCompileDir(SMARTY_DIR.'templates_c'.DIRECTORY_SEPARATOR); @@ -107,7 +107,7 @@ class BasePage $this->smarty->setTemplateDir( [ 'user_frontend' => NN_WWW . 'templates/' . $this->userdata['style'] . '/views/frontend', - 'frontend' => NN_WWW . 'templates/default/views/frontend' + 'frontend' => NN_WWW . 'templates/nntmux/views/frontend' ] ); } diff --git a/www/config.php.example b/www/config.example.php similarity index 100% rename from www/config.php.example rename to www/config.example.php diff --git a/www/pages/ajax_rarfilelist.php b/www/pages/ajax_rarfilelist.php index 002d32972..ff8618a68 100644 --- a/www/pages/ajax_rarfilelist.php +++ b/www/pages/ajax_rarfilelist.php @@ -16,6 +16,6 @@ else //print "

rar archive contains...

\n"; print ""; } \ No newline at end of file diff --git a/www/settings.php.example b/www/settings.example.php similarity index 100% rename from www/settings.php.example rename to www/settings.example.php diff --git a/www/templates/charisma/views/frontend/dlbrowse.tpl b/www/templates/charisma/views/frontend/dlbrowse.tpl index 95895dbbb..78ca0c994 100644 --- a/www/templates/charisma/views/frontend/dlbrowse.tpl +++ b/www/templates/charisma/views/frontend/dlbrowse.tpl @@ -32,7 +32,7 @@ {foreach from=$results item=result} - {assign var="icon" value='templates/default/images/fileicons/'|cat:$result.pathinfo.extension|cat:".png"} + {assign var="icon" value='templates/charisma/images/fileicons/'|cat:$result.pathinfo.extension|cat:".png"} {if $result.isdir == "1"} {assign var="icon" value='folder'} {elseif $result.pathinfo.extension == "" || !is_file("$icon")} @@ -42,7 +42,7 @@ {/if} {$result.pathinfo.extension} + src="{$smarty.const.WWW_TOP}/templates/charisma/images/fileicons/{$icon}.png"/> {if $result.isdir == 1} {$result.name|escape:"htmlall"} diff --git a/www/templates/charisma/views/frontend/nzbvortex-ajax.tpl b/www/templates/charisma/views/frontend/nzbvortex-ajax.tpl index 0df45e4cb..eb9162073 100644 --- a/www/templates/charisma/views/frontend/nzbvortex-ajax.tpl +++ b/www/templates/charisma/views/frontend/nzbvortex-ajax.tpl @@ -9,10 +9,10 @@
{if $nzb['isPaused'] eq 1} - {else} - {/if}
@@ -28,25 +28,25 @@
{if $nzb['isPaused'] eq 1} + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/vortex/play.png"/> {else} + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/vortex/pause.png"/> {/if} + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/vortex/tv.png"/>
+ src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/vortex/arrow2_n.png"/> + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/vortex/arrow2_s.png"/> + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/vortex/arrow3_s.png"/> + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/vortex/arrow3_n.png"/> + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/vortex/trash.png"/>

diff --git a/www/templates/charisma/views/frontend/opensearch.tpl b/www/templates/charisma/views/frontend/opensearch.tpl index 191570c66..a2cfc38e9 100644 --- a/www/templates/charisma/views/frontend/opensearch.tpl +++ b/www/templates/charisma/views/frontend/opensearch.tpl @@ -4,11 +4,11 @@ {$site->title|escape} Search Facility {$site->email} - {$serverroot}templates/default/images/favicon.ico + {$serverroot}templates/charisma/images/favicon.ico newznab.com UTF-8 {$serverroot} {$serverroot}opensearch - {$serverroot}templates/default/images/favicon.ico + {$serverroot}templates/charisma/images/favicon.ico 7 \ No newline at end of file diff --git a/www/templates/charisma/views/frontend/viewanime.tpl b/www/templates/charisma/views/frontend/viewanime.tpl index 0064dcf43..3f5af082c 100644 --- a/www/templates/charisma/views/frontend/viewanime.tpl +++ b/www/templates/charisma/views/frontend/viewanime.tpl @@ -147,19 +147,19 @@ {if isset($sabintegrated)} Send to my Sabnzbd + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/sabup.png"> {/if} {if $weHasVortex} Send to my NZBVortex + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/vortex/bigsmile.png"> {/if} {if isset($nzbgetintegrated)}Send to NZBget + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/nzbgetup.png"> {/if} {if isset($isadmin)}
diff --git a/www/templates/charisma/views/frontend/viewfilelist.tpl b/www/templates/charisma/views/frontend/viewfilelist.tpl index ae36e1802..8cef59d5f 100644 --- a/www/templates/charisma/views/frontend/viewfilelist.tpl +++ b/www/templates/charisma/views/frontend/viewfilelist.tpl @@ -19,7 +19,7 @@ {$smarty.foreach.iteration.index+1} {$file.title|escape:'htmlall'} - {assign var="icon" value='templates/default/images/fileicons/'|cat:$file.ext|cat:".png"} + {assign var="icon" value='templates/charisma/images/fileicons/'|cat:$file.ext|cat:".png"} {if $file.ext == "" || !is_file("$icon")} {assign var="icon" value='file'} {else} @@ -33,7 +33,7 @@ {/if} {$file.ext} + src="{$smarty.const.WWW_TOP}/templates/charisma/images/fileicons/{$icon}.png"/> {if $completion < 100}{$completion} %{else}{$completion}%{/if} {if $file.size < 100000}{$file.size|fsize_format:"KB"}{else}{$file.size|fsize_format:"MB"}{/if} diff --git a/www/templates/charisma/views/frontend/viewseries.tpl b/www/templates/charisma/views/frontend/viewseries.tpl index 533121e16..ce0f5f6de 100644 --- a/www/templates/charisma/views/frontend/viewseries.tpl +++ b/www/templates/charisma/views/frontend/viewseries.tpl @@ -206,7 +206,7 @@ {if isset($sabintegrated)} Send to my Sabnzbd + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/sabup.png"> {/if} {if $weHasVortex} @@ -214,14 +214,14 @@ title="Send to NZBVortex"> Send to my NZBVortex + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/vortex/bigsmile.png"> {/if} {if isset($nzbgetintegrated)}Send to NZBget + src="{$smarty.const.WWW_TOP}/templates/charisma/images/icons/nzbgetup.png"> {/if} {if isset($isadmin)}
diff --git a/www/templates/nntmux/views/admin/adminmenu.tpl b/www/templates/nntmux/views/admin/adminmenu.tpl deleted file mode 100644 index 37441af4e..000000000 --- a/www/templates/nntmux/views/admin/adminmenu.tpl +++ /dev/null @@ -1,53 +0,0 @@ -

Admin Functions

- diff --git a/www/templates/nntmux/views/admin/ajax_release-edit.tpl b/www/templates/nntmux/views/admin/ajax_release-edit.tpl deleted file mode 100644 index 8711069a6..000000000 --- a/www/templates/nntmux/views/admin/ajax_release-edit.tpl +++ /dev/null @@ -1,106 +0,0 @@ - -
- -{if $success} - -

Successfully updated!

-{if $from != ''} - -{/if} - -{else} - -{literal} - -{/literal} - -
- -{foreach from=$idArr item=id} - -{/foreach} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - {html_options id="category" name=category options=$catlist selected=$release.categoryid} -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
- -
- -
- -{/if} - -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/anidb-edit.tpl b/www/templates/nntmux/views/admin/anidb-edit.tpl deleted file mode 100644 index b3f1626cd..000000000 --- a/www/templates/nntmux/views/admin/anidb-edit.tpl +++ /dev/null @@ -1,119 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/anidb-list.tpl b/www/templates/nntmux/views/admin/anidb-list.tpl deleted file mode 100644 index 409d82f0c..000000000 --- a/www/templates/nntmux/views/admin/anidb-list.tpl +++ /dev/null @@ -1,41 +0,0 @@ -

{$page->title}

- -{if $anidblist} - -
- -
- - -    - -
-
- -{$pager} - -

- - - - - - - - - - {foreach from=$anidblist item=anidb} - - - - - - {/foreach} - -
AniDB IdTitleOptions
{$anidb.anidbid}{$anidb.title|escape:"htmlall"}delete | remove
- -
- {$pager} -{else} -

No AniDB episodes available.

-{/if} diff --git a/www/templates/nntmux/views/admin/anidb-remove.tpl b/www/templates/nntmux/views/admin/anidb-remove.tpl deleted file mode 100644 index 97d0bf29f..000000000 --- a/www/templates/nntmux/views/admin/anidb-remove.tpl +++ /dev/null @@ -1,4 +0,0 @@ - -

{$page->title}

- -Removed anidbid from {$numtv} releases. \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/baseadminpage.tpl b/www/templates/nntmux/views/admin/baseadminpage.tpl deleted file mode 100644 index 15053ddca..000000000 --- a/www/templates/nntmux/views/admin/baseadminpage.tpl +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - {$site->title|default:'newznab'} - {$page->meta_title|default:$page->title} - - - - - - - - - - - {$page->head} - - - -
- - - -
- -
- -
- -
- {$page->content} -
- - - - - -
 
- -
- - -
-
-
-
- - - - - {if $site->google_analytics_acc != ''} - {literal} - - - - {/literal} - {/if} - - - \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/binaryblacklist-edit.tpl b/www/templates/nntmux/views/admin/binaryblacklist-edit.tpl deleted file mode 100644 index 2407eeaab..000000000 --- a/www/templates/nntmux/views/admin/binaryblacklist-edit.tpl +++ /dev/null @@ -1,71 +0,0 @@ - -

{$page->title}

- -{if $error != ''} -
{$error}
-{/if} - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Group: - - -
The full name of a valid newsgroup. (Wildcard in the format 'alt.binaries.*')
-
Regex: - -
The regex to be applied. (Note: Beginning and Ending / are already included)
-
Description: - -
A description for this regex
-
: - {html_radios id="msgcol" name='msgcol' values=$msgcol_ids output=$msgcol_names selected=$regex.msgcol separator='
'} -
Which field in the message to apply the black/white list to.
-
: - {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$regex.status separator='
'} -
Only active regexes are applied during the release process.
-
: - {html_radios id="optype" name='optype' values=$optype_ids output=$optype_names selected=$regex.optype separator='
'} -
Black will exclude all messages for a group which match this regex. White will include only those which match.
-
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/binaryblacklist-list.tpl b/www/templates/nntmux/views/admin/binaryblacklist-list.tpl deleted file mode 100644 index 93a408784..000000000 --- a/www/templates/nntmux/views/admin/binaryblacklist-list.tpl +++ /dev/null @@ -1,37 +0,0 @@ - -

{$page->title}

- -

- Binaries can be prevented from being added to the index at all if they match a regex provided in the blacklist. They can also be included only if they match a regex (whitelist). -

- -
- - - - - - - - - - - - - - {foreach from=$binlist item=bin} - - - - - - - - - - {/foreach} - -
idgroupregextypefieldstatusOptions
{$bin.id}{$bin.groupname|replace:"alt.binaries":"a.b"} - {$bin.regex|escape:html}
- {$bin.description} -
{if $bin.optype==1}black{else}white{/if}{if $bin.msgcol==1}subject{elseif $bin.msgcol==2}poster{else}messageid{/if}{if $bin.status==1}active{else}disabled{/if}edit | delete
diff --git a/www/templates/nntmux/views/admin/book-edit.tpl b/www/templates/nntmux/views/admin/book-edit.tpl deleted file mode 100644 index 417958379..000000000 --- a/www/templates/nntmux/views/admin/book-edit.tpl +++ /dev/null @@ -1,71 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
: - -
: - -
: - -
: - -
: - -
: - - {if $book.cover == 1} - - {/if} -
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/book-list.tpl b/www/templates/nntmux/views/admin/book-list.tpl deleted file mode 100644 index a83c0d369..000000000 --- a/www/templates/nntmux/views/admin/book-list.tpl +++ /dev/null @@ -1,29 +0,0 @@ -

{$page->title}

- -{if $booklist} -{$pager} - - - - - - - - - - - {foreach from=$booklist item=book} - - - - - - - {/foreach} - -
idTitleAuthorCreated
{$book.id}{$book.title}{$book.author}{$book.createddate|date_format}
-
- {$pager} -{else} -

No books available.

-{/if} diff --git a/www/templates/nntmux/views/admin/category-edit.tpl b/www/templates/nntmux/views/admin/category-edit.tpl deleted file mode 100644 index 34dc4407d..000000000 --- a/www/templates/nntmux/views/admin/category-edit.tpl +++ /dev/null @@ -1,68 +0,0 @@ - -

{$page->title}

- -{if $error != ''} -
{$error}
-{/if} - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Title: - - {$category.title} -
Parent: - {$category.parentid} -
Description: - -
Minimum Size (Bytes): - -
Maximum Size (Bytes): - -
: - {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$category.status separator='
'} -
: - {html_radios id="disablepreview" name='disablepreview' values=$status_ids output=$status_names selected=$category.disablepreview separator='
'} -
- -
- -
diff --git a/www/templates/nntmux/views/admin/category-list.tpl b/www/templates/nntmux/views/admin/category-list.tpl deleted file mode 100644 index 613e3debf..000000000 --- a/www/templates/nntmux/views/admin/category-list.tpl +++ /dev/null @@ -1,43 +0,0 @@ - -

{$page->title}

- -

- Make a category inactive to remove it from the menu. This does not prevent binaries being matched into an appropriate category. Disable preview prevents ffmpeg being used for releases in the category. -

- - - - - - - - - - - - - - {foreach from=$categorylist item=category} - - - - - - - - - - {/foreach} - - -
idtitleparentmin sizemax sizeactivedisable preview
{$category.id}{$category.title} - {if $category.parentid != null} - {$category.parentName} - {else} - n/a - {/if} - - {if $category.minsizetoformrelease != 0 }{$category.minsizetoformrelease|fsize_format:"MB"}{/if} - - {if $category.maxsizetoformrelease != 0 }{$category.maxsizetoformrelease|fsize_format:"MB"}{/if} - {if $category.status == "1"}Yes{else}No{/if}{if $category.disablepreview == "1"}Yes{else}No{/if}
diff --git a/www/templates/nntmux/views/admin/category_regexes-edit.tpl b/www/templates/nntmux/views/admin/category_regexes-edit.tpl deleted file mode 100644 index 246859a92..000000000 --- a/www/templates/nntmux/views/admin/category_regexes-edit.tpl +++ /dev/null @@ -1,73 +0,0 @@ -

{$page->title}

-{if $error != ''} -
{$error}
-{/if} -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- Regex to match against a group or multiple groups.
- Delimiters are already added, and PCRE_CASELESS is added after for case insensitivity. - An example of matching a single group: alt\.binaries\.example
- An example of matching multiple groups: alt\.binaries.* -
-
- -
- Regex to use when categorizing releases.
- The regex delimiters are not added, you MUST add them. See this page.
- To make the regex case insensitive, add i after the last delimiter.
-
-
- -
- Description for this regex.
- You can include an example usenet subject this regex would match on. -
-
- -
- The order to run this regex in.
- Must be a number, 0 or higher.
- If multiple regex have the same ordinal, MySQL will randomly sort them. -
-
- {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$regex.status separator='
'} -
Only active regex are used during the collection matching process.
-
- {html_options id="category_id" name='category_id' values=$category_ids output=$category_names selected=$regex.category_id} -
Select a category which releases matched to this regex will go into.
-
- -
-
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/category_regexes-list.tpl b/www/templates/nntmux/views/admin/category_regexes-list.tpl deleted file mode 100644 index f56d02405..000000000 --- a/www/templates/nntmux/views/admin/category_regexes-list.tpl +++ /dev/null @@ -1,47 +0,0 @@ -

{$page->title}

-

This page lists regex used for categorizing releases.
- You can recategorize all releases by running misc/update/update_releases.php 6 true -

-
- -
- - -    - -
-{if $regex} - -
{$pager}
- - - - - - - - - - - - - {foreach from=$regex item=row} - - - - - - - - {if $row.status==1} - - {else} - - {/if} - - - - {/foreach} -
idgroupeditdescriptiondeleteordinalstatusregexcategory id
{$row.id}{$row.group_regex}Edit{$row.description|truncate:50:"...":true}Delete{$row.ordinal}ActiveDisabled{$row.regex|escape:html|truncate:50:"...":true}{$row.category_id}
-
{$pager}
-{/if} \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/collection_regexes-edit.tpl b/www/templates/nntmux/views/admin/collection_regexes-edit.tpl deleted file mode 100644 index 41e885d25..000000000 --- a/www/templates/nntmux/views/admin/collection_regexes-edit.tpl +++ /dev/null @@ -1,73 +0,0 @@ -

{$page->title}

-{if $error != ''} -
{$error}
-{/if} -
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- Regex to match against a group or multiple groups.
- Delimiters are already added, and PCRE_CASELESS is added after for case insensitivity. - An example of matching a single group: alt\.binaries\.example
- An example of matching multiple groups: alt\.binaries.* -
-
- -
- The regex to use when matching (grouping) collections.
- The regex delimiters are not added, you MUST add them. See this page.
- To make the regex case insensitive, add i after the last delimiter.
- You MUST include at least one regex capture group.
- You MUST name your regex capture groups (the ones you want to be included).
- A string will be created from your matched capture groups.
- The string will form part of a "collection hash".
- The collection hash is used to group many parts together, to form the finalized release.
- The usenet group and name of the poster are added automatically when hashing.
- Capture groups are sorted alphabetically (by capture group name) when concatenating the string.
-
-
- -
- Description for this regex.
- You can include an example usenet subject this regex would match on. -
-
- -
- The order to run this regex in.
- Must be a number, 0 or higher.
- If multiple regex have the same ordinal, MySQL will randomly sort them. -
-
- {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$regex.status separator='
'} -
Only active regex are used during the collection matching process.
-
- -
-
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/collection_regexes-list.tpl b/www/templates/nntmux/views/admin/collection_regexes-list.tpl deleted file mode 100644 index 1d4c56f9a..000000000 --- a/www/templates/nntmux/views/admin/collection_regexes-list.tpl +++ /dev/null @@ -1,43 +0,0 @@ -

{$page->title}

-

This page lists regex used for grouping usenet collections.

-
- -
- - -    - -
-{if $regex} - -
{$pager}
- - - - - - - - - - - - {foreach from=$regex item=row} - - - - - - - - {if $row.status==1} - - {else} - - {/if} - - - {/foreach} -
idgroupeditdescriptiondeleteordinalstatusregex
{$row.id}{$row.group_regex}Edit{$row.description|truncate:50:"...":true}Delete{$row.ordinal}ActiveDisabled{$row.regex|escape:html|truncate:50:"...":true}
-
{$pager}
-{/if} \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/collection_regexes-test.tpl b/www/templates/nntmux/views/admin/collection_regexes-test.tpl deleted file mode 100644 index 0c5738543..000000000 --- a/www/templates/nntmux/views/admin/collection_regexes-test.tpl +++ /dev/null @@ -1,44 +0,0 @@ -

{$page->title}

-

This page is used for testing regex for grouping usenet collections.
Enter the group name to test and a regex. Limit is how many collections to show max on the page, 0 for no limit(slow).

- -{if $tpg} -
- -
- -
- -
- -
- {if $data} - - {foreach from=$data key=hash item=collection} - - - - -
{$hash}
Current Files: {count($collection)}
- - - - - - - - - {foreach from=$collection item=row} - - - - - - - - {/foreach} -
namecurrent partstotal partsposterold hash
{$row.file_name}{$row.file_current_parts}{$row.file_total_parts}{$row.collection_poster}{$row.old_collection_hash}
- {/foreach} - {/if} -{else} -

The Table Per Group setting is required to be on to use this page, for performance reasons.

-{/if} \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/comments-list.tpl b/www/templates/nntmux/views/admin/comments-list.tpl deleted file mode 100644 index dd11d9f1d..000000000 --- a/www/templates/nntmux/views/admin/comments-list.tpl +++ /dev/null @@ -1,38 +0,0 @@ -

{$page->title}

- -{if $commentslist} -{$pager} - - - - - - - - - - - - - {foreach from=$commentslist item=comment} - - - - - - - - {/foreach} - - -
userdatecommenthostoptions
- {if $comment.sourceid == 0}{$comment.username}{else}{$comment.username}
(syndicated){/if} -
{$comment.createddate|date_format} ({$comment.createddate|timeago} - ago) - {$comment.text|escape:"htmlall"|nl2br}{$comment.host} - {if $comment.guid != ""}view | {/if} - delete -
-{else} -

No comments available

-{/if} diff --git a/www/templates/nntmux/views/admin/console-edit.tpl b/www/templates/nntmux/views/admin/console-edit.tpl deleted file mode 100644 index ba6827608..000000000 --- a/www/templates/nntmux/views/admin/console-edit.tpl +++ /dev/null @@ -1,96 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - - {if $console.cover == 1} - - {/if} -
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/console-list.tpl b/www/templates/nntmux/views/admin/console-list.tpl deleted file mode 100644 index 255f79139..000000000 --- a/www/templates/nntmux/views/admin/console-list.tpl +++ /dev/null @@ -1,30 +0,0 @@ -

{$page->title}

- -{if $consolelist} -{$pager} - - - - - - - - - - - {foreach from=$consolelist item=console} - - - - - - - {/foreach} - -
idTitlePlatformCreated
{$console.id}{$console.title}{$console.platform}{$console.createddate|date_format}
- -
-{$pager} -{else} -

No games available.

-{/if} diff --git a/www/templates/nntmux/views/admin/content-add.tpl b/www/templates/nntmux/views/admin/content-add.tpl deleted file mode 100644 index d3e1e7410..000000000 --- a/www/templates/nntmux/views/admin/content-add.tpl +++ /dev/null @@ -1,74 +0,0 @@ -

{$page->title}

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
- {html_options id="contenttype" name='contenttype' options=$contenttypelist selected=$content->contenttype} -
- {html_options id="role" name='role' options=$rolelist selected=$content->role} -
Only appropriate for articles and useful links
-
- {html_radios id="showinmenu" name='showinmenu' values=$yesno_ids output=$yesno_names selected=$content->showinmenu separator='
'} -
- {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$content->status separator='
'} -
- -
If you set the ordinal = 1, then a all ordinals greater than 0 will be renumbered. This allows new content to be at the top without having to renumber all previous content.
If you set ordinal = 0, it will be at the top, sorted by ID(order added)
-
- -
-
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/content-list.tpl b/www/templates/nntmux/views/admin/content-list.tpl deleted file mode 100644 index f55ac1d33..000000000 --- a/www/templates/nntmux/views/admin/content-list.tpl +++ /dev/null @@ -1,57 +0,0 @@ -

{$page->title}

- - - - - - - - - - - - - - {foreach from=$contentlist item=content} - - - - - - - - - - - - - {/foreach} -
ordinalidtitleurltypestatusrolein menubodyoptions
{$content->ordinal}{$content->id}{$content->title}{$content->url}c{$content->id} - {if $content->contenttype == "1"} - Useful Link - {elseif $content->contenttype == "2"} - Article - {elseif $content->contenttype == "3"} - Homepage - {/if} - - {if $content->status == "1"} - Enabled - {else} - Disabled - {/if} - - {if $content->role == "0"} - Everyone - {elseif $content->role == "1"} - Users - {elseif $content->role == "2"} - Admins - {/if} - - {if $content->showinmenu == "1"} - Yes - {else} - No - {/if} - {$content->body|truncate:100|escape:'htmlall'}{if $content->contenttype != "3"}delete{/if}
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/db-optimise.tpl b/www/templates/nntmux/views/admin/db-optimise.tpl deleted file mode 100644 index 61c81e2e6..000000000 --- a/www/templates/nntmux/views/admin/db-optimise.tpl +++ /dev/null @@ -1,16 +0,0 @@ - -

{$page->title}

- - - - - - - - {foreach from=$tablelist item=table} - - - - {/foreach} - -
message
{$table} optimised/repaired
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/game-edit.tpl b/www/templates/nntmux/views/admin/game-edit.tpl deleted file mode 100644 index b69bbb798..000000000 --- a/www/templates/nntmux/views/admin/game-edit.tpl +++ /dev/null @@ -1,75 +0,0 @@ -

{$page->title}

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- (Game ID of the url posted below, if unknown put 0) -
- -
- -
- -
- -
- -
- -
- - {if $game.cover == 1} - - {/if} -
- -
-
diff --git a/www/templates/nntmux/views/admin/game-list.tpl b/www/templates/nntmux/views/admin/game-list.tpl deleted file mode 100644 index a337f7803..000000000 --- a/www/templates/nntmux/views/admin/game-list.tpl +++ /dev/null @@ -1,22 +0,0 @@ -

{$page->title}

-{if $gamelist} - {$pager} - - - - - - - - {foreach from=$gamelist item=game} - - - - - - - {/foreach} -
IDTitleGenreCreated
{$game.id}{$game.title}{$game.genretitle}{$game.createddate|date_format}
-{else} -

No games available.

-{/if} diff --git a/www/templates/nntmux/views/admin/group-bulk.tpl b/www/templates/nntmux/views/admin/group-bulk.tpl deleted file mode 100644 index 5ca655361..000000000 --- a/www/templates/nntmux/views/admin/group-bulk.tpl +++ /dev/null @@ -1,60 +0,0 @@ - -

{$page->title}

- -{if $groupmsglist} - - - - - - - - {foreach from=$groupmsglist item=group} - - - - - {/foreach} - -
groupmsg
{$group.group}{$group.msg}
- -

View all groups.

- -{else} -

Regex of groups to add to the site.

- -
- - - - - - - - - - - - - - - - - - - -
Group List: - -
A regular expression to match against group names e.g. alt.binaries.cd.image.linux|alt.binaries.warez.linux
-
: - {html_radios id="active" name='active' values=$yesno_ids output=$yesno_names selected=1 separator='
'} -
Inactive groups will not have headers downloaded for them.
-
- {html_radios id="backfill" name='backfill' values=$yesno_ids output=$yesno_names selected=0 separator='
'} -
Inactive groups will not have backfill headers downloaded for them.
-
- -
- -
-{/if} \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/group-edit.tpl b/www/templates/nntmux/views/admin/group-edit.tpl deleted file mode 100644 index 2a001db94..000000000 --- a/www/templates/nntmux/views/admin/group-edit.tpl +++ /dev/null @@ -1,74 +0,0 @@ -

{$page->title}

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name: - - -
Changing the name to an invalid group will break things.
-
- -
- -
Number of days to attempt to backfill this group. Adjust as necessary.
-
- -
The minimum number of files to make a release. i.e. if set to two, then releases which only contain one file will not be created. If left blank, will use the site wide setting.
-
- -
The minimum total size in bytes to make a release. If left blank, will use the site wide setting.
-
- -
The oldest record number for the group.
-
- -
The newest record number for the group.
-
- {html_radios id="active" name='active' values=$yesno_ids output=$yesno_names selected=$group.active separator='
'} -
Inactive groups will not have headers downloaded for them.
-
- {html_radios id="backfill" name='backfill' values=$yesno_ids output=$yesno_names selected=$group.backfill separator='
'} -
If set to false, backfill.php will ignore this group. This works even if the above setting is no.
-
- -
-
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/group-list.tpl b/www/templates/nntmux/views/admin/group-list.tpl deleted file mode 100644 index fe9ea07a2..000000000 --- a/www/templates/nntmux/views/admin/group-list.tpl +++ /dev/null @@ -1,84 +0,0 @@ -
-

{$page->title}

-

- Below is a list of all usenet groups available to be indexed. Click 'Activate' to start indexing a group. Backfill works independently of active. -

- {if $grouplist} -
-
- - -    - -
-
- {$pager} -
-
- Reset all | - Purge all
- Active Groups | - Inactive Groups | - All Groups -
-
-
msg
- - - - - - - - - - - - - - - {foreach from=$grouplist item=group} - - - - - - - - - - - - - - {/foreach} -
groupFirst PostLast Postlast updatedactivebackfillreleasesMin FilesMin SizeBackfill Daysoptions
- {$group.name|replace:"alt.binaries":"a.b"} -
{$group.description}
-
{$group.first_record_postdate}
{$group.first_record_postdate|timeago}
{$group.last_record_postdate}
{$group.last_record_postdate|timeago}
{$group.last_updated|timeago} ago{if $group.active=="1"}Deactivate{else}Activate{/if}{if $group.backfill=="1"}Deactivate{else}Activate{/if}{$group.num_releases}{if $group.minfilestoformrelease==""}n/a{else}{$group.minfilestoformrelease}{/if}{if $group.minsizetoformrelease==""}n/a{else}{$group.minsizetoformrelease|fsize_format:"MB"}{/if}{$group.backfill_target} - Reset | - Delete | - Purge -
-
-
- {$pager} -
-
-
- - -    - -
- Reset all | - Purge all
- Active Groups | - Inactive Groups | - All Groups -
-
- {else} -

No groups available (eg. none have been added).

- {/if} -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/index.tpl b/www/templates/nntmux/views/admin/index.tpl deleted file mode 100644 index 7ecb75819..000000000 --- a/www/templates/nntmux/views/admin/index.tpl +++ /dev/null @@ -1,53 +0,0 @@ - -

{$page->title}

- -
-

- Welcome to newznab. In this area you will be able to configure many aspects of your site.
- If this is your first time here, you need to start the scripts that will fill newznab. -

- -
    -
  1. Configure your site options. The defaults will work fine.
  2. -
  3. There is a default list of usenet groups provided. To get started, you will need to activate some groups. Do not activate every group if its your first time setting this up. Try one or two first. - You can also add your own groups manually.
  4. -
  5. Next you will want to get the latest headers. This should be done from the command line, using the linux or windows shell scripts found in /misc/update_scripts/nix_scripts (or win_scripts for windows users), as it can take some time. If this is your first time dont bother with the init scripts just open a command prompt... -
    cd /var/www/newznab/misc/update_scripts
    php update_binaries.php
    -
  6. -
  7. After obtaining headers, the next step is to create releases. This is best done from the command line using the linux or windows shell scripts found in /misc/update_scripts/nix_scripts (or win_scripts for windows users). If this is your first time dont bother with the init scripts just open a command prompt... -
    cd /var/www/newznab/misc/update_scripts
    php update_releases.php
    -
  8. -
  9. If you intend to keep using newznab, it is best to sign up for your own api keys from tmdb, rotten tomatoes and amazon.
  10. -
  11. If you like newznab and intend to continue using it, please consider sending a donation to the team who write and maintain it.
  12. -
- - hide this welcome message -
- -
- -

Status Alerts

- - {if $statusmsgs|@count > 0} - - - - - - - - {foreach from=$statusmsgs item=result name=result} - - - - - - {/foreach} -
#Item
{$smarty.foreach.result.iteration}{$result.msg}{if $result.url != ""}{/if}
- {else} -

There are currently no status alerts.

- {/if} - -
- show welcome message -
diff --git a/www/templates/nntmux/views/admin/menu-edit.tpl b/www/templates/nntmux/views/admin/menu-edit.tpl deleted file mode 100644 index 8c1a4faa4..000000000 --- a/www/templates/nntmux/views/admin/menu-edit.tpl +++ /dev/null @@ -1,70 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - - -
: - -
Use full http:// path for external URLs, otherwise use no prefix.
-
: - -
: - -
Smarty expression returning -1 if the menu item should be disabled.
-
: - {html_radios id="role" name='role' values=$role_ids output=$role_names selected=$menu.role separator='
'} -
: - -
: - {html_radios id="newwindow" name='newwindow' values=$yesno_ids output=$yesno_names selected=$menu.newwindow separator='
'} -
Whether the menu item should open in a new window.
-
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/menu-list.tpl b/www/templates/nntmux/views/admin/menu-list.tpl deleted file mode 100644 index 004bfc932..000000000 --- a/www/templates/nntmux/views/admin/menu-list.tpl +++ /dev/null @@ -1,32 +0,0 @@ -

{$page->title}

- -{if $menulist} - - - - - - - - - - - - - - {foreach from=$menulist item=menu} - - - - - - - - - - {/foreach} - -
namehreftooltiproleordinalnew windowoptions
{$menu.title|escape:"htmlall"}{$menu.href}{$menu.tooltip}{if $menu.role == 0}Guests{elseif $menu.role == 1}Users{elseif $menu.role == 2}Admin{else}Other{/if}{$menu.ordinal}{if $menu.newwindow == 1}Yes{else}No{/if}delete
-{else} -

No menus available.

-{/if} diff --git a/www/templates/nntmux/views/admin/movie-add.tpl b/www/templates/nntmux/views/admin/movie-add.tpl deleted file mode 100644 index f7e0b9537..000000000 --- a/www/templates/nntmux/views/admin/movie-add.tpl +++ /dev/null @@ -1,30 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - -
Enter the full 7 digit IMDB id into the box below and click Add.
: - -
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/movie-edit.tpl b/www/templates/nntmux/views/admin/movie-edit.tpl deleted file mode 100644 index 526f9b5a5..000000000 --- a/www/templates/nntmux/views/admin/movie-edit.tpl +++ /dev/null @@ -1,112 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
:{$movie.imdbid}
:{$movie.tmdbID}
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - - {if $movie.cover == 1} - - {/if} -
: - - {if $movie.backdrop == 1} - - {/if} -
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/movie-list.tpl b/www/templates/nntmux/views/admin/movie-list.tpl deleted file mode 100644 index dd02a1528..000000000 --- a/www/templates/nntmux/views/admin/movie-list.tpl +++ /dev/null @@ -1,51 +0,0 @@ -

{$page->title}

- -{if $movielist} - -
- -
- - -    - -
-
- -{$pager} - -

- - - - - - - - - - - - - - {foreach from=$movielist item=movie} - - - - - - - - - - {/foreach} - -
IMDB idTMDb idTitleCoverBackdropCreatedoptions
{$movie.imdbid}{$movie.tmdbID}{$movie.title} ({$movie.year}){if $movie.cover == "1"}Yes{else}No{/if}{if $movie.backdrop == "1"}Yes{else}No{/if}{$movie.createddate|date_format} - update | - delete -
-
- {$pager} -{else} -

No Movies available.

-{/if} diff --git a/www/templates/nntmux/views/admin/music-edit.tpl b/www/templates/nntmux/views/admin/music-edit.tpl deleted file mode 100644 index 985c0fc8b..000000000 --- a/www/templates/nntmux/views/admin/music-edit.tpl +++ /dev/null @@ -1,104 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
Tracks separated by | (pipe) delimeter
-
: - - {if $music.cover == 1} - - {/if} -
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/music-list.tpl b/www/templates/nntmux/views/admin/music-list.tpl deleted file mode 100644 index 1d80c484a..000000000 --- a/www/templates/nntmux/views/admin/music-list.tpl +++ /dev/null @@ -1,30 +0,0 @@ -

{$page->title}

- -{if $musiclist} -{$pager} - - - - - - - - - - - {foreach from=$musiclist item=music} - - - - - - - {/foreach} - -
idTitleArtistCreated
{$music.id}{$music.title} ({$music.year}){$music.artist}{$music.createddate|date_format}
- -
-{$pager} -{else} -

No Music available.

-{/if} diff --git a/www/templates/nntmux/views/admin/nzb-export.tpl b/www/templates/nntmux/views/admin/nzb-export.tpl deleted file mode 100644 index 97e2a90aa..000000000 --- a/www/templates/nntmux/views/admin/nzb-export.tpl +++ /dev/null @@ -1,66 +0,0 @@ - -

{$page->title}

- -

-Export nzbs from the system into a folder. Specify the full file path to a folder. -
-If you are exporting a large number of nzb files, run this script from the command line and pass in the folder path as the first argument. e.g. php scriptname outputpath from(optional) to(optional) groupid(optional use -1) categoryid(optional)
- - php admin/nzb-export.php /path/to/export/into 01/01/2008 01/01/2010 -1 1050 - - -

- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
Windows file paths should be specified with forward slashes e.g. c:/temp/
-
: - - - -
Posted to usenet inbetween a date range specified in the format dd/mm/yyyy
-
: - {html_options id="group" name='group' options=$grouplist selected=$group} -
Posted to this newsgroup
-
: - {html_options id="categoryid" name='categoryid' options=$catlist selected=$cat} -
Posted to this category
-
- -
- -
- -
-{$output} -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/nzb-import.tpl b/www/templates/nntmux/views/admin/nzb-import.tpl deleted file mode 100644 index e15c29352..000000000 --- a/www/templates/nntmux/views/admin/nzb-import.tpl +++ /dev/null @@ -1,74 +0,0 @@ -

{$page->title}

-

- Import NZB's from a folder or via the browser into the system. Specify the full file path to a folder containing NZB's. -
- Importing will add the release to your database, compress the NZB and store it in the nzbfiles/ folder. -

- -
- Import From Directory -
- - - - - - - - - - - - - - - - - -
- -
Windows file paths should be specified with forward slashes e.g. c:/temp/
-
- -
Use the NZB's filename as the release name. Else the name inside the NZB will be used.
-
- -
Delete the NZB when we have successfully imported it?
-
- -
-
-
-
- Import From Browser -
- - - - - - - - - -
- -
Select one or more .nzb files.
-
- These NZBs will not be deleted once imported.
- -
-
-{if $output != ""} -
- -

Import Results

- {$output} -
-{/if} \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/preview-list.tpl b/www/templates/nntmux/views/admin/preview-list.tpl deleted file mode 100644 index bf1233800..000000000 --- a/www/templates/nntmux/views/admin/preview-list.tpl +++ /dev/null @@ -1,43 +0,0 @@ -

{$page->title}

- - - -

- -{if $releaselist} -{$pager} - - - - - - - - - {foreach from=$releaselist item=release} - - - - - {/foreach} - -
previewoptions
- -
- {$release.searchname|escape:"htmlall"|wordwrap:75:"\n":true} -
-
- {$pager} -{else} -

No results.

-{/if} diff --git a/www/templates/nntmux/views/admin/rage-edit.tpl b/www/templates/nntmux/views/admin/rage-edit.tpl deleted file mode 100644 index bfc1a009e..000000000 --- a/www/templates/nntmux/views/admin/rage-edit.tpl +++ /dev/null @@ -1,87 +0,0 @@ - -

{$page->title}

- -Update from TV Rage - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - - -
The numeric TVRage Id.
-
: - -
The title of the TV show.
-
: - -
: - -
The genres for the TV show. Separated by pipes ( | )
-
: - -
The country for the TV show.
-
: - {if $rage.imgdata != ""} - - {/if} - -
Shown in the TV series view page.
-
- -   - -
- - - - \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/rage-list.tpl b/www/templates/nntmux/views/admin/rage-list.tpl deleted file mode 100644 index 1fd3031bc..000000000 --- a/www/templates/nntmux/views/admin/rage-list.tpl +++ /dev/null @@ -1,44 +0,0 @@ -

{$page->title}

- -{if $tvragelist} - -
- -
- - -    - -
-
- -{$pager} - -

- - - - - - - - - - - {foreach from=$tvragelist item=tvrage} - - - - - - - {/foreach} - -
rageidtitledateoptions
{$tvrage.rageid}{$tvrage.releasetitle|escape:"htmlall"}{$tvrage.createddate|date_format}delete | remove
- -
- {$pager} - -{else} -

No TVRage episodes available.

-{/if} diff --git a/www/templates/nntmux/views/admin/rage-remove.tpl b/www/templates/nntmux/views/admin/rage-remove.tpl deleted file mode 100644 index 9f31ea123..000000000 --- a/www/templates/nntmux/views/admin/rage-remove.tpl +++ /dev/null @@ -1,4 +0,0 @@ - -

{$page->title}

- -Removed rageid from {$numtv} releases. \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/regex-edit.tpl b/www/templates/nntmux/views/admin/regex-edit.tpl deleted file mode 100644 index b7f16e775..000000000 --- a/www/templates/nntmux/views/admin/regex-edit.tpl +++ /dev/null @@ -1,78 +0,0 @@ - -

{$page->title}

- -{if $regex.id > 0 && $regex.id < 100000 && $site->reqidurl != ""} -
Warning: Editing system regex, these changes will be overwritten next update releases.
-{/if} - -{if $error != ''} -
{$error}
-{/if} - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Group: - - -
The full name of a valid newsgroup. This value can be a regular expression. Use .* to apply regex to all newsgroups.
-
Regex: - -
The regex to be applied.
- Regex requires at least 1 named capturing group in the form of (?P<name>) to work.
- If the subjects contains the number of parts (ie [1/10]) then it is wise to also use (?P<parts>) to match the parts. -
-
Description: - -
A description for this regex
-
: - {html_options id="category" name=category options=$catlist selected=$regex.categoryid} -
If this regex indicates the release category then supply it here. If left blank the standard method of determining the category will apply.
-
Ordinal: - -
The zero-based order in which the regex should be applied.
-
: - {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$regex.status separator='
'} -
Only active regexes are applied during the release process.
-
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/regex-list.tpl b/www/templates/nntmux/views/admin/regex-list.tpl deleted file mode 100644 index 63a2f3e6c..000000000 --- a/www/templates/nntmux/views/admin/regex-list.tpl +++ /dev/null @@ -1,51 +0,0 @@ - -

{$page->title}

- -

- Regexs are applied to group message subjects into releases. The capture groups are named to hold the release name and number of parts. - They are applied to messages from that group in order, then any general regexs are applied in order afterwards. -

-

- The group name is a regular expression, so if you want to apply a regex to a number of groups then append an asterix a.b.blah.* to the end, -
or use a.b.group1|a.b.group2 -

- -
msg
- -{html_options id="regexGroupSelect" name=category options=$reggrouplist selected=$selectedgroup} - - - - - - - - - - - - - - - - - - {foreach from=$regexlist item=regex} - - - - - - - - - - - - - - {/foreach} - - -
idgroupregexpostercategorystatusreleaseslast matchordinalOrderOptions
{$regex.id}{if $regex.groupname==""}all{else}{$regex.groupname|replace:"alt.binaries":"a.b"}{/if}{$regex.regex|escape:html}
- {$regex.description}
{$regex.poster}{if $regex.categoryid!=""}{$regex.categoryTitle}{/if}{if $regex.status==1}active{else}disabled{/if}{$regex.num_releases}{$regex.max_releasedate}{$regex.ordinal}up | downdelete{if $regex.groupname != ""} | test{/if}
diff --git a/www/templates/nntmux/views/admin/regex-submit.tpl b/www/templates/nntmux/views/admin/regex-submit.tpl deleted file mode 100644 index 76e6b8c53..000000000 --- a/www/templates/nntmux/views/admin/regex-submit.tpl +++ /dev/null @@ -1,38 +0,0 @@ - -

{$page->title}

- -

Use this feature to submit any regex you have added locally to newznab. We'll have a look at integrating them into the master list. No data other than regex's with an id greater than 10000 will be sent.

- -{if $upload_status eq 'OK'} -
- Your regexes were uploaded. Thank you for contributing. -
-
-{/if} - -{if $upload_status eq 'BAD'} -
- Failed to upload your regexes :-( - please try again. -
-
-{/if} - -{if $regex_error} -

No avalible user regex's. Please add some and visit this page again.

-{else} -
- - -
- -
- -

- Regexes to be submitted: -
-

-  {$regex_contents|print_r}
-  
-

-{/if} - diff --git a/www/templates/nntmux/views/admin/regex-test.tpl b/www/templates/nntmux/views/admin/regex-test.tpl deleted file mode 100644 index 63e58ac77..000000000 --- a/www/templates/nntmux/views/admin/regex-test.tpl +++ /dev/null @@ -1,146 +0,0 @@ - -

{$page->title}

- -{if $error != ''} -
{$error}
-{/if} - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - - or - -
: - -
: - -
- -
- -
-      Add Regex -
- -
- -{if $matches} -{$pager} - - {foreach from=$matches item=match} - - {if $match@iteration mod 10 == 1} - - - - - - - - - - - {/if} - - - - - {/foreach} - -
nameposterBin CountBin SizeRegex idReq idGroupAge
- - - - - - - - - - - - - - -
{$match.name|escape:html}
{$match.bininfo[0].name|escape:html}
{$match.catname|escape:"htmlall"}{$match.bininfo[0].fromname|escape:"htmlall"}{$match.bincount}{if $match.reltotalparts != ''}/{$match.reltotalparts}{/if}{$match.totalsize|fsize_format:"MB"}{$match.bininfo[0].regexid}{$match.reqid}{$match.bininfo[0].groupname|replace:"alt.binaries":"a.b"}{$match.bininfo[0].date|timeago}
-
-
{$pager} -{/if} - -

 

- -

Fetch Binaries for Testing

- -
- - - - - - - - - - - - - - - - - - - - - - - -
: - - or - -
- -
- -
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/release-edit.tpl b/www/templates/nntmux/views/admin/release-edit.tpl deleted file mode 100644 index 6f4f32260..000000000 --- a/www/templates/nntmux/views/admin/release-edit.tpl +++ /dev/null @@ -1,162 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - -{if $updatename != ""} - - - - -{/if} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - - -
: - -
- -
: - -
: - {html_options id="category" name=category options=$catlist selected=$release.categoryid} -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
Group: - {$release.group_name} -
Regex id: - {$release.regexid} -
: - -
: - -
: - -
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/release-files.tpl b/www/templates/nntmux/views/admin/release-files.tpl deleted file mode 100644 index 28a332b42..000000000 --- a/www/templates/nntmux/views/admin/release-files.tpl +++ /dev/null @@ -1,24 +0,0 @@ - -

{$page->title}

- -

For {$rel.searchname|escape:'htmlall'}

- - - - - - - - - - - {foreach from=$binaries item=binary} - - - - - - - {/foreach} - -
#filenamesizedate
{$binary.relpart}{$binary.filename}{$binary.size|fsize_format:"MB"}{$binary.date|date_format}
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/release-list.tpl b/www/templates/nntmux/views/admin/release-list.tpl deleted file mode 100644 index 326cf67c5..000000000 --- a/www/templates/nntmux/views/admin/release-list.tpl +++ /dev/null @@ -1,37 +0,0 @@ -

{$page->title}

- -{if $releaselist} -{$pager} - - - - - - - - - - - - - - - {foreach from=$releaselist item=release} - - - - - - - - - - - {/foreach} - -
namecategorysizefilespostdateadddategrabsoptions
{$release.searchname|escape:"htmlall"|wordwrap:75:"\n":true}{$release.category_name}{$release.size|fsize_format:"MB"}{$release.totalpart}{$release.postdate|date_format}{$release.adddate|date_format}{$release.grabs}delete
-
- {$pager} -{else} -

No releases available.

-{/if} diff --git a/www/templates/nntmux/views/admin/release_naming_regexes-edit.tpl b/www/templates/nntmux/views/admin/release_naming_regexes-edit.tpl deleted file mode 100644 index b07883983..000000000 --- a/www/templates/nntmux/views/admin/release_naming_regexes-edit.tpl +++ /dev/null @@ -1,71 +0,0 @@ -

{$page->title}

-{if $error != ''} -
{$error}
-{/if} -
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- Regex to match against a group or multiple groups.
- Delimiters are already added, and PCRE_CASELESS is added after for case insensitivity.
> - An example of matching a single group: alt\.binaries\.example
- An example of matching multiple groups: alt\.binaries.* -
-
- -
- The regex to use when trying to name a release using the usenet subject.
- The regex delimiters are not added, you MUST add them. See this page.
- To make the regex case insensitive, add i after the last delimiter.
- You MUST include at least one regex capture group.
- You MUST name your regex capture groups (the ones you want included).
- The named capture groups will be concatenated into a string.
- Capture groups are sorted alphabetically (by capture group name) when concatenating the string.
- Capture groups named 'reqid' and 'parts' are ignored. -
-
- -
- Description for this regex.
- You can include an example usenet subject this regex would match on. -
-
- -
- The order to run this regex in.
- Must be a number, 0 or higher.
- If multiple regex have the same ordinal, MySQL will randomly sort them. -
-
- {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$regex.status separator='
'} -
Only active regex are used during the collection matching process.
-
- -
-
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/release_naming_regexes-list.tpl b/www/templates/nntmux/views/admin/release_naming_regexes-list.tpl deleted file mode 100644 index bb68e3da1..000000000 --- a/www/templates/nntmux/views/admin/release_naming_regexes-list.tpl +++ /dev/null @@ -1,43 +0,0 @@ -

{$page->title}

-

This page lists regex used for getting names for releases from usenet subjects.

-
- -
- - -    - -
-{if $regex} - -
{$pager}
- - - - - - - - - - - - {foreach from=$regex item=row} - - - - - - - - {if $row.status==1} - - {else} - - {/if} - - - {/foreach} -
idgroupeditdescriptiondeleteordinalstatusregex
{$row.id}{$row.group_regex}Edit{$row.description|truncate:50:"...":true}Delete{$row.ordinal}ActiveDisabled{$row.regex|escape:html|truncate:50:"...":true}
-
{$pager}
-{/if} \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/release_naming_regexes-test.tpl b/www/templates/nntmux/views/admin/release_naming_regexes-test.tpl deleted file mode 100644 index 6587ae2b5..000000000 --- a/www/templates/nntmux/views/admin/release_naming_regexes-test.tpl +++ /dev/null @@ -1,35 +0,0 @@ -

{$page->title}

-

This page is used for testing regex for getting release names from usenet subject. -
Maximum releases to display will limit the amount of results displayed on the page. 0 for no limit. -
Query limit will limit the amount of releases to select from MySQL (setting this high can be very slow). 0 for no limit. -

- -
- -
- -
- -
- -
- -
-{if $data} - - - - - - - - {foreach from=$data key=id item=names} - - - - - - - {/foreach} -
Release idUsenet SubjectOld Search NameNew Search Name
{$id}{$names.subject}{$names.old_name}{$names.new_name}
-{/if} \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/role-edit.tpl b/www/templates/nntmux/views/admin/role-edit.tpl deleted file mode 100644 index c0ed1e6cb..000000000 --- a/www/templates/nntmux/views/admin/role-edit.tpl +++ /dev/null @@ -1,92 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{if $role.id != ''} - - - - - - - - - - -{/if} - - - - - - -
Name: - - {if $role.id != '' && $role.id < 4}{$role.name}{else}
The name of the role
{/if} -
Api Requests: - -
Number of api requests allowed per 24 hour period
-
Download Requests: - -
Number of downloads allowed per 24 hour period
-
Invites: - -
Default number of invites to give users on account creation
-
Can Preview: - {html_radios id="canpreview" name='canpreview' values=$yesno_ids output=$yesno_names selected=$role.canpreview separator='
'} -
Whether the role can preview screenshots
-
Can Pre: - {html_radios id="canpre" name='canpre' values=$yesno_ids output=$yesno_names selected=$role.canpre separator='
'} -
Whether the role can view pre data
-
Hide Ads: - {html_radios id="hidetads" name='hidetads' values=$yesno_ids output=$yesno_names selected=$role.hideads separator='
'} -
Whether ad's are hidden
-
Is Default Role: - {html_radios id="role" name='isdefault' values=$yesno_ids output=$yesno_names selected=$role.isdefault separator='
'} -
Make this the default role for new users
-
Excluded Categories - {html_options style="height:105px;" multiple=multiple name="exccat[]" options=$catlist selected=$roleexccat} -
Use Ctrl and click to exclude multiple categories. This will prevent users with this role from
seeing these categories in the menu or search results.
-
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/role-list.tpl b/www/templates/nntmux/views/admin/role-list.tpl deleted file mode 100644 index bff3a392d..000000000 --- a/www/templates/nntmux/views/admin/role-list.tpl +++ /dev/null @@ -1,34 +0,0 @@ - -

{$page->title}

- - - - - - - - - - - - - - - - - {foreach from=$userroles item=role} - - - - - - - - - - - - {/foreach} - - -
namerequest limitdownload limitinvitescan previewcan prehide adsdefault rolesoptions
{$role.name}{$role.apirequests}{$role.downloadrequests}{$role.defaultinvites}{if $role.canpreview == 1}Yes{else}No{/if}{if $role.canpre == 1}Yes{else}No{/if}{if $role.hideads == 1}Yes{else}No{/if}{if $role.isdefault=="1"}Yes{else}No{/if}edit {if $role.id>"3"}delete{/if}
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/sharing.tpl b/www/templates/nntmux/views/admin/sharing.tpl deleted file mode 100644 index 20b30931d..000000000 --- a/www/templates/nntmux/views/admin/sharing.tpl +++ /dev/null @@ -1,197 +0,0 @@ -

{$page->title}

-
- - - Note: If you are running nntpproxy you will not be able to upload comments, turn off the post option if you are using it.
- If you turn on or off the Alternate NNTP provider you will need to click the reset button to reset sharing settings. -
-
-
-
msg
- {if $local} -
-
- Local sharing settings. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
This is your site name, changing this will update other sites running sharing also, it must not contain spaces (use underscores _).
-
- -
This is how many comments to upload per run (the more you increase this, the longer it takes).
-
- -
This is how many comments to download per run.
-
- -
This is how many headers to download and look through for comments per run.
-
-
- - {if $local.enabled == "1"} - - {else} - - {/if} - - Is the sharing/retrieving enabled? This overrides posting/fetching. -
-
-
- - {if $local.posting == "1"} - - {else} - - {/if} - - If you turn this on, this will post your comments to usenet.
- This requires posting rights to usenet! -
-
-
- - {if $local.fetching == "1"} - - {else} - - {/if} - - If you turn this on, this will download comments from usenet. -
-
-
- - {if $local.auto_enable == "1"} - - {else} - - {/if} - - This will auto-enable new sites as we see them. -
-
-
- - {if $local.hide_users == "1"} - - {else} - - {/if} - - This will hide user names from being visible on remote sites. -
-
-
- - {if $local.start_position == "1"} - - {else} - - {/if} - - When pulling the first time, or after resetting, start from the beginning of the group (takes more time).
- With the backfill setting it will take a few runs before you find anything the first time because the group has articles other than comments in it. -
-
-
- - - - This will reset your sharing settings (if you need to change Usenet Provider for example). -
-
-
- -
-
- {else} -

You have not run Sharing yet, until you run it this page will contain no settings.

- {/if} - - {if $sites} -
These are the remote websites we have seen so far:
- {$pager} -
- - -
- - - - - - - - - - - {foreach from=$sites item=site} - - - - - - - - - - {/foreach} -
idNameFirst seenLast seenStatusComments
{$site.id}{$site.site_name}{$site.first_time|timeago}{$site.last_time|timeago} - {if $site.enabled=="1"} - - {else} - - {/if} - {$site.comments} - -
- {$pager} - {else} -

No remote sites found in your database.

- {/if} -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/site-debug.tpl b/www/templates/nntmux/views/admin/site-debug.tpl deleted file mode 100644 index a1cd54fa7..000000000 --- a/www/templates/nntmux/views/admin/site-debug.tpl +++ /dev/null @@ -1,20 +0,0 @@ -

{$page->title}

- -

Below is a dump of system settings and mysql table status to assist others in debuging problems. -Items like private 3rd party keys have been removed, however *note* full paths to binaries and web files -are included - so exercise caution when pasting online.

- - - -
- diff --git a/www/templates/nntmux/views/admin/site-edit.tpl b/www/templates/nntmux/views/admin/site-edit.tpl deleted file mode 100644 index 3aa76205a..000000000 --- a/www/templates/nntmux/views/admin/site-edit.tpl +++ /dev/null @@ -1,1695 +0,0 @@ -

{$page->title}

- -
- -{if $error != ''} -
{$error}
-{/if} - -
-Main Site Settings, HTML Layout, Tags - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
Displayed around the site and contact form as the name for the site.
-
: - -
Displayed in the header on every public page.
-
: - -
Stem meta-tag appended to all page title tags.
-
: - -
Stem meta-description appended to all page meta description tags.
-
: - -
Stem meta-keywords appended to all page meta keyword tags.
-
: - -
Displayed in the footer section of every public page.
-
: - -
The relative path to a the landing page shown when a user logs in, or clicks the home link.
-
: - - -
A just for fun value shown in debug and not on public pages.
-
- -
The absolute path to the place covers will be stored.
-
: - {html_options class="siteeditstyle" id="style" name='style' values=$themelist output=$themelist selected=$fsite->style} -
The theme folder which will be loaded for css and images and overriden templates.
-
: - {html_radios id="userselstyle" name='userselstyle' values=$yesno_ids output=$yesno_names selected=$fsite->userselstyle separator='
'} -
Should users be allowed to change their site theme or not..
-
: - -
Optional URL to prepend to external links
-
: - {html_radios id="apienabled" name='apienabled' values=$yesno_ids output=$yesno_names selected=$fsite->apienabled separator='
'} -
Whether access to the site via the API is enabled.
-
: - -
The number of recent forum posts to show in the 'recent forum posts' widget. Set to 0 to disable.
-
: - -
Shown in the contact us page, and where the contact html form is sent to.
-
: - -
Text displayed in the terms and conditions page.
-
-
- -
-Google Adsense, Analytics and 3rd Party Banners - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
e.g. UA-xxxxxx-x
-
: - -
e.g. pub-123123123123123
-
: - -
The id of the google search ad panel displayed at the bottom of the left menu.
-
: - -
The banner slot in the header.
-
: - -
The banner slot in the header.
-
: - -
The banner slot in the release details view.
-
-
- - -
-3rd Party API Keys - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
The api key used for access to tmdb
-
: - -
The api key used for access to rotten tomatoes
-
: - -
The amazon public api key. Used for cover lookups.
-
: - -
The amazon private api key. Used for cover lookups.
-
: - -
The amazon associate tag. Used for cover lookups.
-
- -
The Trakt.tv API v2 Client ID (SHA256 hash - 64 characters long string). Used for movie and tv lookups.
-
- - -
The Fanart.tv api key. Used for Fanart.tv lookups. Fanart.tv would appreciate it if - you use this service to help them out by adding high quality images not already available on TMDB. -
-
- - -
The giantbomb key. Used for game lookups.
-
- - -
The Anidb api key. Used for Anime lookups.
-
-
- -
-3rd Party Application Paths - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
The path to an unrar binary, used in deep password detection and media info grabbing. -
Use forward slashes in windows c:/path/to/unrar.exe
-
: - -
The path to where unrar puts files. WARNING: This directory will have its contents deleted. -
Use forward slashes in windows c:/temp/path/stuff/will/be/unpacked/to
-
: - -
The path to the mediainfo binary. Used for deep file media analysis. Use empty path to disable mediainfo checks -
Use forward slashes in windows c:/path/to/mediainfo.exe
-
- -
The path to the ffmpeg or avconv binary. Used for making thumbnails and video/audio - previews. -
Use forward slashes in windows c:/path/to/ffmpeg.exe -
-
: - -
The path to the lame binary. Used for audio manipulation. -
Use forward slashes in windows c:/path/to/lame.exe
-
- - -
The path to the 7za/p7zip in Ubuntu 13.10 (7zip command line in windows) binary, used - for grabbing nfos from compressed zip files. -
Use forward slashes in windows c:/path/to/7z.exe -
-
- -
The path to the timeout binary. - This is used to limit the amount of time unrar/7zip/mediainfo/ffmpeg/avconv can run. - You can the time limit in the process additional section. - You can leave this empty to disable this. -
Use forward slashes in windows c:/path/to/timeout.exe -
-
- -
Path to magic number database. Windows' users should set this if they have installed GNUWin file. *nix users can optionally set this to a file of their choice.
-
-
- - -
- Download Queue Integration Settings - - - - - - - - - - - - - - - - -
: - {html_radios id="sabintegrationtype" name='sabintegrationtype' values=$sabintegrationtype_ids output=$sabintegrationtype_names selected=$fsite->sabintegrationtype separator='
'} -
Whether to allow integration with a SAB/NZBGet install and if so what type of integration
-
: - -
The downloads/complete folder for a local sab install, for example: /var/www/sab/downloads/complete
-
: - -
A url to a hosted virtual directory pointing to the sab downloads/complete folder, e.g. http://server/complete
-
- -
- SABnzbd - - - - - - - - - - - - - - - - - - - - - - -
: - -
The url of the SAB installation, for example: http://localhost:8080/sabnzbd/
-
: - -
The Api key of the SAB installation. Can be the full api key or the nzb api key (as of SAB 0.6)
-
: - {html_radios id="sabapikeytype" name='sabapikeytype' values=$sabapikeytype_ids output=$sabapikeytype_names selected=$fsite->sabapikeytype separator='
'} -
Select the type of api key you entered in the above setting
-
: - {html_options id="sabpriority" name='sabpriority' values=$sabpriority_ids output=$sabpriority_names selected=$fsite->sabpriority} -
Set the priority level for NZBs that are added to your queue
-
-
- - -
- NZBGet - - - - - - - - - - - - - - - - - -
: - -
The url of the NZBGet installation, for example: http://localhost:6789/
-
: - -
The NZBGet ControlUsername e.g. nzbget
-
: - -
The NZBGet ControlPassword e.g. tegbzn6789
-
-
- -
- - -
-Usenet Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
The directory where nzb files will be stored.
-
- -
Levels deep to store the nzb Files. -
If you change this you must run the misc/testing/DB/nzb-reorg.php script! -
-
: - -
The number of days binary and part data will be retained for use in raw search and release formation.
-
: - -
The number of days releases will be retained for use throughout site. Set to 0 to disable.
-
- -
The number of hours releases categorized as Misc->Other will be retained. Set to 0 to disable.
-
- -
The number of hours releases categorized as Misc->Hashed will be retained. Set to 0 to disable.
-
: - -
Default is 0 (off), which will remove parts in one go. If backfilling or importing and parts table is large, using chunks of 5000+ will speed up removal. Normal indexing is fastest with this setting at 0.
-
: - -
The minimum number of files to make a release. i.e. if set to two, then releases which only contain one file will not be created.
-
: - -
The minimum total size in bytes to make a release. If set to 0, then ignored.
-
- -
The maximum total size in bytes to make a release. If set to 0, then ignored. Only deletes - during release creation. -
-
: - -
The minimum completion percent to make a release. i.e. if set to 97, then releases under 97% completion will not be created. If set to 0, then ignored.
-
- {html_radios id="grabstatus" name='grabstatus' values=$yesno_ids output=$yesno_names selected=$fsite->grabstatus separator='
'} -
Whether to update download counts when someone downloads a release.
-
- -
The time in hours to check for crossposted releases - this will delete 1 of the releases if the 2 are posted by the same person in the same time period.
-
: - {html_radios id="removespam" name='removespam' values=$yesno_ids output=$yesno_names selected=$fsite->removespam separator='
'} -
Find and remove spam after each update. An inexact science which uses a few methods to identify virus/spam posts.
-
: - -
Which categories to permit .exe files. Requires unrar inner file checking to be enabled.
-
: - {html_radios id="updateparsing" name='updateparsing' values=$yesno_ids output=$yesno_names selected=$fsite->updateparsing separator='
'} -
Update Parsing is a mechanism to decode names using various techniques.
-
: - {html_radios id="updatecleanup" name='updatecleanup' values=$yesno_ids output=$yesno_names selected=$fsite->updatecleanup separator='
'} -
Update Cleanup is a general mechanism for deleting and moving unwanted items into misc>other.
-
: - {html_radios id="removespecial" name='removespecial' values=$yesno_ids output=$yesno_names selected=$fsite->removespecial separator='
'} -
Remove Special is a general mechanism for removing erroneous characters from release names.
-
: - {html_radios id="compressedheaders" name='compressedheaders' values=$yesno_ids output=$yesno_names selected=$fsite->compressedheaders separator='
'} -
Some servers allow headers to be sent over in a compressed format. If enabled this will use much less bandwidth, but processing times may increase.
-
: - -
The maximum number of messages to fetch at a time from the server.
-
: - -
The maximum number of messages to process for a group in one run of update_binaries.
-
: - {html_radios id="newgroupscanmethod" name='newgroupscanmethod' values=$yesno_ids output=$newgroupscan_names selected=$fsite->newgroupscanmethod separator='
'} - Days or - Posts
-
Scan back X (posts/days) for each new group? Can backfill to scan further.
-
- - -
The target date for safe backfill. Format: YYYY-MM-DD
-
- {html_radios id="disablebackfillgroup" name='disablebackfillgroup' values=$yesno_ids output=$yesno_names selected=$fsite->disablebackfillgroup separator='
'} -
Whether to disable a group automatically during backfill if the target date has been reached.
-
-
- -
-Lookup Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
The url to use to translate allfilled style reqid usenet posts into real release titles. Leave blank to not perform lookup.
-
- {html_options style="width:180px;" id="lookuptvrage" name='lookuptvrage' values=$lookuptv_ids output=$lookuptv_names selected=$site->lookuptvrage} -
Whether to attempt to lookup TvRage ids on the web.
-
: - {html_radios id="lookupthetvdb" name='lookupthetvdb' values=$yesno_ids output=$yesno_names selected=$fsite->lookupthetvdb separator='
'} -
Whether to attempt to lookup addidional series information from TheTVDB when processing binaries.
-
- {html_options_multiple id="book_reqids" name='book_reqids' values=$book_reqids_ids output=$book_reqids_names selected=$book_reqids_selected} -
Categories of Books to lookup information for (only work if Lookup Books is set to yes).
-
- {html_options style="width:180px;" id="lookupimdb" name='lookupimdb' values=$lookupmovies_ids output=$lookupmovies_names selected=$fsite->lookupimdb} -
Whether to attempt to lookup film information from IMDB or TheMovieDB.
-
: - {html_radios id="lookupanidb" name='lookupanidb' values=$yesno_ids output=$yesno_names selected=$fsite->lookupanidb separator='
'} -
Whether to attempt to lookup anime information from AniDB when processing binaries.
-
- {html_options style="width:180px;" id="lookupmusic" name='lookupmusic' values=$lookupmusic_ids output=$lookupmusic_names selected=$fsite->lookupmusic} -
Whether to attempt to lookup music information from Amazon.
-
- {html_options style="width:180px;" id="lookupgames" name='lookupgames' values=$lookupgames_ids output=$lookupgames_names selected=$fsite->lookupgames} -
Whether to attempt to lookup game information from Amazon.
-
: - {html_radios id="lookupxxx" name='lookupxxx' values=$yesno_ids output=$yesno_names selected=$fsite->lookupxxx separator='
'} -
Whether to attempt to lookup XXX information when processing binaries.
-
- - -
The maximum amount of XXX to process per run. This does not use an NNTP - connection or query Amazon. -
-
- {html_options style="width:180px;" id="lookupbooks" name='lookupbooks' values=$lookupbooks_ids output=$lookupbooks_names selected=$fsite->lookupbooks} -
Whether to attempt to lookup book information from Amazon.
-
: - {html_options id="lookuplanguage" name='lookuplanguage' values=$lookuplanguage_iso output=$lookuplanguage_names selected=$fsite->lookuplanguage} -
Preferred language for scraping external sources.
-
: - {html_radios id="saveaudiopreview" name='saveaudiopreview' values=$yesno_ids output=$yesno_names selected=$fsite->saveaudiopreview separator='
'} -
Whether to save a preview of an audio release (requires deep rar inspection enabled).
It is advisable to specify a path to the lame binary to reduce the size of audio previews.
-
: - -
Delete any audio previews older than this number of days.
-
-
-
- Language/Categorization options - - - - - - - - - -
- {html_radios id="categorizeforeign" name='categorizeforeign' values=$yesno_ids output=$yesno_names selected=$fsite->categorizeforeign separator='
'} -
Whether to send foreign movies/tv to - foreign sections or not. If set to true they will go in foreign categories. -
-
- {html_radios id="catwebdl" name='catwebdl' values=$yesno_ids output=$yesno_names selected=$fsite->catwebdl separator='
'} -
Whether to send WEB-DL to the WEB-DL section or not. If set to true they will go in - WEB-DL category, false will send them in HD TV.
This will also make them inaccessible to - Sickbeard and possibly Couchpotato. -
-
-
- -
-Password Settings - - - - - - - - - - - - - - - - - - - - - - - -
: - {html_radios id="checkpasswordedrar" name='checkpasswordedrar' values=$passwd_ids output=$passwd_names selected=$fsite->checkpasswordedrar separator='
'} -
Whether to attempt to peek into every release, to see if rar files are password protected.
-
- {html_radios id="fetchlastcompressedfiles" name='fetchlastcompressedfiles' values=$yesno_ids output=$yesno_names selected=$fsite->fetchlastcompressedfiles separator='
'} -
Try to download the last rar or zip file? (This is good if most of the files are at the end.) Note: The first rar/zip is still downloaded. -
-
: - {html_radios id="deletepasswordedrelease" name='deletepasswordedrelease' values=$yesno_ids output=$yesno_names selected=$fsite->deletepasswordedrelease separator='
'} -
Whether to delete releases which are passworded or potentially passworded.
-
- {html_radios id="deletepossiblerelease" name='deletepossiblerelease' values=$yesno_ids output=$yesno_names selected=$fsite->deletepossiblerelease separator='
'} -
Whether to delete releases which are potentially passworded. This applies to your post process additional inner file blacklist.
-
: - {html_options id="showpasswordedrelease" name='showpasswordedrelease' values=$passworded_ids output=$passworded_names selected=$fsite->showpasswordedrelease} -
Whether to show passworded or potentially passworded releases in browse, search, api and rss - feeds. Potentially passworded means releases which contain .cab or .ace files which are - typically password protected. (*yes): Unprocessed releases are hidden. (*no): Unprocessed releases are displayed. -
-
-
- -
-nzpre Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
Group to search when looking up nzpre posts.
-
: - -
Subject line. eg. This is an nzpre post!
-
: - -
Full poster field. eg. tester test@test.com
-
: - -
Which header field to parse.
-
: - -
Number of articles to parse when updating.
-
: - -
Key to decode.
-
-
- -
-Spotnab Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - {html_radios id="spotnabpost" name='spotnabpost' values=$yesno_ids output=$yesno_names selected=$fsite->spotnabpost separator='
'} -
If enabled, encrypted comments from this site will be uploaded using the spotnab protocol. These will be shared with others participating Newznab sites. Set up Spotnab sources here or use Auto Discovery.
-
: - {html_radios id="spotnabbroadcast" name='spotnabbroadcast' values=$yesno_ids output=$yesno_names selected=$fsite->spotnabbroadcast separator='
'} -
If enabled, a broadcast packet will be uploaded every month, so that other participating Newznab sites can automatically subscribe to your comments.
-
: - {html_radios id="spotnabdiscover" name='spotnabdiscover' values=$yesno_ids output=$yesno_names selected=$fsite->spotnabdiscover separator='
'} -
If enabled, other participating Newznab sites will be added automatically (as inactive) to your sources list.
-
: - {html_radios id="spotnabprivacy" name='spotnabprivacy' values=$yesno_ids output=$yesno_names selected=$fsite->spotnabprivacy separator='
'} -
If enabled, uploaded comments use a unique (made up) username.
-
: - {html_radios id="spotnabautoenable" name='spotnabautoenable' values=$yesno_ids output=$yesno_names selected=$fsite->spotnabautoenable separator='
'} -
If enabled, newly discovered Spotnab sources will be enabled by default.
-
: - -
The username part used for posting. eg nntp
-
: - -
The email part used for posting. eg spot@nntp.com
-
: - -
The group where posts are uploaded. eg alt.binaries.backup
-
: - -
Public key other sites will use to decrypt comments.
-
- -
Private key used to encrypt comments before uploading.
-
-
- -
- IMDB.com URL - - - - - -
- {html_options style="width:180px;" class="imdburl" id="imdburl" name='imdburl' values=$imdb_urls output=$imdburl_names selected=$fsite->imdburl} -
Akas.imdb.com returns titles in their original title, imdb.com returns titles based on - your IP address (if you are in france, you will get french titles). -
-
-
- -
- Usenet Settings - - - - - - - - - - - - - - - - - - - - - - -
- - -
The maximum size in gigabytes to postprocess a release. If set to 0, then ignored. -
-
- -
The minimum size in megabytes to post process (additional) a release. If set to 0, then ignored.
-
- {html_radios id="lookuppar2" name='lookuppar2' values=$yesno_ids output=$yesno_names selected=$fsite->lookuppar2 separator='
'} -
Whether to attempt to find a better name for releases in misc->other using the PAR2 - file.
NOTE: this can be slow depending on the group!
-
- {html_radios id="addpar2" name='addpar2' values=$yesno_ids output=$yesno_names selected=$fsite->addpar2 separator='
'} -
When going through PAR2 files, add them to the RAR file content list of the NZB.
-
-
- -
- Advanced Settings - For advanced users - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_radios id="tablepergroup" name='tablepergroup' values=$yesno_ids output=$yesno_names selected=$fsite->tablepergroup separator='
'} -
This uses separate tables for binaries and parts for each group.
This - requires you to run convert_to_tpg.php or reset_truncate.php.
This requires that you also run - .../misc/update/nix/multiprocessing/releases.php (tmux does this automatically). -
Run: show variables like '%open%files%'; results should be higher than 10k, twice that if you - are using TokuDB.; -
You may need to increase table_open_cache, open_files_limit and max_allowed_packet in - my.cnf. Also, you may need to add the following to /etc/security/limits.conf
mysql soft - nofile 24000
mysql hard nofile 32000
-
-
- -
The maximum amount of NZB files to create on stage 5 at a time in update_releases. If more are to be created it will loop stage 5 until none remain.
-
- {html_radios id="partrepair" name='partrepair' values=$yesno_ids output=$yesno_names selected=$fsite->partrepair separator='
'} -
Whether to attempt to repair parts or not, increases backfill/binaries updating - time. -
-
- {html_radios id="safepartrepair" name='safepartrepair' values=$yesno_ids output=$yesno_names selected=$fsite->safepartrepair separator='
'} -
Whether to put unreceived parts into partrepair table when running binaries(safe) or backfill scripts.
-
- -
The maximum amount of articles to attempt to repair at a time. If you notice that you - are getting a lot of parts into the partrepair table, it is possible that you USP is not keeping up - with the requests. Try to reduce the threads to safe scripts, stop using safe scripts or stop using - nntpproxy until improves. Ar least until the cause can be determined. -
-
- -
Maximum amount of times to try part repair.
-
- - -
- Leaving this empty will use PHP to decode yEnc, which is slow. -
Putting the path to yydecode will use yydecode, which is faster than PHP. Download yydecode - on sourceforce. -
Putting in simple_php_yenc_decode will use that - extension which is even faster (you must have the extension). View - simple_php_yenc_decode on github. -
-
- {html_radios id="processjpg" name='processjpg' values=$yesno_ids output=$yesno_names selected=$fsite->processjpg separator='
'} -
Whether to attempt to retrieve a JPG file while additional post processing, these are - usually on XXX releases.
-
- {html_radios id="processthumbnails" name='processthumbnails' values=$yesno_ids output=$yesno_names selected=$fsite->processthumbnails separator='
'} -
Whether to attempt to process a video thumbnail image. You must have ffmpeg for this.
-
- {html_radios id="processvideos" name='processvideos' values=$yesno_ids output=$yesno_names selected=$fsite->processvideos separator='
'} -
Whether to attempt to process a video sample, these videos are very short 1-3 seconds, - 100KB on average, in ogg video format. You must have ffmpeg for this.
-
- - -
The maximum number of segments to download to generate the sample video file or jpg - sample image. (Default 2) -
-
- - -
The maximum duration (In Seconds) for ffmpeg to generate the sample for. (Default 5) -
-
- {html_radios id="extractusingrarinfo" name='extractusingrarinfo' values=$yesno_ids output=$yesno_names selected=$fsite->extractusingrarinfo separator='
'} -
Whether to use rarinfo or 7zip/unrar directly to decompress zip/rar files. -
Using rarinfo is faster, but the extracted files are not as large which leads to smaller video samples/ potentially black preview screenshots. -
-
- -
If a rar/zip has rar/zip inside of it, how many times should we go in those inner rar/zip files.
-
- -
You can add a regex here to set releases to potentially passworded when a file name inside a rar/zip matches this regex. -
You must ensure this regex is valid, a non valid regex will cause errors during processing! -
-
-
- -
- RequestID Settings - - - - - - - - - - - - - -
- {html_options style="width:180px;" id="lookup_reqids" name='lookup_reqids' values=$lookup_reqids_ids output=$lookup_reqids_names selected=$fsite->lookup_reqids} -
Whether to attempt to lookup Request IDs using the Request id link below. This will rename your releases to proper PreDB names.
-
- -
Optional URL to lookup Request IDs. [REQUEST_ID] gets replaced with the request id from the - post. [GROUP_NM] Gets replaced with the group name. -
-
- -
The maximum hours after a release is added to recheck for a Request id match.
-
-
- -
- Advanced - Postprocessing Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
How much time to wait for unrar/7zip/mediainfo/ffmpeg/avconv before killing it, set to 0 to disable. - 60 is a good value. Requires the GNU Timeout path to be set.
-
- - -
The maximum amount of releases to process for passwords/previews/mediainfo per run. - Every release gets processed here. This uses NNTP an connection, 1 per thread. This does not query - Amazon. -
-
- - -
If a part fails to download while post processing, this will retry up to the amount - you set, then give up. -
-
- - -
This overrides the above setting if set above 1. How many parts to check for a - password before giving up. This slows down post processing massively, better to leave it 1. -
-
- - -
The maximum amount of TV shows to process with TVRage per run. This does not use an - NNTP connection or query Amazon. -
-
- - -
The maximum amount of movies to process with IMDB per run. This does not use an NNTP - connection or query Amazon. -
-
- - -
The maximum amount of anime to process with anidb per run. This does not use an NNTP - connection or query Amazon. -
-
- - -
The maximum amount of music to process with amazon per run. This does not use an NNTP - connection. -
-
- - -
The maximum amount of games to process with amazon per run. This does not use an NNTP - connection. -
-
- - -
The maximum amount of books to process with amazon per run. This does not use an NNTP - connection -
-
- - -
The maximum number of releases to check per run(threaded script only).
-
- - -
Sleep time in milliseconds to wait in between amazon requests. If you thread - post-proc, multiply by the number of threads. ie Postprocessing Threads = 12, Amazon sleep time = - 12000
https://affiliate-program.amazon.com/gp/advertising/api/detail/faq.html -
-
-
- -
- NFO Processing Settings - - - - - - - - - - - - - - - - - - - - - -
- {html_radios id="lookupnfo" name='lookupnfo' values=$yesno_ids output=$yesno_names selected=$fsite->lookupnfo separator='
'} -
Whether to attempt to retrieve an nfo file from usenet.
- NOTE: disabling nfo lookups will disable movie lookups. -
-
- -
The maximum amount of NFO files to process per run. This uses NNTP an connection, 1 - per thread. This does not query Amazon. -
-
- -
The maximum size in gigabytes of a release to process it for NFOs. If set to 0, then ignored.
-
- -
The minimum size in megabytes of a release to process it for NFOs. If set to 0, then ignored.
-
- -
How many times to retry when a NFO fails to download. If set to 0, we will not retry. The max is 7.
-
-
- -
- Connection Settings - - - - - - - - - - - - - - - - - - - - -
- - -
The maximum number of retry attmpts to connect to nntp provider. On error, each retry - takes approximately 5 seconds nntp returns reply. (Default 10) -
-
- {html_radios id="nntpproxy" name='nntpproxy' values=$yesno_ids output=$yesno_names selected=$fsite->nntpproxy separator='
'} -
- nntpproxy does not support the POST usenet command which is required for uploading usenet comments when using sharing. - Using the NNTP Proxy for newznab can improve performance of newznab. It uses - connection pooling which not only give more control over the number of connections to use but also - reduces time for connection setup/teardown. The proxy also takes care of compressed headers for you. - To use this featrure you will need to install socketpool (sudo pip install socketpool or sudo easy_install socketpool) - (ensure python2 is default) and edit the configuration file (nntpproxy.conf and nntpproxy_a.conf) in the - update_scripts/nix_scripts/tmux/python/lib (copy sample) directory and finally edit your www/config.php file - to use the proxy (username and password are ignored by the proxy - make then anything you like - the - proxy doesn't use ssl either). Make sure you turn off the use compressed headers option here in site - preferences (the proxy uses compressed headers by default and passes on decompressed data). -
-
- {html_radios id="alternate_nntp" name='alternate_nntp' values=$yesno_ids output=$yesno_names selected=$fsite->alternate_nntp separator='
'} -
This sets Postproccessing Additional/Nfo to use the alternate NNTP provider as set in - config.php. -
-
- -
The time in hours to wait, since last activity, before releases without parts counts - in the subject are are created
Setting this below 2 hours could create incomplete releases.. -
-
-
-
- Developer Settings - - - - - -
- {html_radios id="showdroppedyencparts" name='showdroppedyencparts' values=$yesno_ids output=$yesno_names selected=$fsite->showdroppedyencparts separator='
'} -
For developers. Whether to log all headers that have 'yEnc' and are dropped. Logged to not_yenc/groupname.dropped.txt.
-
-
- -
- Advanced - Threaded Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
The number of threads for update_binaries. If you notice that you are getting a lot of - parts into the partrepair table, it is possible that you USP is not keeping up with the requests. - Try to reduce the threads. At least until the cause can be determined. -
-
- - -
The number of threads for backfill.
-
- - -
The number of threads for releases update scripts. -
-
- - -
The number of threads for import-nzb(bulk). This will thread each subfolder.
-
- - -
The number of threads for additional postprocessing. This includes deep rar - inspection, preview and sample creation and nfo processing. -
-
- -
The number of threads for nfo postprocessing. - The max is 16, if you set anything higher it will use 16. -
-
- -
The number of threads for local Request id processing. -
-
- - -
The number of threads for non-amazon postprocessing. This includes movies, anime and - tv lookups. -
-
- - -
The number of threads for fixReleasesNames. This includes md5, nfos, par2 and - filenames. -
-
-
- -
-User Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - {html_radios id="registerstatus" name='registerstatus' values=$registerstatus_ids output=$registerstatus_names selected=$fsite->registerstatus separator='
'} -
The status of registrations to the site.
-
: - {html_radios id="storeuserips" name='storeuserips' values=$yesno_ids output=$yesno_names selected=$fsite->storeuserips separator='
'} -
Whether to store the users ip address when they signup or login.
-
- {html_radios id="privateprofiles" name='privateprofiles' values=$yesno_ids output=$yesno_names selected=$fsite->privateprofiles separator='
'} -
Should we disallow users from accessing profiles other than their own? (regardless of this setting admin/mod can access).
-
: - -
The number of days to preserve user download history, for use when checking limits being hit. Set to zero will remove all records of what users download, but retain history of when, so that role based limits can still be applied.
-
: - -
A comma separated list of IP addresses which will be excluded from user limits on number of requests and downloads per IP address. Include values for google reader and other shared services which may be being used.
-
-
- -
-Recaptcha - - - - - - - - - - - - - - - - - - - -
: - -
The public key supplied by recaptcha.net. Sign up for recaptcha at https://www.google.com/recaptcha/admin/create
-
: - -
The private key supplied by recaptcha.net
-
: - {html_radios id="registerrecaptcha" name='registerrecaptcha' values=$yesno_ids output=$yesno_names selected=$fsite->registerrecaptcha separator='
'} -
Whether to display a ReCaptcha captcha for registering.
-
-
- - - -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/site-stats.tpl b/www/templates/nntmux/views/admin/site-stats.tpl deleted file mode 100644 index a66ea97df..000000000 --- a/www/templates/nntmux/views/admin/site-stats.tpl +++ /dev/null @@ -1,186 +0,0 @@ - -

{$page->title}

- -{if $topgrabs|count > 0} -

Top Grabbers

- - - - - - - - {foreach from=$topgrabs item=result} - - - - - {/foreach} - -
UserGrabs
{$result.username}{$result.grabs}
- -

-{/if} - -

Signups

- - - - - - - - {foreach from=$usersbymonth item=result} - {assign var="totusers" value=$totusers+$result.num} - - - - - {/foreach} - -
MonthSignups
{$result.mth}{$result.num}
Total{$totusers}
- -

- -

Users by Role

- - - - - - - - {foreach from=$usersbyrole item=result} - {assign var="totrusers" value=$totrusers+$result.num} - - - - - {/foreach} - -
RoleUsers
{$result.name}{$result.num}
Total{$totrusers}
- -

- -

Users by Hosthash

- - - - - - - - - {foreach from=$usersbyhosthash item=result} - - - - - - - {/foreach} -
HosthashUser IDs (Edit)User Names (Profiles)
{$result.hosthash} - {assign var="usersplits" value=","|explode:$result.user_string} - {foreach from=$usersplits item=usersplit} - {$usersplit} - {/foreach} - - {assign var="usernsplits" value=","|explode:$result.user_names} - {foreach from=$usernsplits item=usernsplit} - {$usernsplit} - {/foreach} -
- -

- -

Access by Date

- - - - - - - - - - - - - {foreach from=$loginsbymonth item=result} - - - - - - - - - - {/foreach} -
TypeLast Day2-7 Days8-30 Days1-3 Months3-6 Months+6 Months
{$result.type}{$result.1day}{$result.7day}{$result.1month}{$result.3month}{$result.6month}{$result.12month}
- -

- -{if $topdownloads|count > 0} -

Top Downloads

- - - - - - - - - {foreach from=$topdownloads item=result} - - - - - - {/foreach} - -
ReleaseGrabsDays Ago
{$result.searchname|escape:"htmlall"|replace:".":" "} - {if $isadmin}[Edit]{/if}{$result.grabs}{$result.adddate|timeago}
- -

-{/if} - -

Releases Added In Last 7 Days

- - - - - - - - {foreach from=$recent item=result} - - - - - {/foreach} - -
CategoryReleases
{$result.title}{$result.count}
- -

- -{if $topcomments|count > 0} -

Top Comments

- - - - - - - - - {foreach from=$topcomments item=result} - - - - - - {/foreach} - -
ReleaseCommentsDays Ago
{$result.searchname|escape:"htmlall"|replace:".":" "}{$result.comments}{$result.adddate|timeago}
-{/if} \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/spotnab-edit.tpl b/www/templates/nntmux/views/admin/spotnab-edit.tpl deleted file mode 100644 index 7d74aa219..000000000 --- a/www/templates/nntmux/views/admin/spotnab-edit.tpl +++ /dev/null @@ -1,55 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name: - - -
A name or description for the source.
-
Poster Username: - -
The username part of the poster. eg nntp
-
Poster E-mail: - -
The email part of the poster. eg spot@nntp.com
-
Usenet Group: - -
Group to search when looking up posts for this source.
-
Public Key: - -
Public Key needed to decode the posts specific for this source.
-
- -
- -
diff --git a/www/templates/nntmux/views/admin/spotnab-list.tpl b/www/templates/nntmux/views/admin/spotnab-list.tpl deleted file mode 100644 index 0bfd8824d..000000000 --- a/www/templates/nntmux/views/admin/spotnab-list.tpl +++ /dev/null @@ -1,44 +0,0 @@ - -

{$page->title}

- -{if $spotnab|@count == 0} -No available sources. Add one? -{else} - - - - - - - - - - - - - {foreach from=$spotnab item=source} - - - - - - - - - {/foreach} - - -
source descriptioncurrent statuscommentslast broadcastlast updateoptions
{$source.description}{if $source.active=="1"}active{else}inactive{/if}{$source.comments} - {if $source.lastbroadcast != null} - {$source.lastbroadcast} - {else} - n/a - {/if} - - {if $source.lastupdate != null} - {$source.lastupdate} - {else} - n/a - {/if} - edit delete
-{/if} diff --git a/www/templates/nntmux/views/admin/thetvdb-edit.tpl b/www/templates/nntmux/views/admin/thetvdb-edit.tpl deleted file mode 100644 index c1b55a8a0..000000000 --- a/www/templates/nntmux/views/admin/thetvdb-edit.tpl +++ /dev/null @@ -1,124 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
- -
- -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/thetvdb-list.tpl b/www/templates/nntmux/views/admin/thetvdb-list.tpl deleted file mode 100644 index b457497b5..000000000 --- a/www/templates/nntmux/views/admin/thetvdb-list.tpl +++ /dev/null @@ -1,40 +0,0 @@ -

{$page->title}

- -{if $serieslist} - -
- -
- - -    - -
-
- -{$pager} - -

- - - - - - - - - - {foreach from=$serieslist item=thetvdb} - - - - - - {/foreach} - -
TheTVDB idTitleOptions
{$thetvdb.tvdbid}{$thetvdb.seriesname|escape:"htmlall"}delete | remove
-
- {$pager} -{else} -

No TheTVDB episodes available.

-{/if} diff --git a/www/templates/nntmux/views/admin/thetvdb-remove.tpl b/www/templates/nntmux/views/admin/thetvdb-remove.tpl deleted file mode 100644 index 1c245f125..000000000 --- a/www/templates/nntmux/views/admin/thetvdb-remove.tpl +++ /dev/null @@ -1,4 +0,0 @@ - -

{$page->title}

- -Removed tvdbid from {$numtv} releases. \ No newline at end of file diff --git a/www/templates/nntmux/views/admin/tmux-edit.tpl b/www/templates/nntmux/views/admin/tmux-edit.tpl deleted file mode 100644 index 770df3d6e..000000000 --- a/www/templates/nntmux/views/admin/tmux-edit.tpl +++ /dev/null @@ -1,784 +0,0 @@ -

{$page->title}

- -
- -{if $error != ''} -
{$error}
-{/if} - -
- Tmux - How It Works - - - - - -
                                 - -
Tmux is a screen multiplexer and at least version 1.6 is required. It is used - here to allow multiple windows per session and multiple panes per window.

- Each script is run in its own shell environment. It is not looped, but allowed to run once and then - exit. This notifies tmux that the pane is dead and can then be respawned with another iteration of - the script in a new shell environment.
- This allows for scripts that crash to be restarted without user intervention.

- You can run multiple tmux sessions, but they all must have an associated tmux.conf file and all - sessions must use the same tmux.conf file.

- -

NOTICE:

If "Save Tmux Settings" is the last thing you did on this page or if it is - the active element and if you have this page set to autorefresh or you refresh instead of following - a link to this page, you will set the db with the settings currently on this page, not reload from - db. This could cause tmux scripts to start while optimize or patch the database is running. -
-
-
- -
- Monitor - - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_radios id="running" name='running' values=$yesno_ids output=$yesno_names selected=$ftmux->running separator='
'} -
This is the shutdown, true/on, it runs, false/off and all scripts are terminated. This - will start/stop all panes without terminating the monitor pane. This is not instant, it does not - kill any panes, it simply does not aloow any pane to restart if set to false. -
-
- - -
The time between query refreshes of monitor information, in seconds. This has no - effect on any other pane, except in regards to the kill switches. The other panes are checked every - 10 seconds. The lower the number, the more often it queries the database for numbers.
- As the database gets larger in size, the longer this set of queries takes to process.
- this has been mitigated by using memcache on the count queries. The will stay in cache for whatever - you have set in config.ini, default is 900 seconds. -
-
- - -
Enter the session name to be used by tmux, no spaces allowed in the name, this can't - be changed after scripts start. If you are running multiple servers, you could put your hostname - here -
-
-
-
- - -
Enter a path here to have Monitor monitor its usage and free space. Must be a valid - path.
To use this example, add to fstab and edit path, gid and uid, then mount as user not root:
tmpfs - /var/www/newznab/nzbfiles/tmpunrar tmpfs - user,uid=1000,gid=33,nodev,nodiratime,nosuid,size=1G,mode=777 0 0
- gid == group id == /etc/groups, uid == user id == /etc/passwd -
-
-
- Monitor is the name of the script that monitors all of the tmux panes and windows. It stops/stops - scripts based on user settings. It queries the database to provide stats from your newznab database.

- There are 2 columns of numbers, 'In Process' and 'In Database'. The 'In Process' is all releases - that need to be postprocessed. The 'In Database' is the number of releases matching that - category.

- The 'In Process' column has 2 sets of numbers, the total for each category that needs to be - postprocessed and inside the parenthesis is the difference from when the script started to what it - is now.

- The 'In Database' column also has 2 sets of numbers, the total releases for each category and inside - the parenthesis is the percentage that category is to the total number of releases.

- The Misc row means something different in both columns. The 'In Process' column is all releases that - have not had 'Additional' run on them. This includes 100% of all releases, not just the Misc - Category.

- The 'In Database' Misc means the number of releases that have not been categorized in any other - category.
- The counts for parts, binaries and predb totals are estimates and can vary wildly between queries. - It is too slow to query the db for real counts, when using InnoDB. All of the other counts are - actual counts.

- The 'In Process' predb is the total unmatched predb and inside the parenthesis is the 'matched' - changed since the script started. The 'In Database' is the total matched predb's you have and the - number inside the parenthesis is the percentage of total releases that you have matched to a predb - release.

- The 'In Process' NZBs are total nzbs, inside the parenthesis is distinct nzbs and 'In Database' are - nzbs that have all parts available and will be processed on next run.

- The 'In Process' requestid is the number waiting to be processed and inside the parenthesis is the - number changed since the script started. The 'In Database' is the total matches of releases to - requestIDs and inside the parenthesis is percentage of total releases that you have matched to a - requestid.

- The 'In Process' rows PC and Pron are simply subsets of the 'In Process' row Misc. There is no - postprocessing specifically for these categories. The 'In Database' is the actual count for the - category. -
-
-
- -
- Sequential - - - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="sequential" name='sequential' values=$sequential_ids output=$sequential_names selected=$ftmux->sequential} -
Basic Sequential runs update_binaries, backfill and update releases_sequentially.
Changing - requires restart. -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
I do not recommend using sequential, as it is not tested enough.
-
-
- -
- Update Binaries - - - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="binaries" name='binaries' values=$binaries_ids output=$binaries_names selected=$ftmux->binaries} -
Choose to run update_binaries. Update binaries gets from your last_record to now.
Simple - Threaded Update runs 1 group per thread.
Complete Threaded Update splits all work across - multiple threads(binaries_safe_threaded.py). -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
- - -
The time update_binaries is allowed to run with no updates.Time is in minutes.
-
-
- -
- Backfill - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="backfill" name='backfill' values=$backfill_ids output=$backfill_names selected=$ftmux->backfill} -       {html_options style="width:180px;" class="siteeditstyle" id="backfill_order" name='backfill_order' values=$backfill_group_ids output=$backfill_group selected=$ftmux->backfill_order} -       {html_options style="width:180px;" class="siteeditstyle" id="backfill_days" name='backfill_days' values=$backfill_days_ids output=$backfill_days selected=$ftmux->backfill_days} -
Choose to run backfill type. Backfill gets from your first_record back.
- Disabled - Disables backfill from running.
- Safe - Backfills 1 group by backfill days (set in admin-view groups), using the number of threads - set in admin. This downloads Backfill Quantity times the Backfill Threads, each - loop(backfill_safe_threaded.py).
- example: you have Backfill Threads = 10, Backfill Quantity = 20k, Max Messages = 5k: you will run 10 - threads, queue of 40 and download 200k headers.
- Interval - Backfills the number of groups (set in tmux), by backfill days (set in admin-view - groups), completely.
- All - Backfills the number of groups (set in tmux), by Backfill Quantity (set in tmux), up to - backfill days (set in admin-view groups)
- These settings are all per loop and does not use backfill date. Approximately every 80 minutes, - every activated backfill group will be backfilled (5k headers).This extra step is not necessary and - is not used when using Sequential.
- Newest - Sorts the group selection with the least backfill days backfilled, first.
- Oldest - Sorts the group selection with the most backfill days backfilled, first.
- Alphabetical - Sorts the group selection from a to z.
- Alphabetical Reverse - Sorts the group selection from z to a.
- Most Posts - Sorts the group selection by the highest number of posts, first.
- Fewest Posts - Sorts the group selection by the lowest number of posts, first.
- Backfill days - Days per Group from admin->view group or the Safe Backfill Date from admin->tmux. -
-
- - -
When not running backfill intervals, you select the number of headers per group per - thread to download. -
-
- - -
When running backfill the groups are sorted by the backfill method chosen above. - Select the number of groups to backfill per loop. -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
- {html_radios id="progressive" name='progressive' values=$yesno_ids output=$yesno_names selected=$ftmux->progressive separator='
'} -
This will vary the backfill sleep depending on how many collections you have.
ie - 50k collections would make sleep timer 100 seconds and 20k releases would make sleep timer 40 - seconds. -
-
-
- -
- Import nzbs - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="import" name='import' values=$import_ids output=$import_names selected=$ftmux->import} -
Choose to run import nzb script true/false. This can point to a single folder with - multiple subfolders on just the one folder. If you run this threaded, it will run 1 folder per - thread. -
-
- - -
Set the path to the nzb dump you downloaded from torrents, this is the path to bulk - files folder of nzbs. This is by default, recursive and threaded. You set the threads in Advanced - Settings. -
-
- -
How many NZB files to import per process.
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
This will import all nzbs in the given path. If in your path you have nzbs in - the root folder and subfolders(regardless of nzbs inside), threaded scripts will ignore all nzbs in - the root path. Then each subfolder is threaded. -
-
-
- -
- Update Releases - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="releases" name='releases' values=$releases_ids output=$releases_names selected=$ftmux->releases} -
Create releases, this is really only necessary to turn off when you only want to post - process. This runs "Categorizes releases in misc sections using the search name" on first loop and - has 33% chance of running on any other loop. Then runs update_releases.php 1 false to create new - releases.
Threaded is only used with tablepergroup and is required if using tpg. -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
- -
- Postprocessing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="post" name='post' values=$post_ids output=$post_names selected=$ftmux->post} -
Choose to do deep rar inspection, preview and sample creation and/or nfo processing. - true/false -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
- - -
The time postprocess is allowed to run with no updates to the screen.Time is in - seconds. Activity is detected when the history for the pane changes. The clock is restarted every - time activity is detected. -
-
- {html_radios id="post_amazon" name='post_amazon' values=$yesno_ids output=$yesno_names selected=$ftmux->post_amazon separator='
'} -
Choose to do books, music and games lookups true/false
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
- {html_options style="width:180px;" class="siteeditstyle" id="post_non" name='post_non' values=$post_non_ids output=$post_non_names selected=$ftmux->post_non} -
Choose to do movies, anime and tv lookups. true/false
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
- -
- Comment Sharing - - - - - - - - - -
- {html_radios id="run_sharing" name='run_sharing' values=$yesno_ids output=$yesno_names - selected=$ftmux->run_sharing separator='
'} - -
Run Comment Sharing from within tmux if you have it enabled in Admin->Comment Sharing - Settings. -
-
- - -
Set the sleep time between updates
-
-
- -
- Fix Release Names - - - - - - - - - - -
- {html_radios id="fix_names" name='fix_names' values=$yesno_ids output=$yesno_names selected=$ftmux->fix_names separator='
'} -
Choose to try to fix Releases Names using NFOs, par2 files, filenames, md5 and - sha1. true/false -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
- -
- Remove Crap Releases - - - - - - - - - -
- {html_radios id="fix_crap_opt" name='fix_crap_opt' onchange="enableFixCrapCustom()" values=$fix_crap_radio_names output=$fix_crap_radio_names selected=$ftmux->fix_crap_opt separator='
'} -
-
- {if $ftmux->fix_crap_opt == "Custom"} - {html_checkboxes id="fix_crap" name='fix_crap' values=$fix_crap_check_names output=$fix_crap_check_names selected=explode(', ', $ftmux->fix_crap)} - {else} - {html_checkboxes id="fix_crap" name='fix_crap' disabled="true" readonly="true" values=$fix_crap_check_names output=$fix_crap_check_names selected=explode(', ', $ftmux->fix_crap)} - {/if} -
-
Choose to run Remove Crap Releases. You can enable all or some.
-
- -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
-
- Decrypt Hashes - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="dehash" name='dehash' values=$dehash_ids output=$dehash_names selected=$ftmux->dehash} -
Choose to run Decrypt Hashes true/false
-
- -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
Decrypt hashes works by matching a hashed release to the md5 of a release in - the predb.
- Included in the same pane is Update Predb. This scrapes several predb sites and then tries to match - against releases.
- This should be run along with fixReleasenames.php, this is faster, but only looks at releases.names. - fixReleasenames.php goes further and looks at releasefiles.name. -
-
-
-
- Update TV/Theater - - - - - - - - - - -
- {html_radios id="update_tv" name='update_tv' values=$yesno_ids output=$yesno_names selected=$ftmux->update_tv separator='
'} -
Choose to run Update TV and Theater Schedules true/false
-
- - -
This is a start timer. The default is 12 hours. This means that if enabled, is will - start/run every 12 hours, no matter how long it runs for. -
-
-
- -
- PreDb IRC Scraper - - - - - - - - - -
- {html_radios id="scrape" name='scrape' values=$yesno_ids output=$yesno_names - selected=$ftmux->scrape separator='
'} -
Choose to run IRCScraper on irc channels. Setting SCRAPE_IRC_C_Z_BOOL parameter to - true or false in settings.php will toggle between the servers. The pane for this can not be - created after tmux starts. -
-
-
IRC Scraper will scrape several predb channels from the enabled servers.
- Copy settings_example.php to settings.php in /lib/IRCScraper and change the settings.
- As a minimum you should set the username and make sure it is unique. -
-
-
- -
- Miscellaneous - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
This sets the 'nice'ness of each script, default is 19, the lowest, the highest is -20 - anything between -1 and -20 require root/sudo to run -
-
- -
Set this to any number above 0 and when it is exceeded, backfill and update binaries - will be terminated. 0 disables. -
-
- - -
Set this to any number above 0 and when it is exceeded, import, backfill and update - binaries will be terminated. 0 disables. -
-
- {html_radios id="write_logs" name='write_logs' values=$yesno_ids output=$yesno_names selected=$ftmux->write_logs separator='
'} -
Set this to write each panes output to a per pane per day log file. This adds GMT date - to the filename. -
-
- {html_radios id="powerline" name='powerline' values=$yesno_ids output=$yesno_names selected=$ftmux->powerline separator='
'} -
Choose to use the Powerline tmux status bar. To make this pretty, you need to install - a patched font. This can be found on my - fork or the original git
You - will need to copy the default theme located at powerline/powerline/themes/default.sh to - powerline/powerline/themes/tmux.sh and edit that file for what is displayed, colors, etc. -
-
- - -
The target date for safe backfill. Format: YYYY-MM-DD
-
-
- -
- Server Monitors - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_radios id="showquery" name='showquery' values=$yesno_ids output=$yesno_names selected=$ftmux->showquery separator='
'} -
Choose to display the query times for each set of queries. true/false.
-
- {html_radios id="htop" name='htop' values=$yesno_ids output=$yesno_names selected=$ftmux->htop separator='
'} -
htop - an interactive process viewer for Linux. The pane for this can not be created - after tmux starts. -
-
- {html_radios id="nmon" name='nmon' values=$yesno_ids output=$yesno_names selected=$ftmux->nmon separator='
'} -
nmon is short for Nigel's performance Monitor for Linux. The pane for this can not be - created after tmux starts. -
-
- {html_radios id="vnstat" name='vnstat' values=$yesno_ids output=$yesno_names selected=$ftmux->vnstat separator='
'} - - -
vnStat is a console-based network traffic monitor for Linux and BSD that keeps a log - of network traffic for the selected interface(s). Any additional arguments should be placed in the - text box. The pane for this can not be created after tmux starts. -
-
- {html_radios id="tcptrack" name='tcptrack' values=$yesno_ids output=$yesno_names selected=$ftmux->tcptrack separator='
'} - - -
tcptrack displays the status of TCP connections that it sees on a given network - interface. tcptrack monitors their state and displays information such as state, source/destination - addresses and bandwidth usage in a sorted, updated list very much like the top(1) command.
Any - additional arguments should be placed in the text box.
You may need to run "sudo setcap - cap_net_raw+ep /usr/bin/tcptrack", to be able to run as user. The pane for this can not be created - after tmux starts. -
-
- {html_radios id="bwmng" name='bwmng' values=$yesno_ids output=$yesno_names selected=$ftmux->bwmng separator='
'} -
bwm-ng can be used to monitor the current bandwidth of all or some specific network - interfaces or disks (or partitions). The pane for this can not be created after tmux starts. -
-
- {html_radios id="mytop" name='mytop' values=$yesno_ids output=$yesno_names selected=$ftmux->mytop separator='
'} -
mytop - display MySQL server performance info like `top'.
You will need to create - ~/.mytop, an example can be found in 'perldoc mytop'. The pane for this can not be created after - tmux starts. -
-
- {html_radios id="showprocesslist" name='showprocesslist' values=$yesno_ids output=$yesno_names selected=$ftmux->showprocesslist separator='
'} - - -
This runs the watch command in its own pane. This could be used for a live 'slow query - monitor'. Just set the time above and only the queries that exceed it will be displayed.
mysql - -e "SELECT time, state, rows_examined, info FROM information_schema.processlist WHERE command != - \"Sleep\" AND time >= .5 ORDER BY time DESC \G"
This shows a grid like layout with the full test - of the running queries.
You will need to create a ~/.my.cnf for this to work properlly. The pane - for this can not be created after tmux starts and modifying the time above will have no effect until - a restart occurs. -
-
- {html_radios id="console" name='console' values=$yesno_ids output=$yesno_names selected=$ftmux->console separator='
'} -
Open an empty bash shell. The pane for this can not be created after tmux starts. -
-
- {html_radios id="debuginfo" name='debuginfo' values=$yesno_ids output=$yesno_names selected=$ftmux->debuginfo separator='
'} -
For developers. Whether to echo debug information in some scripts.
-
-
- - - -
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/user-edit.tpl b/www/templates/nntmux/views/admin/user-edit.tpl deleted file mode 100644 index 5abbaf6bc..000000000 --- a/www/templates/nntmux/views/admin/user-edit.tpl +++ /dev/null @@ -1,128 +0,0 @@ -

{$page->title}

- -{if $error != ''} -
{$error}
-{/if} - -
- - - - - - - - - - - - - - - - - - {if $user.id} - - - - - - - - - {/if} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name: - - -
Email: - -
Password: - - {if $user.id} -
Only enter a password if you want to change it.
- {/if} -
Grabs: - -
Invites: - -
Movie View: - -
Music View: - -
Game View: - -
XXX View: - -
Console View: - -
Book View: - -
: - {html_radios id="role" name='role' values=$role_ids output=$role_names selected=$user.role separator='
'} -
Notes: - -
- - - {if $user.id != ""} - - - {/if} -
- -
- - diff --git a/www/templates/nntmux/views/admin/user-list.tpl b/www/templates/nntmux/views/admin/user-list.tpl deleted file mode 100644 index bdfbadeaf..000000000 --- a/www/templates/nntmux/views/admin/user-list.tpl +++ /dev/null @@ -1,64 +0,0 @@ - -

{$page->title}

- -
- -
- - -    - - -    - - -    - - -    - -
-
- -{$pager} - -

- - - - - - - - - - - - - - - - - - - {foreach from=$userlist item=user} - - - - - - - - - - - - - - {/foreach} - - -
name
email
host
join date
last login
api access
grabs
invitesnotesrole
options
{$user.username}{$user.email}{$user.host}{$user.createddate|date_format}{$user.lastlogin|date_format}{$user.apiaccess|date_format}{$user.grabs}{$user.invites}{$user.rolename}{if $user.role!="2"}delete{/if}
\ No newline at end of file diff --git a/www/templates/nntmux/views/admin/view-logs.tpl b/www/templates/nntmux/views/admin/view-logs.tpl deleted file mode 100644 index 3592a0b98..000000000 --- a/www/templates/nntmux/views/admin/view-logs.tpl +++ /dev/null @@ -1,34 +0,0 @@ -

{$page->title}

-

-{if $data} - {$pager} - - - - - {foreach from=$data item=log} - - - - {/foreach} -
- -
{$log}
-
- {$pager} -{else} -

Nothing found, maybe you need to turn on logging in : {$path}

- -{/if} \ No newline at end of file diff --git a/www/templates/nntmux/views/frontend/games.tpl b/www/templates/nntmux/views/frontend/games.tpl index 94ab922c8..484eb339b 100644 --- a/www/templates/nntmux/views/frontend/games.tpl +++ b/www/templates/nntmux/views/frontend/games.tpl @@ -67,39 +67,39 @@ title
+ src="{$smarty.const.WWW_TOP}/templates/nntmux/images/sorting/arrow_up.gif" alt=""/> genre
+ src="{$smarty.const.WWW_TOP}/templates/nntmux/images/sorting/arrow_up.gif" alt=""/> release date
+ src="{$smarty.const.WWW_TOP}/templates/nntmux/images/sorting/arrow_up.gif" alt=""/> posted
+ src="{$smarty.const.WWW_TOP}/templates/nntmux/images/sorting/arrow_up.gif" alt=""/> size
+ src="{$smarty.const.WWW_TOP}/templates/nntmux/images/sorting/arrow_up.gif" alt=""/> files
+ src="{$smarty.const.WWW_TOP}/templates/nntmux/images/sorting/arrow_up.gif" alt=""/> stats
+ src="{$smarty.const.WWW_TOP}/templates/nntmux/images/sorting/arrow_up.gif" alt=""/> diff --git a/www/templates/nntmux/views/frontend/rssheader.tpl b/www/templates/nntmux/views/frontend/rssheader.tpl index 5659ba9ad..7c38ce2a7 100644 --- a/www/templates/nntmux/views/frontend/rssheader.tpl +++ b/www/templates/nntmux/views/frontend/rssheader.tpl @@ -9,7 +9,7 @@ {$site->email} ({$site->title|escape}) {$site->meta_keywords} - {$serverroot}templates/default/images/banner.jpg + {$serverroot}templates/nntmux/images/banner.jpg {$site->title|escape} {$serverroot} Visit {$site->title|escape} - {$site->strapline|escape} diff --git a/www/templates/omicron/views/admin/adminmenu.tpl b/www/templates/omicron/views/admin/adminmenu.tpl deleted file mode 100644 index 37441af4e..000000000 --- a/www/templates/omicron/views/admin/adminmenu.tpl +++ /dev/null @@ -1,53 +0,0 @@ -

Admin Functions

- diff --git a/www/templates/omicron/views/admin/ajax_release-edit.tpl b/www/templates/omicron/views/admin/ajax_release-edit.tpl deleted file mode 100644 index 8711069a6..000000000 --- a/www/templates/omicron/views/admin/ajax_release-edit.tpl +++ /dev/null @@ -1,106 +0,0 @@ - -
- -{if $success} - -

Successfully updated!

-{if $from != ''} - -{/if} - -{else} - -{literal} - -{/literal} - -
- -{foreach from=$idArr item=id} - -{/foreach} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - {html_options id="category" name=category options=$catlist selected=$release.categoryid} -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
- -
- -
- -{/if} - -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/anidb-edit.tpl b/www/templates/omicron/views/admin/anidb-edit.tpl deleted file mode 100644 index b3f1626cd..000000000 --- a/www/templates/omicron/views/admin/anidb-edit.tpl +++ /dev/null @@ -1,119 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/anidb-list.tpl b/www/templates/omicron/views/admin/anidb-list.tpl deleted file mode 100644 index 409d82f0c..000000000 --- a/www/templates/omicron/views/admin/anidb-list.tpl +++ /dev/null @@ -1,41 +0,0 @@ -

{$page->title}

- -{if $anidblist} - -
- -
- - -    - -
-
- -{$pager} - -

- - - - - - - - - - {foreach from=$anidblist item=anidb} - - - - - - {/foreach} - -
AniDB IdTitleOptions
{$anidb.anidbid}{$anidb.title|escape:"htmlall"}delete | remove
- -
- {$pager} -{else} -

No AniDB episodes available.

-{/if} diff --git a/www/templates/omicron/views/admin/anidb-remove.tpl b/www/templates/omicron/views/admin/anidb-remove.tpl deleted file mode 100644 index 97d0bf29f..000000000 --- a/www/templates/omicron/views/admin/anidb-remove.tpl +++ /dev/null @@ -1,4 +0,0 @@ - -

{$page->title}

- -Removed anidbid from {$numtv} releases. \ No newline at end of file diff --git a/www/templates/omicron/views/admin/baseadminpage.tpl b/www/templates/omicron/views/admin/baseadminpage.tpl deleted file mode 100644 index 5a63706e8..000000000 --- a/www/templates/omicron/views/admin/baseadminpage.tpl +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - {$site->title|default:'newznab'} - {$page->meta_title|default:$page->title} - - - - - - - - - - - {$page->head} - - - -
- - - -
- -
- -
- -
- {$page->content} -
- - - - - -
 
- -
- - -
-
-
-
- - - - - {if $site->google_analytics_acc != ''} - {literal} - - - - {/literal} - {/if} - - - \ No newline at end of file diff --git a/www/templates/omicron/views/admin/binaryblacklist-edit.tpl b/www/templates/omicron/views/admin/binaryblacklist-edit.tpl deleted file mode 100644 index 2407eeaab..000000000 --- a/www/templates/omicron/views/admin/binaryblacklist-edit.tpl +++ /dev/null @@ -1,71 +0,0 @@ - -

{$page->title}

- -{if $error != ''} -
{$error}
-{/if} - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Group: - - -
The full name of a valid newsgroup. (Wildcard in the format 'alt.binaries.*')
-
Regex: - -
The regex to be applied. (Note: Beginning and Ending / are already included)
-
Description: - -
A description for this regex
-
: - {html_radios id="msgcol" name='msgcol' values=$msgcol_ids output=$msgcol_names selected=$regex.msgcol separator='
'} -
Which field in the message to apply the black/white list to.
-
: - {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$regex.status separator='
'} -
Only active regexes are applied during the release process.
-
: - {html_radios id="optype" name='optype' values=$optype_ids output=$optype_names selected=$regex.optype separator='
'} -
Black will exclude all messages for a group which match this regex. White will include only those which match.
-
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/binaryblacklist-list.tpl b/www/templates/omicron/views/admin/binaryblacklist-list.tpl deleted file mode 100644 index 93a408784..000000000 --- a/www/templates/omicron/views/admin/binaryblacklist-list.tpl +++ /dev/null @@ -1,37 +0,0 @@ - -

{$page->title}

- -

- Binaries can be prevented from being added to the index at all if they match a regex provided in the blacklist. They can also be included only if they match a regex (whitelist). -

- -
- - - - - - - - - - - - - - {foreach from=$binlist item=bin} - - - - - - - - - - {/foreach} - -
idgroupregextypefieldstatusOptions
{$bin.id}{$bin.groupname|replace:"alt.binaries":"a.b"} - {$bin.regex|escape:html}
- {$bin.description} -
{if $bin.optype==1}black{else}white{/if}{if $bin.msgcol==1}subject{elseif $bin.msgcol==2}poster{else}messageid{/if}{if $bin.status==1}active{else}disabled{/if}edit | delete
diff --git a/www/templates/omicron/views/admin/book-edit.tpl b/www/templates/omicron/views/admin/book-edit.tpl deleted file mode 100644 index 417958379..000000000 --- a/www/templates/omicron/views/admin/book-edit.tpl +++ /dev/null @@ -1,71 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
: - -
: - -
: - -
: - -
: - -
: - - {if $book.cover == 1} - - {/if} -
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/book-list.tpl b/www/templates/omicron/views/admin/book-list.tpl deleted file mode 100644 index a83c0d369..000000000 --- a/www/templates/omicron/views/admin/book-list.tpl +++ /dev/null @@ -1,29 +0,0 @@ -

{$page->title}

- -{if $booklist} -{$pager} - - - - - - - - - - - {foreach from=$booklist item=book} - - - - - - - {/foreach} - -
idTitleAuthorCreated
{$book.id}{$book.title}{$book.author}{$book.createddate|date_format}
-
- {$pager} -{else} -

No books available.

-{/if} diff --git a/www/templates/omicron/views/admin/category-edit.tpl b/www/templates/omicron/views/admin/category-edit.tpl deleted file mode 100644 index 34dc4407d..000000000 --- a/www/templates/omicron/views/admin/category-edit.tpl +++ /dev/null @@ -1,68 +0,0 @@ - -

{$page->title}

- -{if $error != ''} -
{$error}
-{/if} - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Title: - - {$category.title} -
Parent: - {$category.parentid} -
Description: - -
Minimum Size (Bytes): - -
Maximum Size (Bytes): - -
: - {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$category.status separator='
'} -
: - {html_radios id="disablepreview" name='disablepreview' values=$status_ids output=$status_names selected=$category.disablepreview separator='
'} -
- -
- -
diff --git a/www/templates/omicron/views/admin/category-list.tpl b/www/templates/omicron/views/admin/category-list.tpl deleted file mode 100644 index 613e3debf..000000000 --- a/www/templates/omicron/views/admin/category-list.tpl +++ /dev/null @@ -1,43 +0,0 @@ - -

{$page->title}

- -

- Make a category inactive to remove it from the menu. This does not prevent binaries being matched into an appropriate category. Disable preview prevents ffmpeg being used for releases in the category. -

- - - - - - - - - - - - - - {foreach from=$categorylist item=category} - - - - - - - - - - {/foreach} - - -
idtitleparentmin sizemax sizeactivedisable preview
{$category.id}{$category.title} - {if $category.parentid != null} - {$category.parentName} - {else} - n/a - {/if} - - {if $category.minsizetoformrelease != 0 }{$category.minsizetoformrelease|fsize_format:"MB"}{/if} - - {if $category.maxsizetoformrelease != 0 }{$category.maxsizetoformrelease|fsize_format:"MB"}{/if} - {if $category.status == "1"}Yes{else}No{/if}{if $category.disablepreview == "1"}Yes{else}No{/if}
diff --git a/www/templates/omicron/views/admin/category_regexes-edit.tpl b/www/templates/omicron/views/admin/category_regexes-edit.tpl deleted file mode 100644 index 246859a92..000000000 --- a/www/templates/omicron/views/admin/category_regexes-edit.tpl +++ /dev/null @@ -1,73 +0,0 @@ -

{$page->title}

-{if $error != ''} -
{$error}
-{/if} -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- Regex to match against a group or multiple groups.
- Delimiters are already added, and PCRE_CASELESS is added after for case insensitivity. - An example of matching a single group: alt\.binaries\.example
- An example of matching multiple groups: alt\.binaries.* -
-
- -
- Regex to use when categorizing releases.
- The regex delimiters are not added, you MUST add them. See this page.
- To make the regex case insensitive, add i after the last delimiter.
-
-
- -
- Description for this regex.
- You can include an example usenet subject this regex would match on. -
-
- -
- The order to run this regex in.
- Must be a number, 0 or higher.
- If multiple regex have the same ordinal, MySQL will randomly sort them. -
-
- {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$regex.status separator='
'} -
Only active regex are used during the collection matching process.
-
- {html_options id="category_id" name='category_id' values=$category_ids output=$category_names selected=$regex.category_id} -
Select a category which releases matched to this regex will go into.
-
- -
-
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/category_regexes-list.tpl b/www/templates/omicron/views/admin/category_regexes-list.tpl deleted file mode 100644 index f56d02405..000000000 --- a/www/templates/omicron/views/admin/category_regexes-list.tpl +++ /dev/null @@ -1,47 +0,0 @@ -

{$page->title}

-

This page lists regex used for categorizing releases.
- You can recategorize all releases by running misc/update/update_releases.php 6 true -

-
- -
- - -    - -
-{if $regex} - -
{$pager}
- - - - - - - - - - - - - {foreach from=$regex item=row} - - - - - - - - {if $row.status==1} - - {else} - - {/if} - - - - {/foreach} -
idgroupeditdescriptiondeleteordinalstatusregexcategory id
{$row.id}{$row.group_regex}Edit{$row.description|truncate:50:"...":true}Delete{$row.ordinal}ActiveDisabled{$row.regex|escape:html|truncate:50:"...":true}{$row.category_id}
-
{$pager}
-{/if} \ No newline at end of file diff --git a/www/templates/omicron/views/admin/collection_regexes-edit.tpl b/www/templates/omicron/views/admin/collection_regexes-edit.tpl deleted file mode 100644 index 41e885d25..000000000 --- a/www/templates/omicron/views/admin/collection_regexes-edit.tpl +++ /dev/null @@ -1,73 +0,0 @@ -

{$page->title}

-{if $error != ''} -
{$error}
-{/if} -
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- Regex to match against a group or multiple groups.
- Delimiters are already added, and PCRE_CASELESS is added after for case insensitivity. - An example of matching a single group: alt\.binaries\.example
- An example of matching multiple groups: alt\.binaries.* -
-
- -
- The regex to use when matching (grouping) collections.
- The regex delimiters are not added, you MUST add them. See this page.
- To make the regex case insensitive, add i after the last delimiter.
- You MUST include at least one regex capture group.
- You MUST name your regex capture groups (the ones you want to be included).
- A string will be created from your matched capture groups.
- The string will form part of a "collection hash".
- The collection hash is used to group many parts together, to form the finalized release.
- The usenet group and name of the poster are added automatically when hashing.
- Capture groups are sorted alphabetically (by capture group name) when concatenating the string.
-
-
- -
- Description for this regex.
- You can include an example usenet subject this regex would match on. -
-
- -
- The order to run this regex in.
- Must be a number, 0 or higher.
- If multiple regex have the same ordinal, MySQL will randomly sort them. -
-
- {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$regex.status separator='
'} -
Only active regex are used during the collection matching process.
-
- -
-
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/collection_regexes-list.tpl b/www/templates/omicron/views/admin/collection_regexes-list.tpl deleted file mode 100644 index 1d4c56f9a..000000000 --- a/www/templates/omicron/views/admin/collection_regexes-list.tpl +++ /dev/null @@ -1,43 +0,0 @@ -

{$page->title}

-

This page lists regex used for grouping usenet collections.

-
- -
- - -    - -
-{if $regex} - -
{$pager}
- - - - - - - - - - - - {foreach from=$regex item=row} - - - - - - - - {if $row.status==1} - - {else} - - {/if} - - - {/foreach} -
idgroupeditdescriptiondeleteordinalstatusregex
{$row.id}{$row.group_regex}Edit{$row.description|truncate:50:"...":true}Delete{$row.ordinal}ActiveDisabled{$row.regex|escape:html|truncate:50:"...":true}
-
{$pager}
-{/if} \ No newline at end of file diff --git a/www/templates/omicron/views/admin/collection_regexes-test.tpl b/www/templates/omicron/views/admin/collection_regexes-test.tpl deleted file mode 100644 index 0c5738543..000000000 --- a/www/templates/omicron/views/admin/collection_regexes-test.tpl +++ /dev/null @@ -1,44 +0,0 @@ -

{$page->title}

-

This page is used for testing regex for grouping usenet collections.
Enter the group name to test and a regex. Limit is how many collections to show max on the page, 0 for no limit(slow).

- -{if $tpg} -
- -
- -
- -
- -
- {if $data} - - {foreach from=$data key=hash item=collection} - - - - -
{$hash}
Current Files: {count($collection)}
- - - - - - - - - {foreach from=$collection item=row} - - - - - - - - {/foreach} -
namecurrent partstotal partsposterold hash
{$row.file_name}{$row.file_current_parts}{$row.file_total_parts}{$row.collection_poster}{$row.old_collection_hash}
- {/foreach} - {/if} -{else} -

The Table Per Group setting is required to be on to use this page, for performance reasons.

-{/if} \ No newline at end of file diff --git a/www/templates/omicron/views/admin/comments-list.tpl b/www/templates/omicron/views/admin/comments-list.tpl deleted file mode 100644 index dd11d9f1d..000000000 --- a/www/templates/omicron/views/admin/comments-list.tpl +++ /dev/null @@ -1,38 +0,0 @@ -

{$page->title}

- -{if $commentslist} -{$pager} - - - - - - - - - - - - - {foreach from=$commentslist item=comment} - - - - - - - - {/foreach} - - -
userdatecommenthostoptions
- {if $comment.sourceid == 0}{$comment.username}{else}{$comment.username}
(syndicated){/if} -
{$comment.createddate|date_format} ({$comment.createddate|timeago} - ago) - {$comment.text|escape:"htmlall"|nl2br}{$comment.host} - {if $comment.guid != ""}view | {/if} - delete -
-{else} -

No comments available

-{/if} diff --git a/www/templates/omicron/views/admin/console-edit.tpl b/www/templates/omicron/views/admin/console-edit.tpl deleted file mode 100644 index 44a1be52c..000000000 --- a/www/templates/omicron/views/admin/console-edit.tpl +++ /dev/null @@ -1,96 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - - {if $console.cover == 1} - - {/if} -
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/console-list.tpl b/www/templates/omicron/views/admin/console-list.tpl deleted file mode 100644 index 255f79139..000000000 --- a/www/templates/omicron/views/admin/console-list.tpl +++ /dev/null @@ -1,30 +0,0 @@ -

{$page->title}

- -{if $consolelist} -{$pager} - - - - - - - - - - - {foreach from=$consolelist item=console} - - - - - - - {/foreach} - -
idTitlePlatformCreated
{$console.id}{$console.title}{$console.platform}{$console.createddate|date_format}
- -
-{$pager} -{else} -

No games available.

-{/if} diff --git a/www/templates/omicron/views/admin/content-add.tpl b/www/templates/omicron/views/admin/content-add.tpl deleted file mode 100644 index d3e1e7410..000000000 --- a/www/templates/omicron/views/admin/content-add.tpl +++ /dev/null @@ -1,74 +0,0 @@ -

{$page->title}

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
- -
- -
- -
- {html_options id="contenttype" name='contenttype' options=$contenttypelist selected=$content->contenttype} -
- {html_options id="role" name='role' options=$rolelist selected=$content->role} -
Only appropriate for articles and useful links
-
- {html_radios id="showinmenu" name='showinmenu' values=$yesno_ids output=$yesno_names selected=$content->showinmenu separator='
'} -
- {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$content->status separator='
'} -
- -
If you set the ordinal = 1, then a all ordinals greater than 0 will be renumbered. This allows new content to be at the top without having to renumber all previous content.
If you set ordinal = 0, it will be at the top, sorted by ID(order added)
-
- -
-
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/content-list.tpl b/www/templates/omicron/views/admin/content-list.tpl deleted file mode 100644 index f55ac1d33..000000000 --- a/www/templates/omicron/views/admin/content-list.tpl +++ /dev/null @@ -1,57 +0,0 @@ -

{$page->title}

- - - - - - - - - - - - - - {foreach from=$contentlist item=content} - - - - - - - - - - - - - {/foreach} -
ordinalidtitleurltypestatusrolein menubodyoptions
{$content->ordinal}{$content->id}{$content->title}{$content->url}c{$content->id} - {if $content->contenttype == "1"} - Useful Link - {elseif $content->contenttype == "2"} - Article - {elseif $content->contenttype == "3"} - Homepage - {/if} - - {if $content->status == "1"} - Enabled - {else} - Disabled - {/if} - - {if $content->role == "0"} - Everyone - {elseif $content->role == "1"} - Users - {elseif $content->role == "2"} - Admins - {/if} - - {if $content->showinmenu == "1"} - Yes - {else} - No - {/if} - {$content->body|truncate:100|escape:'htmlall'}{if $content->contenttype != "3"}delete{/if}
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/db-optimise.tpl b/www/templates/omicron/views/admin/db-optimise.tpl deleted file mode 100644 index 61c81e2e6..000000000 --- a/www/templates/omicron/views/admin/db-optimise.tpl +++ /dev/null @@ -1,16 +0,0 @@ - -

{$page->title}

- - - - - - - - {foreach from=$tablelist item=table} - - - - {/foreach} - -
message
{$table} optimised/repaired
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/game-edit.tpl b/www/templates/omicron/views/admin/game-edit.tpl deleted file mode 100644 index b69bbb798..000000000 --- a/www/templates/omicron/views/admin/game-edit.tpl +++ /dev/null @@ -1,75 +0,0 @@ -

{$page->title}

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- (Game ID of the url posted below, if unknown put 0) -
- -
- -
- -
- -
- -
- -
- - {if $game.cover == 1} - - {/if} -
- -
-
diff --git a/www/templates/omicron/views/admin/game-list.tpl b/www/templates/omicron/views/admin/game-list.tpl deleted file mode 100644 index a337f7803..000000000 --- a/www/templates/omicron/views/admin/game-list.tpl +++ /dev/null @@ -1,22 +0,0 @@ -

{$page->title}

-{if $gamelist} - {$pager} - - - - - - - - {foreach from=$gamelist item=game} - - - - - - - {/foreach} -
IDTitleGenreCreated
{$game.id}{$game.title}{$game.genretitle}{$game.createddate|date_format}
-{else} -

No games available.

-{/if} diff --git a/www/templates/omicron/views/admin/group-bulk.tpl b/www/templates/omicron/views/admin/group-bulk.tpl deleted file mode 100644 index 5ca655361..000000000 --- a/www/templates/omicron/views/admin/group-bulk.tpl +++ /dev/null @@ -1,60 +0,0 @@ - -

{$page->title}

- -{if $groupmsglist} - - - - - - - - {foreach from=$groupmsglist item=group} - - - - - {/foreach} - -
groupmsg
{$group.group}{$group.msg}
- -

View all groups.

- -{else} -

Regex of groups to add to the site.

- -
- - - - - - - - - - - - - - - - - - - -
Group List: - -
A regular expression to match against group names e.g. alt.binaries.cd.image.linux|alt.binaries.warez.linux
-
: - {html_radios id="active" name='active' values=$yesno_ids output=$yesno_names selected=1 separator='
'} -
Inactive groups will not have headers downloaded for them.
-
- {html_radios id="backfill" name='backfill' values=$yesno_ids output=$yesno_names selected=0 separator='
'} -
Inactive groups will not have backfill headers downloaded for them.
-
- -
- -
-{/if} \ No newline at end of file diff --git a/www/templates/omicron/views/admin/group-edit.tpl b/www/templates/omicron/views/admin/group-edit.tpl deleted file mode 100644 index 2a001db94..000000000 --- a/www/templates/omicron/views/admin/group-edit.tpl +++ /dev/null @@ -1,74 +0,0 @@ -

{$page->title}

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name: - - -
Changing the name to an invalid group will break things.
-
- -
- -
Number of days to attempt to backfill this group. Adjust as necessary.
-
- -
The minimum number of files to make a release. i.e. if set to two, then releases which only contain one file will not be created. If left blank, will use the site wide setting.
-
- -
The minimum total size in bytes to make a release. If left blank, will use the site wide setting.
-
- -
The oldest record number for the group.
-
- -
The newest record number for the group.
-
- {html_radios id="active" name='active' values=$yesno_ids output=$yesno_names selected=$group.active separator='
'} -
Inactive groups will not have headers downloaded for them.
-
- {html_radios id="backfill" name='backfill' values=$yesno_ids output=$yesno_names selected=$group.backfill separator='
'} -
If set to false, backfill.php will ignore this group. This works even if the above setting is no.
-
- -
-
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/group-list.tpl b/www/templates/omicron/views/admin/group-list.tpl deleted file mode 100644 index fe9ea07a2..000000000 --- a/www/templates/omicron/views/admin/group-list.tpl +++ /dev/null @@ -1,84 +0,0 @@ -
-

{$page->title}

-

- Below is a list of all usenet groups available to be indexed. Click 'Activate' to start indexing a group. Backfill works independently of active. -

- {if $grouplist} -
-
- - -    - -
-
- {$pager} -
-
- Reset all | - Purge all
- Active Groups | - Inactive Groups | - All Groups -
-
-
msg
- - - - - - - - - - - - - - - {foreach from=$grouplist item=group} - - - - - - - - - - - - - - {/foreach} -
groupFirst PostLast Postlast updatedactivebackfillreleasesMin FilesMin SizeBackfill Daysoptions
- {$group.name|replace:"alt.binaries":"a.b"} -
{$group.description}
-
{$group.first_record_postdate}
{$group.first_record_postdate|timeago}
{$group.last_record_postdate}
{$group.last_record_postdate|timeago}
{$group.last_updated|timeago} ago{if $group.active=="1"}Deactivate{else}Activate{/if}{if $group.backfill=="1"}Deactivate{else}Activate{/if}{$group.num_releases}{if $group.minfilestoformrelease==""}n/a{else}{$group.minfilestoformrelease}{/if}{if $group.minsizetoformrelease==""}n/a{else}{$group.minsizetoformrelease|fsize_format:"MB"}{/if}{$group.backfill_target} - Reset | - Delete | - Purge -
-
-
- {$pager} -
-
-
- - -    - -
- Reset all | - Purge all
- Active Groups | - Inactive Groups | - All Groups -
-
- {else} -

No groups available (eg. none have been added).

- {/if} -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/index.tpl b/www/templates/omicron/views/admin/index.tpl deleted file mode 100644 index 64dd5aff8..000000000 --- a/www/templates/omicron/views/admin/index.tpl +++ /dev/null @@ -1,53 +0,0 @@ - -

{$page->title}

- -
-

- Welcome to newznab. In this area you will be able to configure many aspects of your site.
- If this is your first time here, you need to start the scripts that will fill newznab. -

- -
    -
  1. Configure your site options. The defaults will work fine.
  2. -
  3. There is a default list of usenet groups provided. To get started, you will need to activate some groups. Do not activate every group if its your first time setting this up. Try one or two first. - You can also add your own groups manually.
  4. -
  5. Next you will want to get the latest headers. This should be done from the command line, using the linux or windows shell scripts found in /misc/update_scripts/nix_scripts (or win_scripts for windows users), as it can take some time. If this is your first time dont bother with the init scripts just open a command prompt... -
    cd /var/www/newznab/misc/update_scripts
    php update_binaries.php
    -
  6. -
  7. After obtaining headers, the next step is to create releases. This is best done from the command line using the linux or windows shell scripts found in /misc/update_scripts/nix_scripts (or win_scripts for windows users). If this is your first time dont bother with the init scripts just open a command prompt... -
    cd /var/www/newznab/misc/update_scripts
    php update_releases.php
    -
  8. -
  9. If you intend to keep using newznab, it is best to sign up for your own api keys from tmdb, rotten tomatoes and amazon.
  10. -
  11. If you like newznab and intend to continue using it, please consider sending a donation to the team who write and maintain it.
  12. -
- - hide this welcome message -
- -
- -

Status Alerts

- - {if $statusmsgs|@count > 0} - - - - - - - - {foreach from=$statusmsgs item=result name=result} - - - - - - {/foreach} -
#Item
{$smarty.foreach.result.iteration}{$result.msg}{if $result.url != ""}{/if}
- {else} -

There are currently no status alerts.

- {/if} - -
- show welcome message -
diff --git a/www/templates/omicron/views/admin/menu-edit.tpl b/www/templates/omicron/views/admin/menu-edit.tpl deleted file mode 100644 index 8c1a4faa4..000000000 --- a/www/templates/omicron/views/admin/menu-edit.tpl +++ /dev/null @@ -1,70 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - - -
: - -
Use full http:// path for external URLs, otherwise use no prefix.
-
: - -
: - -
Smarty expression returning -1 if the menu item should be disabled.
-
: - {html_radios id="role" name='role' values=$role_ids output=$role_names selected=$menu.role separator='
'} -
: - -
: - {html_radios id="newwindow" name='newwindow' values=$yesno_ids output=$yesno_names selected=$menu.newwindow separator='
'} -
Whether the menu item should open in a new window.
-
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/menu-list.tpl b/www/templates/omicron/views/admin/menu-list.tpl deleted file mode 100644 index 004bfc932..000000000 --- a/www/templates/omicron/views/admin/menu-list.tpl +++ /dev/null @@ -1,32 +0,0 @@ -

{$page->title}

- -{if $menulist} - - - - - - - - - - - - - - {foreach from=$menulist item=menu} - - - - - - - - - - {/foreach} - -
namehreftooltiproleordinalnew windowoptions
{$menu.title|escape:"htmlall"}{$menu.href}{$menu.tooltip}{if $menu.role == 0}Guests{elseif $menu.role == 1}Users{elseif $menu.role == 2}Admin{else}Other{/if}{$menu.ordinal}{if $menu.newwindow == 1}Yes{else}No{/if}delete
-{else} -

No menus available.

-{/if} diff --git a/www/templates/omicron/views/admin/movie-add.tpl b/www/templates/omicron/views/admin/movie-add.tpl deleted file mode 100644 index f7e0b9537..000000000 --- a/www/templates/omicron/views/admin/movie-add.tpl +++ /dev/null @@ -1,30 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - -
Enter the full 7 digit IMDB id into the box below and click Add.
: - -
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/movie-edit.tpl b/www/templates/omicron/views/admin/movie-edit.tpl deleted file mode 100644 index b701046de..000000000 --- a/www/templates/omicron/views/admin/movie-edit.tpl +++ /dev/null @@ -1,112 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
:{$movie.imdbid}
:{$movie.tmdbid}
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - - {if $movie.cover == 1} - - {/if} -
: - - {if $movie.backdrop == 1} - - {/if} -
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/movie-list.tpl b/www/templates/omicron/views/admin/movie-list.tpl deleted file mode 100644 index ffc0f8b7b..000000000 --- a/www/templates/omicron/views/admin/movie-list.tpl +++ /dev/null @@ -1,51 +0,0 @@ -

{$page->title}

- -{if $movielist} - -
- -
- - -    - -
-
- -{$pager} - -

- - - - - - - - - - - - - - {foreach from=$movielist item=movie} - - - - - - - - - - {/foreach} - -
IMDB idTMDb idTitleCoverBackdropCreatedoptions
{$movie.imdbid}{$movie.tmdbid}{$movie.title} ({$movie.year}){if $movie.cover == "1"}Yes{else}No{/if}{if $movie.backdrop == "1"}Yes{else}No{/if}{$movie.createddate|date_format} - update | - delete -
-
- {$pager} -{else} -

No Movies available.

-{/if} diff --git a/www/templates/omicron/views/admin/music-edit.tpl b/www/templates/omicron/views/admin/music-edit.tpl deleted file mode 100644 index bec32365a..000000000 --- a/www/templates/omicron/views/admin/music-edit.tpl +++ /dev/null @@ -1,104 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
Tracks separated by | (pipe) delimeter
-
: - - {if $music.cover == 1} - - {/if} -
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/music-list.tpl b/www/templates/omicron/views/admin/music-list.tpl deleted file mode 100644 index 1d80c484a..000000000 --- a/www/templates/omicron/views/admin/music-list.tpl +++ /dev/null @@ -1,30 +0,0 @@ -

{$page->title}

- -{if $musiclist} -{$pager} - - - - - - - - - - - {foreach from=$musiclist item=music} - - - - - - - {/foreach} - -
idTitleArtistCreated
{$music.id}{$music.title} ({$music.year}){$music.artist}{$music.createddate|date_format}
- -
-{$pager} -{else} -

No Music available.

-{/if} diff --git a/www/templates/omicron/views/admin/nzb-export.tpl b/www/templates/omicron/views/admin/nzb-export.tpl deleted file mode 100644 index 97e2a90aa..000000000 --- a/www/templates/omicron/views/admin/nzb-export.tpl +++ /dev/null @@ -1,66 +0,0 @@ - -

{$page->title}

- -

-Export nzbs from the system into a folder. Specify the full file path to a folder. -
-If you are exporting a large number of nzb files, run this script from the command line and pass in the folder path as the first argument. e.g. php scriptname outputpath from(optional) to(optional) groupid(optional use -1) categoryid(optional)
- - php admin/nzb-export.php /path/to/export/into 01/01/2008 01/01/2010 -1 1050 - - -

- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
Windows file paths should be specified with forward slashes e.g. c:/temp/
-
: - - - -
Posted to usenet inbetween a date range specified in the format dd/mm/yyyy
-
: - {html_options id="group" name='group' options=$grouplist selected=$group} -
Posted to this newsgroup
-
: - {html_options id="categoryid" name='categoryid' options=$catlist selected=$cat} -
Posted to this category
-
- -
- -
- -
-{$output} -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/nzb-import.tpl b/www/templates/omicron/views/admin/nzb-import.tpl deleted file mode 100644 index e15c29352..000000000 --- a/www/templates/omicron/views/admin/nzb-import.tpl +++ /dev/null @@ -1,74 +0,0 @@ -

{$page->title}

-

- Import NZB's from a folder or via the browser into the system. Specify the full file path to a folder containing NZB's. -
- Importing will add the release to your database, compress the NZB and store it in the nzbfiles/ folder. -

- -
- Import From Directory -
- - - - - - - - - - - - - - - - - -
- -
Windows file paths should be specified with forward slashes e.g. c:/temp/
-
- -
Use the NZB's filename as the release name. Else the name inside the NZB will be used.
-
- -
Delete the NZB when we have successfully imported it?
-
- -
-
-
-
- Import From Browser -
- - - - - - - - - -
- -
Select one or more .nzb files.
-
- These NZBs will not be deleted once imported.
- -
-
-{if $output != ""} -
- -

Import Results

- {$output} -
-{/if} \ No newline at end of file diff --git a/www/templates/omicron/views/admin/preview-list.tpl b/www/templates/omicron/views/admin/preview-list.tpl deleted file mode 100644 index bf1233800..000000000 --- a/www/templates/omicron/views/admin/preview-list.tpl +++ /dev/null @@ -1,43 +0,0 @@ -

{$page->title}

- - - -

- -{if $releaselist} -{$pager} - - - - - - - - - {foreach from=$releaselist item=release} - - - - - {/foreach} - -
previewoptions
- -
- {$release.searchname|escape:"htmlall"|wordwrap:75:"\n":true} -
-
- {$pager} -{else} -

No results.

-{/if} diff --git a/www/templates/omicron/views/admin/rage-edit.tpl b/www/templates/omicron/views/admin/rage-edit.tpl deleted file mode 100644 index bfc1a009e..000000000 --- a/www/templates/omicron/views/admin/rage-edit.tpl +++ /dev/null @@ -1,87 +0,0 @@ - -

{$page->title}

- -Update from TV Rage - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - - -
The numeric TVRage Id.
-
: - -
The title of the TV show.
-
: - -
: - -
The genres for the TV show. Separated by pipes ( | )
-
: - -
The country for the TV show.
-
: - {if $rage.imgdata != ""} - - {/if} - -
Shown in the TV series view page.
-
- -   - -
- - - - \ No newline at end of file diff --git a/www/templates/omicron/views/admin/rage-list.tpl b/www/templates/omicron/views/admin/rage-list.tpl deleted file mode 100644 index 1fd3031bc..000000000 --- a/www/templates/omicron/views/admin/rage-list.tpl +++ /dev/null @@ -1,44 +0,0 @@ -

{$page->title}

- -{if $tvragelist} - -
- -
- - -    - -
-
- -{$pager} - -

- - - - - - - - - - - {foreach from=$tvragelist item=tvrage} - - - - - - - {/foreach} - -
rageidtitledateoptions
{$tvrage.rageid}{$tvrage.releasetitle|escape:"htmlall"}{$tvrage.createddate|date_format}delete | remove
- -
- {$pager} - -{else} -

No TVRage episodes available.

-{/if} diff --git a/www/templates/omicron/views/admin/rage-remove.tpl b/www/templates/omicron/views/admin/rage-remove.tpl deleted file mode 100644 index 9f31ea123..000000000 --- a/www/templates/omicron/views/admin/rage-remove.tpl +++ /dev/null @@ -1,4 +0,0 @@ - -

{$page->title}

- -Removed rageid from {$numtv} releases. \ No newline at end of file diff --git a/www/templates/omicron/views/admin/regex-edit.tpl b/www/templates/omicron/views/admin/regex-edit.tpl deleted file mode 100644 index b7f16e775..000000000 --- a/www/templates/omicron/views/admin/regex-edit.tpl +++ /dev/null @@ -1,78 +0,0 @@ - -

{$page->title}

- -{if $regex.id > 0 && $regex.id < 100000 && $site->reqidurl != ""} -
Warning: Editing system regex, these changes will be overwritten next update releases.
-{/if} - -{if $error != ''} -
{$error}
-{/if} - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Group: - - -
The full name of a valid newsgroup. This value can be a regular expression. Use .* to apply regex to all newsgroups.
-
Regex: - -
The regex to be applied.
- Regex requires at least 1 named capturing group in the form of (?P<name>) to work.
- If the subjects contains the number of parts (ie [1/10]) then it is wise to also use (?P<parts>) to match the parts. -
-
Description: - -
A description for this regex
-
: - {html_options id="category" name=category options=$catlist selected=$regex.categoryid} -
If this regex indicates the release category then supply it here. If left blank the standard method of determining the category will apply.
-
Ordinal: - -
The zero-based order in which the regex should be applied.
-
: - {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$regex.status separator='
'} -
Only active regexes are applied during the release process.
-
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/regex-list.tpl b/www/templates/omicron/views/admin/regex-list.tpl deleted file mode 100644 index 63a2f3e6c..000000000 --- a/www/templates/omicron/views/admin/regex-list.tpl +++ /dev/null @@ -1,51 +0,0 @@ - -

{$page->title}

- -

- Regexs are applied to group message subjects into releases. The capture groups are named to hold the release name and number of parts. - They are applied to messages from that group in order, then any general regexs are applied in order afterwards. -

-

- The group name is a regular expression, so if you want to apply a regex to a number of groups then append an asterix a.b.blah.* to the end, -
or use a.b.group1|a.b.group2 -

- -
msg
- -{html_options id="regexGroupSelect" name=category options=$reggrouplist selected=$selectedgroup} - - - - - - - - - - - - - - - - - - {foreach from=$regexlist item=regex} - - - - - - - - - - - - - - {/foreach} - - -
idgroupregexpostercategorystatusreleaseslast matchordinalOrderOptions
{$regex.id}{if $regex.groupname==""}all{else}{$regex.groupname|replace:"alt.binaries":"a.b"}{/if}{$regex.regex|escape:html}
- {$regex.description}
{$regex.poster}{if $regex.categoryid!=""}{$regex.categoryTitle}{/if}{if $regex.status==1}active{else}disabled{/if}{$regex.num_releases}{$regex.max_releasedate}{$regex.ordinal}up | downdelete{if $regex.groupname != ""} | test{/if}
diff --git a/www/templates/omicron/views/admin/regex-submit.tpl b/www/templates/omicron/views/admin/regex-submit.tpl deleted file mode 100644 index 76e6b8c53..000000000 --- a/www/templates/omicron/views/admin/regex-submit.tpl +++ /dev/null @@ -1,38 +0,0 @@ - -

{$page->title}

- -

Use this feature to submit any regex you have added locally to newznab. We'll have a look at integrating them into the master list. No data other than regex's with an id greater than 10000 will be sent.

- -{if $upload_status eq 'OK'} -
- Your regexes were uploaded. Thank you for contributing. -
-
-{/if} - -{if $upload_status eq 'BAD'} -
- Failed to upload your regexes :-( - please try again. -
-
-{/if} - -{if $regex_error} -

No avalible user regex's. Please add some and visit this page again.

-{else} -
- - -
- -
- -

- Regexes to be submitted: -
-

-  {$regex_contents|print_r}
-  
-

-{/if} - diff --git a/www/templates/omicron/views/admin/regex-test.tpl b/www/templates/omicron/views/admin/regex-test.tpl deleted file mode 100644 index 63e58ac77..000000000 --- a/www/templates/omicron/views/admin/regex-test.tpl +++ /dev/null @@ -1,146 +0,0 @@ - -

{$page->title}

- -{if $error != ''} -
{$error}
-{/if} - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - - or - -
: - -
: - -
- -
- -
-      Add Regex -
- -
- -{if $matches} -{$pager} - - {foreach from=$matches item=match} - - {if $match@iteration mod 10 == 1} - - - - - - - - - - - {/if} - - - - - {/foreach} - -
nameposterBin CountBin SizeRegex idReq idGroupAge
- - - - - - - - - - - - - - -
{$match.name|escape:html}
{$match.bininfo[0].name|escape:html}
{$match.catname|escape:"htmlall"}{$match.bininfo[0].fromname|escape:"htmlall"}{$match.bincount}{if $match.reltotalparts != ''}/{$match.reltotalparts}{/if}{$match.totalsize|fsize_format:"MB"}{$match.bininfo[0].regexid}{$match.reqid}{$match.bininfo[0].groupname|replace:"alt.binaries":"a.b"}{$match.bininfo[0].date|timeago}
-
-
{$pager} -{/if} - -

 

- -

Fetch Binaries for Testing

- -
- - - - - - - - - - - - - - - - - - - - - - - -
: - - or - -
- -
- -
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/release-edit.tpl b/www/templates/omicron/views/admin/release-edit.tpl deleted file mode 100644 index 6f4f32260..000000000 --- a/www/templates/omicron/views/admin/release-edit.tpl +++ /dev/null @@ -1,162 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - -{if $updatename != ""} - - - - -{/if} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - - -
: - -
- -
: - -
: - {html_options id="category" name=category options=$catlist selected=$release.categoryid} -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
Group: - {$release.group_name} -
Regex id: - {$release.regexid} -
: - -
: - -
: - -
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/release-files.tpl b/www/templates/omicron/views/admin/release-files.tpl deleted file mode 100644 index 28a332b42..000000000 --- a/www/templates/omicron/views/admin/release-files.tpl +++ /dev/null @@ -1,24 +0,0 @@ - -

{$page->title}

- -

For {$rel.searchname|escape:'htmlall'}

- - - - - - - - - - - {foreach from=$binaries item=binary} - - - - - - - {/foreach} - -
#filenamesizedate
{$binary.relpart}{$binary.filename}{$binary.size|fsize_format:"MB"}{$binary.date|date_format}
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/release-list.tpl b/www/templates/omicron/views/admin/release-list.tpl deleted file mode 100644 index 326cf67c5..000000000 --- a/www/templates/omicron/views/admin/release-list.tpl +++ /dev/null @@ -1,37 +0,0 @@ -

{$page->title}

- -{if $releaselist} -{$pager} - - - - - - - - - - - - - - - {foreach from=$releaselist item=release} - - - - - - - - - - - {/foreach} - -
namecategorysizefilespostdateadddategrabsoptions
{$release.searchname|escape:"htmlall"|wordwrap:75:"\n":true}{$release.category_name}{$release.size|fsize_format:"MB"}{$release.totalpart}{$release.postdate|date_format}{$release.adddate|date_format}{$release.grabs}delete
-
- {$pager} -{else} -

No releases available.

-{/if} diff --git a/www/templates/omicron/views/admin/release_naming_regexes-edit.tpl b/www/templates/omicron/views/admin/release_naming_regexes-edit.tpl deleted file mode 100644 index b07883983..000000000 --- a/www/templates/omicron/views/admin/release_naming_regexes-edit.tpl +++ /dev/null @@ -1,71 +0,0 @@ -

{$page->title}

-{if $error != ''} -
{$error}
-{/if} -
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- Regex to match against a group or multiple groups.
- Delimiters are already added, and PCRE_CASELESS is added after for case insensitivity.
> - An example of matching a single group: alt\.binaries\.example
- An example of matching multiple groups: alt\.binaries.* -
-
- -
- The regex to use when trying to name a release using the usenet subject.
- The regex delimiters are not added, you MUST add them. See this page.
- To make the regex case insensitive, add i after the last delimiter.
- You MUST include at least one regex capture group.
- You MUST name your regex capture groups (the ones you want included).
- The named capture groups will be concatenated into a string.
- Capture groups are sorted alphabetically (by capture group name) when concatenating the string.
- Capture groups named 'reqid' and 'parts' are ignored. -
-
- -
- Description for this regex.
- You can include an example usenet subject this regex would match on. -
-
- -
- The order to run this regex in.
- Must be a number, 0 or higher.
- If multiple regex have the same ordinal, MySQL will randomly sort them. -
-
- {html_radios id="status" name='status' values=$status_ids output=$status_names selected=$regex.status separator='
'} -
Only active regex are used during the collection matching process.
-
- -
-
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/release_naming_regexes-list.tpl b/www/templates/omicron/views/admin/release_naming_regexes-list.tpl deleted file mode 100644 index bb68e3da1..000000000 --- a/www/templates/omicron/views/admin/release_naming_regexes-list.tpl +++ /dev/null @@ -1,43 +0,0 @@ -

{$page->title}

-

This page lists regex used for getting names for releases from usenet subjects.

-
- -
- - -    - -
-{if $regex} - -
{$pager}
- - - - - - - - - - - - {foreach from=$regex item=row} - - - - - - - - {if $row.status==1} - - {else} - - {/if} - - - {/foreach} -
idgroupeditdescriptiondeleteordinalstatusregex
{$row.id}{$row.group_regex}Edit{$row.description|truncate:50:"...":true}Delete{$row.ordinal}ActiveDisabled{$row.regex|escape:html|truncate:50:"...":true}
-
{$pager}
-{/if} \ No newline at end of file diff --git a/www/templates/omicron/views/admin/release_naming_regexes-test.tpl b/www/templates/omicron/views/admin/release_naming_regexes-test.tpl deleted file mode 100644 index 6587ae2b5..000000000 --- a/www/templates/omicron/views/admin/release_naming_regexes-test.tpl +++ /dev/null @@ -1,35 +0,0 @@ -

{$page->title}

-

This page is used for testing regex for getting release names from usenet subject. -
Maximum releases to display will limit the amount of results displayed on the page. 0 for no limit. -
Query limit will limit the amount of releases to select from MySQL (setting this high can be very slow). 0 for no limit. -

- -
- -
- -
- -
- -
- -
-{if $data} - - - - - - - - {foreach from=$data key=id item=names} - - - - - - - {/foreach} -
Release idUsenet SubjectOld Search NameNew Search Name
{$id}{$names.subject}{$names.old_name}{$names.new_name}
-{/if} \ No newline at end of file diff --git a/www/templates/omicron/views/admin/role-edit.tpl b/www/templates/omicron/views/admin/role-edit.tpl deleted file mode 100644 index c0ed1e6cb..000000000 --- a/www/templates/omicron/views/admin/role-edit.tpl +++ /dev/null @@ -1,92 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{if $role.id != ''} - - - - - - - - - - -{/if} - - - - - - -
Name: - - {if $role.id != '' && $role.id < 4}{$role.name}{else}
The name of the role
{/if} -
Api Requests: - -
Number of api requests allowed per 24 hour period
-
Download Requests: - -
Number of downloads allowed per 24 hour period
-
Invites: - -
Default number of invites to give users on account creation
-
Can Preview: - {html_radios id="canpreview" name='canpreview' values=$yesno_ids output=$yesno_names selected=$role.canpreview separator='
'} -
Whether the role can preview screenshots
-
Can Pre: - {html_radios id="canpre" name='canpre' values=$yesno_ids output=$yesno_names selected=$role.canpre separator='
'} -
Whether the role can view pre data
-
Hide Ads: - {html_radios id="hidetads" name='hidetads' values=$yesno_ids output=$yesno_names selected=$role.hideads separator='
'} -
Whether ad's are hidden
-
Is Default Role: - {html_radios id="role" name='isdefault' values=$yesno_ids output=$yesno_names selected=$role.isdefault separator='
'} -
Make this the default role for new users
-
Excluded Categories - {html_options style="height:105px;" multiple=multiple name="exccat[]" options=$catlist selected=$roleexccat} -
Use Ctrl and click to exclude multiple categories. This will prevent users with this role from
seeing these categories in the menu or search results.
-
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/role-list.tpl b/www/templates/omicron/views/admin/role-list.tpl deleted file mode 100644 index bff3a392d..000000000 --- a/www/templates/omicron/views/admin/role-list.tpl +++ /dev/null @@ -1,34 +0,0 @@ - -

{$page->title}

- - - - - - - - - - - - - - - - - {foreach from=$userroles item=role} - - - - - - - - - - - - {/foreach} - - -
namerequest limitdownload limitinvitescan previewcan prehide adsdefault rolesoptions
{$role.name}{$role.apirequests}{$role.downloadrequests}{$role.defaultinvites}{if $role.canpreview == 1}Yes{else}No{/if}{if $role.canpre == 1}Yes{else}No{/if}{if $role.hideads == 1}Yes{else}No{/if}{if $role.isdefault=="1"}Yes{else}No{/if}edit {if $role.id>"3"}delete{/if}
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/sharing.tpl b/www/templates/omicron/views/admin/sharing.tpl deleted file mode 100644 index 20b30931d..000000000 --- a/www/templates/omicron/views/admin/sharing.tpl +++ /dev/null @@ -1,197 +0,0 @@ -

{$page->title}

-
- - - Note: If you are running nntpproxy you will not be able to upload comments, turn off the post option if you are using it.
- If you turn on or off the Alternate NNTP provider you will need to click the reset button to reset sharing settings. -
-
-
-
msg
- {if $local} -
-
- Local sharing settings. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
This is your site name, changing this will update other sites running sharing also, it must not contain spaces (use underscores _).
-
- -
This is how many comments to upload per run (the more you increase this, the longer it takes).
-
- -
This is how many comments to download per run.
-
- -
This is how many headers to download and look through for comments per run.
-
-
- - {if $local.enabled == "1"} - - {else} - - {/if} - - Is the sharing/retrieving enabled? This overrides posting/fetching. -
-
-
- - {if $local.posting == "1"} - - {else} - - {/if} - - If you turn this on, this will post your comments to usenet.
- This requires posting rights to usenet! -
-
-
- - {if $local.fetching == "1"} - - {else} - - {/if} - - If you turn this on, this will download comments from usenet. -
-
-
- - {if $local.auto_enable == "1"} - - {else} - - {/if} - - This will auto-enable new sites as we see them. -
-
-
- - {if $local.hide_users == "1"} - - {else} - - {/if} - - This will hide user names from being visible on remote sites. -
-
-
- - {if $local.start_position == "1"} - - {else} - - {/if} - - When pulling the first time, or after resetting, start from the beginning of the group (takes more time).
- With the backfill setting it will take a few runs before you find anything the first time because the group has articles other than comments in it. -
-
-
- - - - This will reset your sharing settings (if you need to change Usenet Provider for example). -
-
-
- -
-
- {else} -

You have not run Sharing yet, until you run it this page will contain no settings.

- {/if} - - {if $sites} -
These are the remote websites we have seen so far:
- {$pager} -
- - -
- - - - - - - - - - - {foreach from=$sites item=site} - - - - - - - - - - {/foreach} -
idNameFirst seenLast seenStatusComments
{$site.id}{$site.site_name}{$site.first_time|timeago}{$site.last_time|timeago} - {if $site.enabled=="1"} - - {else} - - {/if} - {$site.comments} - -
- {$pager} - {else} -

No remote sites found in your database.

- {/if} -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/site-debug.tpl b/www/templates/omicron/views/admin/site-debug.tpl deleted file mode 100644 index a1cd54fa7..000000000 --- a/www/templates/omicron/views/admin/site-debug.tpl +++ /dev/null @@ -1,20 +0,0 @@ -

{$page->title}

- -

Below is a dump of system settings and mysql table status to assist others in debuging problems. -Items like private 3rd party keys have been removed, however *note* full paths to binaries and web files -are included - so exercise caution when pasting online.

- - - -
- diff --git a/www/templates/omicron/views/admin/site-edit.tpl b/www/templates/omicron/views/admin/site-edit.tpl deleted file mode 100644 index 3aa76205a..000000000 --- a/www/templates/omicron/views/admin/site-edit.tpl +++ /dev/null @@ -1,1695 +0,0 @@ -

{$page->title}

- -
- -{if $error != ''} -
{$error}
-{/if} - -
-Main Site Settings, HTML Layout, Tags - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
Displayed around the site and contact form as the name for the site.
-
: - -
Displayed in the header on every public page.
-
: - -
Stem meta-tag appended to all page title tags.
-
: - -
Stem meta-description appended to all page meta description tags.
-
: - -
Stem meta-keywords appended to all page meta keyword tags.
-
: - -
Displayed in the footer section of every public page.
-
: - -
The relative path to a the landing page shown when a user logs in, or clicks the home link.
-
: - - -
A just for fun value shown in debug and not on public pages.
-
- -
The absolute path to the place covers will be stored.
-
: - {html_options class="siteeditstyle" id="style" name='style' values=$themelist output=$themelist selected=$fsite->style} -
The theme folder which will be loaded for css and images and overriden templates.
-
: - {html_radios id="userselstyle" name='userselstyle' values=$yesno_ids output=$yesno_names selected=$fsite->userselstyle separator='
'} -
Should users be allowed to change their site theme or not..
-
: - -
Optional URL to prepend to external links
-
: - {html_radios id="apienabled" name='apienabled' values=$yesno_ids output=$yesno_names selected=$fsite->apienabled separator='
'} -
Whether access to the site via the API is enabled.
-
: - -
The number of recent forum posts to show in the 'recent forum posts' widget. Set to 0 to disable.
-
: - -
Shown in the contact us page, and where the contact html form is sent to.
-
: - -
Text displayed in the terms and conditions page.
-
-
- -
-Google Adsense, Analytics and 3rd Party Banners - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
e.g. UA-xxxxxx-x
-
: - -
e.g. pub-123123123123123
-
: - -
The id of the google search ad panel displayed at the bottom of the left menu.
-
: - -
The banner slot in the header.
-
: - -
The banner slot in the header.
-
: - -
The banner slot in the release details view.
-
-
- - -
-3rd Party API Keys - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
The api key used for access to tmdb
-
: - -
The api key used for access to rotten tomatoes
-
: - -
The amazon public api key. Used for cover lookups.
-
: - -
The amazon private api key. Used for cover lookups.
-
: - -
The amazon associate tag. Used for cover lookups.
-
- -
The Trakt.tv API v2 Client ID (SHA256 hash - 64 characters long string). Used for movie and tv lookups.
-
- - -
The Fanart.tv api key. Used for Fanart.tv lookups. Fanart.tv would appreciate it if - you use this service to help them out by adding high quality images not already available on TMDB. -
-
- - -
The giantbomb key. Used for game lookups.
-
- - -
The Anidb api key. Used for Anime lookups.
-
-
- -
-3rd Party Application Paths - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
The path to an unrar binary, used in deep password detection and media info grabbing. -
Use forward slashes in windows c:/path/to/unrar.exe
-
: - -
The path to where unrar puts files. WARNING: This directory will have its contents deleted. -
Use forward slashes in windows c:/temp/path/stuff/will/be/unpacked/to
-
: - -
The path to the mediainfo binary. Used for deep file media analysis. Use empty path to disable mediainfo checks -
Use forward slashes in windows c:/path/to/mediainfo.exe
-
- -
The path to the ffmpeg or avconv binary. Used for making thumbnails and video/audio - previews. -
Use forward slashes in windows c:/path/to/ffmpeg.exe -
-
: - -
The path to the lame binary. Used for audio manipulation. -
Use forward slashes in windows c:/path/to/lame.exe
-
- - -
The path to the 7za/p7zip in Ubuntu 13.10 (7zip command line in windows) binary, used - for grabbing nfos from compressed zip files. -
Use forward slashes in windows c:/path/to/7z.exe -
-
- -
The path to the timeout binary. - This is used to limit the amount of time unrar/7zip/mediainfo/ffmpeg/avconv can run. - You can the time limit in the process additional section. - You can leave this empty to disable this. -
Use forward slashes in windows c:/path/to/timeout.exe -
-
- -
Path to magic number database. Windows' users should set this if they have installed GNUWin file. *nix users can optionally set this to a file of their choice.
-
-
- - -
- Download Queue Integration Settings - - - - - - - - - - - - - - - - -
: - {html_radios id="sabintegrationtype" name='sabintegrationtype' values=$sabintegrationtype_ids output=$sabintegrationtype_names selected=$fsite->sabintegrationtype separator='
'} -
Whether to allow integration with a SAB/NZBGet install and if so what type of integration
-
: - -
The downloads/complete folder for a local sab install, for example: /var/www/sab/downloads/complete
-
: - -
A url to a hosted virtual directory pointing to the sab downloads/complete folder, e.g. http://server/complete
-
- -
- SABnzbd - - - - - - - - - - - - - - - - - - - - - - -
: - -
The url of the SAB installation, for example: http://localhost:8080/sabnzbd/
-
: - -
The Api key of the SAB installation. Can be the full api key or the nzb api key (as of SAB 0.6)
-
: - {html_radios id="sabapikeytype" name='sabapikeytype' values=$sabapikeytype_ids output=$sabapikeytype_names selected=$fsite->sabapikeytype separator='
'} -
Select the type of api key you entered in the above setting
-
: - {html_options id="sabpriority" name='sabpriority' values=$sabpriority_ids output=$sabpriority_names selected=$fsite->sabpriority} -
Set the priority level for NZBs that are added to your queue
-
-
- - -
- NZBGet - - - - - - - - - - - - - - - - - -
: - -
The url of the NZBGet installation, for example: http://localhost:6789/
-
: - -
The NZBGet ControlUsername e.g. nzbget
-
: - -
The NZBGet ControlPassword e.g. tegbzn6789
-
-
- -
- - -
-Usenet Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
The directory where nzb files will be stored.
-
- -
Levels deep to store the nzb Files. -
If you change this you must run the misc/testing/DB/nzb-reorg.php script! -
-
: - -
The number of days binary and part data will be retained for use in raw search and release formation.
-
: - -
The number of days releases will be retained for use throughout site. Set to 0 to disable.
-
- -
The number of hours releases categorized as Misc->Other will be retained. Set to 0 to disable.
-
- -
The number of hours releases categorized as Misc->Hashed will be retained. Set to 0 to disable.
-
: - -
Default is 0 (off), which will remove parts in one go. If backfilling or importing and parts table is large, using chunks of 5000+ will speed up removal. Normal indexing is fastest with this setting at 0.
-
: - -
The minimum number of files to make a release. i.e. if set to two, then releases which only contain one file will not be created.
-
: - -
The minimum total size in bytes to make a release. If set to 0, then ignored.
-
- -
The maximum total size in bytes to make a release. If set to 0, then ignored. Only deletes - during release creation. -
-
: - -
The minimum completion percent to make a release. i.e. if set to 97, then releases under 97% completion will not be created. If set to 0, then ignored.
-
- {html_radios id="grabstatus" name='grabstatus' values=$yesno_ids output=$yesno_names selected=$fsite->grabstatus separator='
'} -
Whether to update download counts when someone downloads a release.
-
- -
The time in hours to check for crossposted releases - this will delete 1 of the releases if the 2 are posted by the same person in the same time period.
-
: - {html_radios id="removespam" name='removespam' values=$yesno_ids output=$yesno_names selected=$fsite->removespam separator='
'} -
Find and remove spam after each update. An inexact science which uses a few methods to identify virus/spam posts.
-
: - -
Which categories to permit .exe files. Requires unrar inner file checking to be enabled.
-
: - {html_radios id="updateparsing" name='updateparsing' values=$yesno_ids output=$yesno_names selected=$fsite->updateparsing separator='
'} -
Update Parsing is a mechanism to decode names using various techniques.
-
: - {html_radios id="updatecleanup" name='updatecleanup' values=$yesno_ids output=$yesno_names selected=$fsite->updatecleanup separator='
'} -
Update Cleanup is a general mechanism for deleting and moving unwanted items into misc>other.
-
: - {html_radios id="removespecial" name='removespecial' values=$yesno_ids output=$yesno_names selected=$fsite->removespecial separator='
'} -
Remove Special is a general mechanism for removing erroneous characters from release names.
-
: - {html_radios id="compressedheaders" name='compressedheaders' values=$yesno_ids output=$yesno_names selected=$fsite->compressedheaders separator='
'} -
Some servers allow headers to be sent over in a compressed format. If enabled this will use much less bandwidth, but processing times may increase.
-
: - -
The maximum number of messages to fetch at a time from the server.
-
: - -
The maximum number of messages to process for a group in one run of update_binaries.
-
: - {html_radios id="newgroupscanmethod" name='newgroupscanmethod' values=$yesno_ids output=$newgroupscan_names selected=$fsite->newgroupscanmethod separator='
'} - Days or - Posts
-
Scan back X (posts/days) for each new group? Can backfill to scan further.
-
- - -
The target date for safe backfill. Format: YYYY-MM-DD
-
- {html_radios id="disablebackfillgroup" name='disablebackfillgroup' values=$yesno_ids output=$yesno_names selected=$fsite->disablebackfillgroup separator='
'} -
Whether to disable a group automatically during backfill if the target date has been reached.
-
-
- -
-Lookup Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
The url to use to translate allfilled style reqid usenet posts into real release titles. Leave blank to not perform lookup.
-
- {html_options style="width:180px;" id="lookuptvrage" name='lookuptvrage' values=$lookuptv_ids output=$lookuptv_names selected=$site->lookuptvrage} -
Whether to attempt to lookup TvRage ids on the web.
-
: - {html_radios id="lookupthetvdb" name='lookupthetvdb' values=$yesno_ids output=$yesno_names selected=$fsite->lookupthetvdb separator='
'} -
Whether to attempt to lookup addidional series information from TheTVDB when processing binaries.
-
- {html_options_multiple id="book_reqids" name='book_reqids' values=$book_reqids_ids output=$book_reqids_names selected=$book_reqids_selected} -
Categories of Books to lookup information for (only work if Lookup Books is set to yes).
-
- {html_options style="width:180px;" id="lookupimdb" name='lookupimdb' values=$lookupmovies_ids output=$lookupmovies_names selected=$fsite->lookupimdb} -
Whether to attempt to lookup film information from IMDB or TheMovieDB.
-
: - {html_radios id="lookupanidb" name='lookupanidb' values=$yesno_ids output=$yesno_names selected=$fsite->lookupanidb separator='
'} -
Whether to attempt to lookup anime information from AniDB when processing binaries.
-
- {html_options style="width:180px;" id="lookupmusic" name='lookupmusic' values=$lookupmusic_ids output=$lookupmusic_names selected=$fsite->lookupmusic} -
Whether to attempt to lookup music information from Amazon.
-
- {html_options style="width:180px;" id="lookupgames" name='lookupgames' values=$lookupgames_ids output=$lookupgames_names selected=$fsite->lookupgames} -
Whether to attempt to lookup game information from Amazon.
-
: - {html_radios id="lookupxxx" name='lookupxxx' values=$yesno_ids output=$yesno_names selected=$fsite->lookupxxx separator='
'} -
Whether to attempt to lookup XXX information when processing binaries.
-
- - -
The maximum amount of XXX to process per run. This does not use an NNTP - connection or query Amazon. -
-
- {html_options style="width:180px;" id="lookupbooks" name='lookupbooks' values=$lookupbooks_ids output=$lookupbooks_names selected=$fsite->lookupbooks} -
Whether to attempt to lookup book information from Amazon.
-
: - {html_options id="lookuplanguage" name='lookuplanguage' values=$lookuplanguage_iso output=$lookuplanguage_names selected=$fsite->lookuplanguage} -
Preferred language for scraping external sources.
-
: - {html_radios id="saveaudiopreview" name='saveaudiopreview' values=$yesno_ids output=$yesno_names selected=$fsite->saveaudiopreview separator='
'} -
Whether to save a preview of an audio release (requires deep rar inspection enabled).
It is advisable to specify a path to the lame binary to reduce the size of audio previews.
-
: - -
Delete any audio previews older than this number of days.
-
-
-
- Language/Categorization options - - - - - - - - - -
- {html_radios id="categorizeforeign" name='categorizeforeign' values=$yesno_ids output=$yesno_names selected=$fsite->categorizeforeign separator='
'} -
Whether to send foreign movies/tv to - foreign sections or not. If set to true they will go in foreign categories. -
-
- {html_radios id="catwebdl" name='catwebdl' values=$yesno_ids output=$yesno_names selected=$fsite->catwebdl separator='
'} -
Whether to send WEB-DL to the WEB-DL section or not. If set to true they will go in - WEB-DL category, false will send them in HD TV.
This will also make them inaccessible to - Sickbeard and possibly Couchpotato. -
-
-
- -
-Password Settings - - - - - - - - - - - - - - - - - - - - - - - -
: - {html_radios id="checkpasswordedrar" name='checkpasswordedrar' values=$passwd_ids output=$passwd_names selected=$fsite->checkpasswordedrar separator='
'} -
Whether to attempt to peek into every release, to see if rar files are password protected.
-
- {html_radios id="fetchlastcompressedfiles" name='fetchlastcompressedfiles' values=$yesno_ids output=$yesno_names selected=$fsite->fetchlastcompressedfiles separator='
'} -
Try to download the last rar or zip file? (This is good if most of the files are at the end.) Note: The first rar/zip is still downloaded. -
-
: - {html_radios id="deletepasswordedrelease" name='deletepasswordedrelease' values=$yesno_ids output=$yesno_names selected=$fsite->deletepasswordedrelease separator='
'} -
Whether to delete releases which are passworded or potentially passworded.
-
- {html_radios id="deletepossiblerelease" name='deletepossiblerelease' values=$yesno_ids output=$yesno_names selected=$fsite->deletepossiblerelease separator='
'} -
Whether to delete releases which are potentially passworded. This applies to your post process additional inner file blacklist.
-
: - {html_options id="showpasswordedrelease" name='showpasswordedrelease' values=$passworded_ids output=$passworded_names selected=$fsite->showpasswordedrelease} -
Whether to show passworded or potentially passworded releases in browse, search, api and rss - feeds. Potentially passworded means releases which contain .cab or .ace files which are - typically password protected. (*yes): Unprocessed releases are hidden. (*no): Unprocessed releases are displayed. -
-
-
- -
-nzpre Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
Group to search when looking up nzpre posts.
-
: - -
Subject line. eg. This is an nzpre post!
-
: - -
Full poster field. eg. tester test@test.com
-
: - -
Which header field to parse.
-
: - -
Number of articles to parse when updating.
-
: - -
Key to decode.
-
-
- -
-Spotnab Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - {html_radios id="spotnabpost" name='spotnabpost' values=$yesno_ids output=$yesno_names selected=$fsite->spotnabpost separator='
'} -
If enabled, encrypted comments from this site will be uploaded using the spotnab protocol. These will be shared with others participating Newznab sites. Set up Spotnab sources here or use Auto Discovery.
-
: - {html_radios id="spotnabbroadcast" name='spotnabbroadcast' values=$yesno_ids output=$yesno_names selected=$fsite->spotnabbroadcast separator='
'} -
If enabled, a broadcast packet will be uploaded every month, so that other participating Newznab sites can automatically subscribe to your comments.
-
: - {html_radios id="spotnabdiscover" name='spotnabdiscover' values=$yesno_ids output=$yesno_names selected=$fsite->spotnabdiscover separator='
'} -
If enabled, other participating Newznab sites will be added automatically (as inactive) to your sources list.
-
: - {html_radios id="spotnabprivacy" name='spotnabprivacy' values=$yesno_ids output=$yesno_names selected=$fsite->spotnabprivacy separator='
'} -
If enabled, uploaded comments use a unique (made up) username.
-
: - {html_radios id="spotnabautoenable" name='spotnabautoenable' values=$yesno_ids output=$yesno_names selected=$fsite->spotnabautoenable separator='
'} -
If enabled, newly discovered Spotnab sources will be enabled by default.
-
: - -
The username part used for posting. eg nntp
-
: - -
The email part used for posting. eg spot@nntp.com
-
: - -
The group where posts are uploaded. eg alt.binaries.backup
-
: - -
Public key other sites will use to decrypt comments.
-
- -
Private key used to encrypt comments before uploading.
-
-
- -
- IMDB.com URL - - - - - -
- {html_options style="width:180px;" class="imdburl" id="imdburl" name='imdburl' values=$imdb_urls output=$imdburl_names selected=$fsite->imdburl} -
Akas.imdb.com returns titles in their original title, imdb.com returns titles based on - your IP address (if you are in france, you will get french titles). -
-
-
- -
- Usenet Settings - - - - - - - - - - - - - - - - - - - - - - -
- - -
The maximum size in gigabytes to postprocess a release. If set to 0, then ignored. -
-
- -
The minimum size in megabytes to post process (additional) a release. If set to 0, then ignored.
-
- {html_radios id="lookuppar2" name='lookuppar2' values=$yesno_ids output=$yesno_names selected=$fsite->lookuppar2 separator='
'} -
Whether to attempt to find a better name for releases in misc->other using the PAR2 - file.
NOTE: this can be slow depending on the group!
-
- {html_radios id="addpar2" name='addpar2' values=$yesno_ids output=$yesno_names selected=$fsite->addpar2 separator='
'} -
When going through PAR2 files, add them to the RAR file content list of the NZB.
-
-
- -
- Advanced Settings - For advanced users - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_radios id="tablepergroup" name='tablepergroup' values=$yesno_ids output=$yesno_names selected=$fsite->tablepergroup separator='
'} -
This uses separate tables for binaries and parts for each group.
This - requires you to run convert_to_tpg.php or reset_truncate.php.
This requires that you also run - .../misc/update/nix/multiprocessing/releases.php (tmux does this automatically). -
Run: show variables like '%open%files%'; results should be higher than 10k, twice that if you - are using TokuDB.; -
You may need to increase table_open_cache, open_files_limit and max_allowed_packet in - my.cnf. Also, you may need to add the following to /etc/security/limits.conf
mysql soft - nofile 24000
mysql hard nofile 32000
-
-
- -
The maximum amount of NZB files to create on stage 5 at a time in update_releases. If more are to be created it will loop stage 5 until none remain.
-
- {html_radios id="partrepair" name='partrepair' values=$yesno_ids output=$yesno_names selected=$fsite->partrepair separator='
'} -
Whether to attempt to repair parts or not, increases backfill/binaries updating - time. -
-
- {html_radios id="safepartrepair" name='safepartrepair' values=$yesno_ids output=$yesno_names selected=$fsite->safepartrepair separator='
'} -
Whether to put unreceived parts into partrepair table when running binaries(safe) or backfill scripts.
-
- -
The maximum amount of articles to attempt to repair at a time. If you notice that you - are getting a lot of parts into the partrepair table, it is possible that you USP is not keeping up - with the requests. Try to reduce the threads to safe scripts, stop using safe scripts or stop using - nntpproxy until improves. Ar least until the cause can be determined. -
-
- -
Maximum amount of times to try part repair.
-
- - -
- Leaving this empty will use PHP to decode yEnc, which is slow. -
Putting the path to yydecode will use yydecode, which is faster than PHP. Download yydecode - on sourceforce. -
Putting in simple_php_yenc_decode will use that - extension which is even faster (you must have the extension). View - simple_php_yenc_decode on github. -
-
- {html_radios id="processjpg" name='processjpg' values=$yesno_ids output=$yesno_names selected=$fsite->processjpg separator='
'} -
Whether to attempt to retrieve a JPG file while additional post processing, these are - usually on XXX releases.
-
- {html_radios id="processthumbnails" name='processthumbnails' values=$yesno_ids output=$yesno_names selected=$fsite->processthumbnails separator='
'} -
Whether to attempt to process a video thumbnail image. You must have ffmpeg for this.
-
- {html_radios id="processvideos" name='processvideos' values=$yesno_ids output=$yesno_names selected=$fsite->processvideos separator='
'} -
Whether to attempt to process a video sample, these videos are very short 1-3 seconds, - 100KB on average, in ogg video format. You must have ffmpeg for this.
-
- - -
The maximum number of segments to download to generate the sample video file or jpg - sample image. (Default 2) -
-
- - -
The maximum duration (In Seconds) for ffmpeg to generate the sample for. (Default 5) -
-
- {html_radios id="extractusingrarinfo" name='extractusingrarinfo' values=$yesno_ids output=$yesno_names selected=$fsite->extractusingrarinfo separator='
'} -
Whether to use rarinfo or 7zip/unrar directly to decompress zip/rar files. -
Using rarinfo is faster, but the extracted files are not as large which leads to smaller video samples/ potentially black preview screenshots. -
-
- -
If a rar/zip has rar/zip inside of it, how many times should we go in those inner rar/zip files.
-
- -
You can add a regex here to set releases to potentially passworded when a file name inside a rar/zip matches this regex. -
You must ensure this regex is valid, a non valid regex will cause errors during processing! -
-
-
- -
- RequestID Settings - - - - - - - - - - - - - -
- {html_options style="width:180px;" id="lookup_reqids" name='lookup_reqids' values=$lookup_reqids_ids output=$lookup_reqids_names selected=$fsite->lookup_reqids} -
Whether to attempt to lookup Request IDs using the Request id link below. This will rename your releases to proper PreDB names.
-
- -
Optional URL to lookup Request IDs. [REQUEST_ID] gets replaced with the request id from the - post. [GROUP_NM] Gets replaced with the group name. -
-
- -
The maximum hours after a release is added to recheck for a Request id match.
-
-
- -
- Advanced - Postprocessing Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
How much time to wait for unrar/7zip/mediainfo/ffmpeg/avconv before killing it, set to 0 to disable. - 60 is a good value. Requires the GNU Timeout path to be set.
-
- - -
The maximum amount of releases to process for passwords/previews/mediainfo per run. - Every release gets processed here. This uses NNTP an connection, 1 per thread. This does not query - Amazon. -
-
- - -
If a part fails to download while post processing, this will retry up to the amount - you set, then give up. -
-
- - -
This overrides the above setting if set above 1. How many parts to check for a - password before giving up. This slows down post processing massively, better to leave it 1. -
-
- - -
The maximum amount of TV shows to process with TVRage per run. This does not use an - NNTP connection or query Amazon. -
-
- - -
The maximum amount of movies to process with IMDB per run. This does not use an NNTP - connection or query Amazon. -
-
- - -
The maximum amount of anime to process with anidb per run. This does not use an NNTP - connection or query Amazon. -
-
- - -
The maximum amount of music to process with amazon per run. This does not use an NNTP - connection. -
-
- - -
The maximum amount of games to process with amazon per run. This does not use an NNTP - connection. -
-
- - -
The maximum amount of books to process with amazon per run. This does not use an NNTP - connection -
-
- - -
The maximum number of releases to check per run(threaded script only).
-
- - -
Sleep time in milliseconds to wait in between amazon requests. If you thread - post-proc, multiply by the number of threads. ie Postprocessing Threads = 12, Amazon sleep time = - 12000
https://affiliate-program.amazon.com/gp/advertising/api/detail/faq.html -
-
-
- -
- NFO Processing Settings - - - - - - - - - - - - - - - - - - - - - -
- {html_radios id="lookupnfo" name='lookupnfo' values=$yesno_ids output=$yesno_names selected=$fsite->lookupnfo separator='
'} -
Whether to attempt to retrieve an nfo file from usenet.
- NOTE: disabling nfo lookups will disable movie lookups. -
-
- -
The maximum amount of NFO files to process per run. This uses NNTP an connection, 1 - per thread. This does not query Amazon. -
-
- -
The maximum size in gigabytes of a release to process it for NFOs. If set to 0, then ignored.
-
- -
The minimum size in megabytes of a release to process it for NFOs. If set to 0, then ignored.
-
- -
How many times to retry when a NFO fails to download. If set to 0, we will not retry. The max is 7.
-
-
- -
- Connection Settings - - - - - - - - - - - - - - - - - - - - -
- - -
The maximum number of retry attmpts to connect to nntp provider. On error, each retry - takes approximately 5 seconds nntp returns reply. (Default 10) -
-
- {html_radios id="nntpproxy" name='nntpproxy' values=$yesno_ids output=$yesno_names selected=$fsite->nntpproxy separator='
'} -
- nntpproxy does not support the POST usenet command which is required for uploading usenet comments when using sharing. - Using the NNTP Proxy for newznab can improve performance of newznab. It uses - connection pooling which not only give more control over the number of connections to use but also - reduces time for connection setup/teardown. The proxy also takes care of compressed headers for you. - To use this featrure you will need to install socketpool (sudo pip install socketpool or sudo easy_install socketpool) - (ensure python2 is default) and edit the configuration file (nntpproxy.conf and nntpproxy_a.conf) in the - update_scripts/nix_scripts/tmux/python/lib (copy sample) directory and finally edit your www/config.php file - to use the proxy (username and password are ignored by the proxy - make then anything you like - the - proxy doesn't use ssl either). Make sure you turn off the use compressed headers option here in site - preferences (the proxy uses compressed headers by default and passes on decompressed data). -
-
- {html_radios id="alternate_nntp" name='alternate_nntp' values=$yesno_ids output=$yesno_names selected=$fsite->alternate_nntp separator='
'} -
This sets Postproccessing Additional/Nfo to use the alternate NNTP provider as set in - config.php. -
-
- -
The time in hours to wait, since last activity, before releases without parts counts - in the subject are are created
Setting this below 2 hours could create incomplete releases.. -
-
-
-
- Developer Settings - - - - - -
- {html_radios id="showdroppedyencparts" name='showdroppedyencparts' values=$yesno_ids output=$yesno_names selected=$fsite->showdroppedyencparts separator='
'} -
For developers. Whether to log all headers that have 'yEnc' and are dropped. Logged to not_yenc/groupname.dropped.txt.
-
-
- -
- Advanced - Threaded Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
The number of threads for update_binaries. If you notice that you are getting a lot of - parts into the partrepair table, it is possible that you USP is not keeping up with the requests. - Try to reduce the threads. At least until the cause can be determined. -
-
- - -
The number of threads for backfill.
-
- - -
The number of threads for releases update scripts. -
-
- - -
The number of threads for import-nzb(bulk). This will thread each subfolder.
-
- - -
The number of threads for additional postprocessing. This includes deep rar - inspection, preview and sample creation and nfo processing. -
-
- -
The number of threads for nfo postprocessing. - The max is 16, if you set anything higher it will use 16. -
-
- -
The number of threads for local Request id processing. -
-
- - -
The number of threads for non-amazon postprocessing. This includes movies, anime and - tv lookups. -
-
- - -
The number of threads for fixReleasesNames. This includes md5, nfos, par2 and - filenames. -
-
-
- -
-User Settings - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - {html_radios id="registerstatus" name='registerstatus' values=$registerstatus_ids output=$registerstatus_names selected=$fsite->registerstatus separator='
'} -
The status of registrations to the site.
-
: - {html_radios id="storeuserips" name='storeuserips' values=$yesno_ids output=$yesno_names selected=$fsite->storeuserips separator='
'} -
Whether to store the users ip address when they signup or login.
-
- {html_radios id="privateprofiles" name='privateprofiles' values=$yesno_ids output=$yesno_names selected=$fsite->privateprofiles separator='
'} -
Should we disallow users from accessing profiles other than their own? (regardless of this setting admin/mod can access).
-
: - -
The number of days to preserve user download history, for use when checking limits being hit. Set to zero will remove all records of what users download, but retain history of when, so that role based limits can still be applied.
-
: - -
A comma separated list of IP addresses which will be excluded from user limits on number of requests and downloads per IP address. Include values for google reader and other shared services which may be being used.
-
-
- -
-Recaptcha - - - - - - - - - - - - - - - - - - - -
: - -
The public key supplied by recaptcha.net. Sign up for recaptcha at https://www.google.com/recaptcha/admin/create
-
: - -
The private key supplied by recaptcha.net
-
: - {html_radios id="registerrecaptcha" name='registerrecaptcha' values=$yesno_ids output=$yesno_names selected=$fsite->registerrecaptcha separator='
'} -
Whether to display a ReCaptcha captcha for registering.
-
-
- - - -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/site-stats.tpl b/www/templates/omicron/views/admin/site-stats.tpl deleted file mode 100644 index 102e0fb64..000000000 --- a/www/templates/omicron/views/admin/site-stats.tpl +++ /dev/null @@ -1,186 +0,0 @@ - -

{$page->title}

- -{if $topgrabs|count > 0} -

Top Grabbers

- - - - - - - - {foreach from=$topgrabs item=result} - - - - - {/foreach} - -
UserGrabs
{$result.username}{$result.grabs}
- -

-{/if} - -

Signups

- - - - - - - - {foreach from=$usersbymonth item=result} - {assign var="totusers" value=$totusers+$result.num} - - - - - {/foreach} - -
MonthSignups
{$result.mth}{$result.num}
Total{$totusers}
- -

- -

Users by Role

- - - - - - - - {foreach from=$usersbyrole item=result} - {assign var="totrusers" value=$totrusers+$result.num} - - - - - {/foreach} - -
RoleUsers
{$result.name}{$result.num}
Total{$totrusers}
- -

- -

Users by Hosthash

- - - - - - - - - {foreach from=$usersbyhosthash item=result} - - - - - - - {/foreach} -
HosthashUser IDs (Edit)User Names (Profiles)
{$result.hosthash} - {assign var="usersplits" value=","|explode:$result.user_string} - {foreach from=$usersplits item=usersplit} - {$usersplit} - {/foreach} - - {assign var="usernsplits" value=","|explode:$result.user_names} - {foreach from=$usernsplits item=usernsplit} - {$usernsplit} - {/foreach} -
- -

- -

Access by Date

- - - - - - - - - - - - - {foreach from=$loginsbymonth item=result} - - - - - - - - - - {/foreach} -
TypeLast Day2-7 Days8-30 Days1-3 Months3-6 Months+6 Months
{$result.type}{$result.1day}{$result.7day}{$result.1month}{$result.3month}{$result.6month}{$result.12month}
- -

- -{if $topdownloads|count > 0} -

Top Downloads

- - - - - - - - - {foreach from=$topdownloads item=result} - - - - - - {/foreach} - -
ReleaseGrabsDays Ago
{$result.searchname|escape:"htmlall"|replace:".":" "} - {if isset($isadmin)}[Edit]{/if}{$result.grabs}{$result.adddate|timeago}
- -

-{/if} - -

Releases Added In Last 7 Days

- - - - - - - - {foreach from=$recent item=result} - - - - - {/foreach} - -
CategoryReleases
{$result.title}{$result.count}
- -

- -{if $topcomments|count > 0} -

Top Comments

- - - - - - - - - {foreach from=$topcomments item=result} - - - - - - {/foreach} - -
ReleaseCommentsDays Ago
{$result.searchname|escape:"htmlall"|replace:".":" "}{$result.comments}{$result.adddate|timeago}
-{/if} \ No newline at end of file diff --git a/www/templates/omicron/views/admin/spotnab-edit.tpl b/www/templates/omicron/views/admin/spotnab-edit.tpl deleted file mode 100644 index 7d74aa219..000000000 --- a/www/templates/omicron/views/admin/spotnab-edit.tpl +++ /dev/null @@ -1,55 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name: - - -
A name or description for the source.
-
Poster Username: - -
The username part of the poster. eg nntp
-
Poster E-mail: - -
The email part of the poster. eg spot@nntp.com
-
Usenet Group: - -
Group to search when looking up posts for this source.
-
Public Key: - -
Public Key needed to decode the posts specific for this source.
-
- -
- -
diff --git a/www/templates/omicron/views/admin/spotnab-list.tpl b/www/templates/omicron/views/admin/spotnab-list.tpl deleted file mode 100644 index 0bfd8824d..000000000 --- a/www/templates/omicron/views/admin/spotnab-list.tpl +++ /dev/null @@ -1,44 +0,0 @@ - -

{$page->title}

- -{if $spotnab|@count == 0} -No available sources. Add one? -{else} - - - - - - - - - - - - - {foreach from=$spotnab item=source} - - - - - - - - - {/foreach} - - -
source descriptioncurrent statuscommentslast broadcastlast updateoptions
{$source.description}{if $source.active=="1"}active{else}inactive{/if}{$source.comments} - {if $source.lastbroadcast != null} - {$source.lastbroadcast} - {else} - n/a - {/if} - - {if $source.lastupdate != null} - {$source.lastupdate} - {else} - n/a - {/if} - edit delete
-{/if} diff --git a/www/templates/omicron/views/admin/thetvdb-edit.tpl b/www/templates/omicron/views/admin/thetvdb-edit.tpl deleted file mode 100644 index c1b55a8a0..000000000 --- a/www/templates/omicron/views/admin/thetvdb-edit.tpl +++ /dev/null @@ -1,124 +0,0 @@ - -

{$page->title}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
: - -
- -
- -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/thetvdb-list.tpl b/www/templates/omicron/views/admin/thetvdb-list.tpl deleted file mode 100644 index b457497b5..000000000 --- a/www/templates/omicron/views/admin/thetvdb-list.tpl +++ /dev/null @@ -1,40 +0,0 @@ -

{$page->title}

- -{if $serieslist} - -
- -
- - -    - -
-
- -{$pager} - -

- - - - - - - - - - {foreach from=$serieslist item=thetvdb} - - - - - - {/foreach} - -
TheTVDB idTitleOptions
{$thetvdb.tvdbid}{$thetvdb.seriesname|escape:"htmlall"}delete | remove
-
- {$pager} -{else} -

No TheTVDB episodes available.

-{/if} diff --git a/www/templates/omicron/views/admin/thetvdb-remove.tpl b/www/templates/omicron/views/admin/thetvdb-remove.tpl deleted file mode 100644 index 1c245f125..000000000 --- a/www/templates/omicron/views/admin/thetvdb-remove.tpl +++ /dev/null @@ -1,4 +0,0 @@ - -

{$page->title}

- -Removed tvdbid from {$numtv} releases. \ No newline at end of file diff --git a/www/templates/omicron/views/admin/tmux-edit.tpl b/www/templates/omicron/views/admin/tmux-edit.tpl deleted file mode 100644 index 770df3d6e..000000000 --- a/www/templates/omicron/views/admin/tmux-edit.tpl +++ /dev/null @@ -1,784 +0,0 @@ -

{$page->title}

- -
- -{if $error != ''} -
{$error}
-{/if} - -
- Tmux - How It Works - - - - - -
                                 - -
Tmux is a screen multiplexer and at least version 1.6 is required. It is used - here to allow multiple windows per session and multiple panes per window.

- Each script is run in its own shell environment. It is not looped, but allowed to run once and then - exit. This notifies tmux that the pane is dead and can then be respawned with another iteration of - the script in a new shell environment.
- This allows for scripts that crash to be restarted without user intervention.

- You can run multiple tmux sessions, but they all must have an associated tmux.conf file and all - sessions must use the same tmux.conf file.

- -

NOTICE:

If "Save Tmux Settings" is the last thing you did on this page or if it is - the active element and if you have this page set to autorefresh or you refresh instead of following - a link to this page, you will set the db with the settings currently on this page, not reload from - db. This could cause tmux scripts to start while optimize or patch the database is running. -
-
-
- -
- Monitor - - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_radios id="running" name='running' values=$yesno_ids output=$yesno_names selected=$ftmux->running separator='
'} -
This is the shutdown, true/on, it runs, false/off and all scripts are terminated. This - will start/stop all panes without terminating the monitor pane. This is not instant, it does not - kill any panes, it simply does not aloow any pane to restart if set to false. -
-
- - -
The time between query refreshes of monitor information, in seconds. This has no - effect on any other pane, except in regards to the kill switches. The other panes are checked every - 10 seconds. The lower the number, the more often it queries the database for numbers.
- As the database gets larger in size, the longer this set of queries takes to process.
- this has been mitigated by using memcache on the count queries. The will stay in cache for whatever - you have set in config.ini, default is 900 seconds. -
-
- - -
Enter the session name to be used by tmux, no spaces allowed in the name, this can't - be changed after scripts start. If you are running multiple servers, you could put your hostname - here -
-
-
-
- - -
Enter a path here to have Monitor monitor its usage and free space. Must be a valid - path.
To use this example, add to fstab and edit path, gid and uid, then mount as user not root:
tmpfs - /var/www/newznab/nzbfiles/tmpunrar tmpfs - user,uid=1000,gid=33,nodev,nodiratime,nosuid,size=1G,mode=777 0 0
- gid == group id == /etc/groups, uid == user id == /etc/passwd -
-
-
- Monitor is the name of the script that monitors all of the tmux panes and windows. It stops/stops - scripts based on user settings. It queries the database to provide stats from your newznab database.

- There are 2 columns of numbers, 'In Process' and 'In Database'. The 'In Process' is all releases - that need to be postprocessed. The 'In Database' is the number of releases matching that - category.

- The 'In Process' column has 2 sets of numbers, the total for each category that needs to be - postprocessed and inside the parenthesis is the difference from when the script started to what it - is now.

- The 'In Database' column also has 2 sets of numbers, the total releases for each category and inside - the parenthesis is the percentage that category is to the total number of releases.

- The Misc row means something different in both columns. The 'In Process' column is all releases that - have not had 'Additional' run on them. This includes 100% of all releases, not just the Misc - Category.

- The 'In Database' Misc means the number of releases that have not been categorized in any other - category.
- The counts for parts, binaries and predb totals are estimates and can vary wildly between queries. - It is too slow to query the db for real counts, when using InnoDB. All of the other counts are - actual counts.

- The 'In Process' predb is the total unmatched predb and inside the parenthesis is the 'matched' - changed since the script started. The 'In Database' is the total matched predb's you have and the - number inside the parenthesis is the percentage of total releases that you have matched to a predb - release.

- The 'In Process' NZBs are total nzbs, inside the parenthesis is distinct nzbs and 'In Database' are - nzbs that have all parts available and will be processed on next run.

- The 'In Process' requestid is the number waiting to be processed and inside the parenthesis is the - number changed since the script started. The 'In Database' is the total matches of releases to - requestIDs and inside the parenthesis is percentage of total releases that you have matched to a - requestid.

- The 'In Process' rows PC and Pron are simply subsets of the 'In Process' row Misc. There is no - postprocessing specifically for these categories. The 'In Database' is the actual count for the - category. -
-
-
- -
- Sequential - - - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="sequential" name='sequential' values=$sequential_ids output=$sequential_names selected=$ftmux->sequential} -
Basic Sequential runs update_binaries, backfill and update releases_sequentially.
Changing - requires restart. -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
I do not recommend using sequential, as it is not tested enough.
-
-
- -
- Update Binaries - - - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="binaries" name='binaries' values=$binaries_ids output=$binaries_names selected=$ftmux->binaries} -
Choose to run update_binaries. Update binaries gets from your last_record to now.
Simple - Threaded Update runs 1 group per thread.
Complete Threaded Update splits all work across - multiple threads(binaries_safe_threaded.py). -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
- - -
The time update_binaries is allowed to run with no updates.Time is in minutes.
-
-
- -
- Backfill - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="backfill" name='backfill' values=$backfill_ids output=$backfill_names selected=$ftmux->backfill} -       {html_options style="width:180px;" class="siteeditstyle" id="backfill_order" name='backfill_order' values=$backfill_group_ids output=$backfill_group selected=$ftmux->backfill_order} -       {html_options style="width:180px;" class="siteeditstyle" id="backfill_days" name='backfill_days' values=$backfill_days_ids output=$backfill_days selected=$ftmux->backfill_days} -
Choose to run backfill type. Backfill gets from your first_record back.
- Disabled - Disables backfill from running.
- Safe - Backfills 1 group by backfill days (set in admin-view groups), using the number of threads - set in admin. This downloads Backfill Quantity times the Backfill Threads, each - loop(backfill_safe_threaded.py).
- example: you have Backfill Threads = 10, Backfill Quantity = 20k, Max Messages = 5k: you will run 10 - threads, queue of 40 and download 200k headers.
- Interval - Backfills the number of groups (set in tmux), by backfill days (set in admin-view - groups), completely.
- All - Backfills the number of groups (set in tmux), by Backfill Quantity (set in tmux), up to - backfill days (set in admin-view groups)
- These settings are all per loop and does not use backfill date. Approximately every 80 minutes, - every activated backfill group will be backfilled (5k headers).This extra step is not necessary and - is not used when using Sequential.
- Newest - Sorts the group selection with the least backfill days backfilled, first.
- Oldest - Sorts the group selection with the most backfill days backfilled, first.
- Alphabetical - Sorts the group selection from a to z.
- Alphabetical Reverse - Sorts the group selection from z to a.
- Most Posts - Sorts the group selection by the highest number of posts, first.
- Fewest Posts - Sorts the group selection by the lowest number of posts, first.
- Backfill days - Days per Group from admin->view group or the Safe Backfill Date from admin->tmux. -
-
- - -
When not running backfill intervals, you select the number of headers per group per - thread to download. -
-
- - -
When running backfill the groups are sorted by the backfill method chosen above. - Select the number of groups to backfill per loop. -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
- {html_radios id="progressive" name='progressive' values=$yesno_ids output=$yesno_names selected=$ftmux->progressive separator='
'} -
This will vary the backfill sleep depending on how many collections you have.
ie - 50k collections would make sleep timer 100 seconds and 20k releases would make sleep timer 40 - seconds. -
-
-
- -
- Import nzbs - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="import" name='import' values=$import_ids output=$import_names selected=$ftmux->import} -
Choose to run import nzb script true/false. This can point to a single folder with - multiple subfolders on just the one folder. If you run this threaded, it will run 1 folder per - thread. -
-
- - -
Set the path to the nzb dump you downloaded from torrents, this is the path to bulk - files folder of nzbs. This is by default, recursive and threaded. You set the threads in Advanced - Settings. -
-
- -
How many NZB files to import per process.
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
This will import all nzbs in the given path. If in your path you have nzbs in - the root folder and subfolders(regardless of nzbs inside), threaded scripts will ignore all nzbs in - the root path. Then each subfolder is threaded. -
-
-
- -
- Update Releases - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="releases" name='releases' values=$releases_ids output=$releases_names selected=$ftmux->releases} -
Create releases, this is really only necessary to turn off when you only want to post - process. This runs "Categorizes releases in misc sections using the search name" on first loop and - has 33% chance of running on any other loop. Then runs update_releases.php 1 false to create new - releases.
Threaded is only used with tablepergroup and is required if using tpg. -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
- -
- Postprocessing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="post" name='post' values=$post_ids output=$post_names selected=$ftmux->post} -
Choose to do deep rar inspection, preview and sample creation and/or nfo processing. - true/false -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
- - -
The time postprocess is allowed to run with no updates to the screen.Time is in - seconds. Activity is detected when the history for the pane changes. The clock is restarted every - time activity is detected. -
-
- {html_radios id="post_amazon" name='post_amazon' values=$yesno_ids output=$yesno_names selected=$ftmux->post_amazon separator='
'} -
Choose to do books, music and games lookups true/false
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
- {html_options style="width:180px;" class="siteeditstyle" id="post_non" name='post_non' values=$post_non_ids output=$post_non_names selected=$ftmux->post_non} -
Choose to do movies, anime and tv lookups. true/false
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
- -
- Comment Sharing - - - - - - - - - -
- {html_radios id="run_sharing" name='run_sharing' values=$yesno_ids output=$yesno_names - selected=$ftmux->run_sharing separator='
'} - -
Run Comment Sharing from within tmux if you have it enabled in Admin->Comment Sharing - Settings. -
-
- - -
Set the sleep time between updates
-
-
- -
- Fix Release Names - - - - - - - - - - -
- {html_radios id="fix_names" name='fix_names' values=$yesno_ids output=$yesno_names selected=$ftmux->fix_names separator='
'} -
Choose to try to fix Releases Names using NFOs, par2 files, filenames, md5 and - sha1. true/false -
-
- - -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
- -
- Remove Crap Releases - - - - - - - - - -
- {html_radios id="fix_crap_opt" name='fix_crap_opt' onchange="enableFixCrapCustom()" values=$fix_crap_radio_names output=$fix_crap_radio_names selected=$ftmux->fix_crap_opt separator='
'} -
-
- {if $ftmux->fix_crap_opt == "Custom"} - {html_checkboxes id="fix_crap" name='fix_crap' values=$fix_crap_check_names output=$fix_crap_check_names selected=explode(', ', $ftmux->fix_crap)} - {else} - {html_checkboxes id="fix_crap" name='fix_crap' disabled="true" readonly="true" values=$fix_crap_check_names output=$fix_crap_check_names selected=explode(', ', $ftmux->fix_crap)} - {/if} -
-
Choose to run Remove Crap Releases. You can enable all or some.
-
- -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
-
- Decrypt Hashes - - - - - - - - - - - - - -
- {html_options style="width:180px;" class="siteeditstyle" id="dehash" name='dehash' values=$dehash_ids output=$dehash_names selected=$ftmux->dehash} -
Choose to run Decrypt Hashes true/false
-
- -
The time to sleep from the time the loop ends until it is restarted, in seconds.
-
-
Decrypt hashes works by matching a hashed release to the md5 of a release in - the predb.
- Included in the same pane is Update Predb. This scrapes several predb sites and then tries to match - against releases.
- This should be run along with fixReleasenames.php, this is faster, but only looks at releases.names. - fixReleasenames.php goes further and looks at releasefiles.name. -
-
-
-
- Update TV/Theater - - - - - - - - - - -
- {html_radios id="update_tv" name='update_tv' values=$yesno_ids output=$yesno_names selected=$ftmux->update_tv separator='
'} -
Choose to run Update TV and Theater Schedules true/false
-
- - -
This is a start timer. The default is 12 hours. This means that if enabled, is will - start/run every 12 hours, no matter how long it runs for. -
-
-
- -
- PreDb IRC Scraper - - - - - - - - - -
- {html_radios id="scrape" name='scrape' values=$yesno_ids output=$yesno_names - selected=$ftmux->scrape separator='
'} -
Choose to run IRCScraper on irc channels. Setting SCRAPE_IRC_C_Z_BOOL parameter to - true or false in settings.php will toggle between the servers. The pane for this can not be - created after tmux starts. -
-
-
IRC Scraper will scrape several predb channels from the enabled servers.
- Copy settings_example.php to settings.php in /lib/IRCScraper and change the settings.
- As a minimum you should set the username and make sure it is unique. -
-
-
- -
- Miscellaneous - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
This sets the 'nice'ness of each script, default is 19, the lowest, the highest is -20 - anything between -1 and -20 require root/sudo to run -
-
- -
Set this to any number above 0 and when it is exceeded, backfill and update binaries - will be terminated. 0 disables. -
-
- - -
Set this to any number above 0 and when it is exceeded, import, backfill and update - binaries will be terminated. 0 disables. -
-
- {html_radios id="write_logs" name='write_logs' values=$yesno_ids output=$yesno_names selected=$ftmux->write_logs separator='
'} -
Set this to write each panes output to a per pane per day log file. This adds GMT date - to the filename. -
-
- {html_radios id="powerline" name='powerline' values=$yesno_ids output=$yesno_names selected=$ftmux->powerline separator='
'} -
Choose to use the Powerline tmux status bar. To make this pretty, you need to install - a patched font. This can be found on my - fork or the original git
You - will need to copy the default theme located at powerline/powerline/themes/default.sh to - powerline/powerline/themes/tmux.sh and edit that file for what is displayed, colors, etc. -
-
- - -
The target date for safe backfill. Format: YYYY-MM-DD
-
-
- -
- Server Monitors - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {html_radios id="showquery" name='showquery' values=$yesno_ids output=$yesno_names selected=$ftmux->showquery separator='
'} -
Choose to display the query times for each set of queries. true/false.
-
- {html_radios id="htop" name='htop' values=$yesno_ids output=$yesno_names selected=$ftmux->htop separator='
'} -
htop - an interactive process viewer for Linux. The pane for this can not be created - after tmux starts. -
-
- {html_radios id="nmon" name='nmon' values=$yesno_ids output=$yesno_names selected=$ftmux->nmon separator='
'} -
nmon is short for Nigel's performance Monitor for Linux. The pane for this can not be - created after tmux starts. -
-
- {html_radios id="vnstat" name='vnstat' values=$yesno_ids output=$yesno_names selected=$ftmux->vnstat separator='
'} - - -
vnStat is a console-based network traffic monitor for Linux and BSD that keeps a log - of network traffic for the selected interface(s). Any additional arguments should be placed in the - text box. The pane for this can not be created after tmux starts. -
-
- {html_radios id="tcptrack" name='tcptrack' values=$yesno_ids output=$yesno_names selected=$ftmux->tcptrack separator='
'} - - -
tcptrack displays the status of TCP connections that it sees on a given network - interface. tcptrack monitors their state and displays information such as state, source/destination - addresses and bandwidth usage in a sorted, updated list very much like the top(1) command.
Any - additional arguments should be placed in the text box.
You may need to run "sudo setcap - cap_net_raw+ep /usr/bin/tcptrack", to be able to run as user. The pane for this can not be created - after tmux starts. -
-
- {html_radios id="bwmng" name='bwmng' values=$yesno_ids output=$yesno_names selected=$ftmux->bwmng separator='
'} -
bwm-ng can be used to monitor the current bandwidth of all or some specific network - interfaces or disks (or partitions). The pane for this can not be created after tmux starts. -
-
- {html_radios id="mytop" name='mytop' values=$yesno_ids output=$yesno_names selected=$ftmux->mytop separator='
'} -
mytop - display MySQL server performance info like `top'.
You will need to create - ~/.mytop, an example can be found in 'perldoc mytop'. The pane for this can not be created after - tmux starts. -
-
- {html_radios id="showprocesslist" name='showprocesslist' values=$yesno_ids output=$yesno_names selected=$ftmux->showprocesslist separator='
'} - - -
This runs the watch command in its own pane. This could be used for a live 'slow query - monitor'. Just set the time above and only the queries that exceed it will be displayed.
mysql - -e "SELECT time, state, rows_examined, info FROM information_schema.processlist WHERE command != - \"Sleep\" AND time >= .5 ORDER BY time DESC \G"
This shows a grid like layout with the full test - of the running queries.
You will need to create a ~/.my.cnf for this to work properlly. The pane - for this can not be created after tmux starts and modifying the time above will have no effect until - a restart occurs. -
-
- {html_radios id="console" name='console' values=$yesno_ids output=$yesno_names selected=$ftmux->console separator='
'} -
Open an empty bash shell. The pane for this can not be created after tmux starts. -
-
- {html_radios id="debuginfo" name='debuginfo' values=$yesno_ids output=$yesno_names selected=$ftmux->debuginfo separator='
'} -
For developers. Whether to echo debug information in some scripts.
-
-
- - - -
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/user-edit.tpl b/www/templates/omicron/views/admin/user-edit.tpl deleted file mode 100644 index 5abbaf6bc..000000000 --- a/www/templates/omicron/views/admin/user-edit.tpl +++ /dev/null @@ -1,128 +0,0 @@ -

{$page->title}

- -{if $error != ''} -
{$error}
-{/if} - -
- - - - - - - - - - - - - - - - - - {if $user.id} - - - - - - - - - {/if} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Name: - - -
Email: - -
Password: - - {if $user.id} -
Only enter a password if you want to change it.
- {/if} -
Grabs: - -
Invites: - -
Movie View: - -
Music View: - -
Game View: - -
XXX View: - -
Console View: - -
Book View: - -
: - {html_radios id="role" name='role' values=$role_ids output=$role_names selected=$user.role separator='
'} -
Notes: - -
- - - {if $user.id != ""} - - - {/if} -
- -
- - diff --git a/www/templates/omicron/views/admin/user-list.tpl b/www/templates/omicron/views/admin/user-list.tpl deleted file mode 100644 index bd9690314..000000000 --- a/www/templates/omicron/views/admin/user-list.tpl +++ /dev/null @@ -1,64 +0,0 @@ - -

{$page->title}

- -
- -
- - -    - - -    - - -    - - -    - -
-
- -{$pager} - -

- - - - - - - - - - - - - - - - - - - {foreach from=$userlist item=user} - - - - - - - - - - - - - - {/foreach} - - -
name
email
host
join date
last login
api access
grabs
invitesnotesrole
options
{$user.username}{$user.email}{$user.host}{$user.createddate|date_format}{$user.lastlogin|date_format}{$user.apiaccess|date_format}{$user.grabs}{$user.invites}{$user.rolename}{if $user.role!="2"}delete{/if}
\ No newline at end of file diff --git a/www/templates/omicron/views/admin/view-logs.tpl b/www/templates/omicron/views/admin/view-logs.tpl deleted file mode 100644 index 3592a0b98..000000000 --- a/www/templates/omicron/views/admin/view-logs.tpl +++ /dev/null @@ -1,34 +0,0 @@ -

{$page->title}

-

-{if $data} - {$pager} - - - - - {foreach from=$data item=log} - - - - {/foreach} -
- -
{$log}
-
- {$pager} -{else} -

Nothing found, maybe you need to turn on logging in : {$path}

- -{/if} \ No newline at end of file diff --git a/www/templates/omicron/views/frontend/dlbrowse.tpl b/www/templates/omicron/views/frontend/dlbrowse.tpl index 95895dbbb..853153896 100644 --- a/www/templates/omicron/views/frontend/dlbrowse.tpl +++ b/www/templates/omicron/views/frontend/dlbrowse.tpl @@ -32,7 +32,7 @@ {foreach from=$results item=result} - {assign var="icon" value='templates/default/images/fileicons/'|cat:$result.pathinfo.extension|cat:".png"} + {assign var="icon" value='templates/omicron/images/fileicons/'|cat:$result.pathinfo.extension|cat:".png"} {if $result.isdir == "1"} {assign var="icon" value='folder'} {elseif $result.pathinfo.extension == "" || !is_file("$icon")} @@ -42,7 +42,7 @@ {/if} {$result.pathinfo.extension} + src="{$smarty.const.WWW_TOP}/templates/omicron/images/fileicons/{$icon}.png"/> {if $result.isdir == 1} {$result.name|escape:"htmlall"} diff --git a/www/templates/omicron/views/frontend/nzbvortex-ajax.tpl b/www/templates/omicron/views/frontend/nzbvortex-ajax.tpl index 0df45e4cb..3b1808526 100644 --- a/www/templates/omicron/views/frontend/nzbvortex-ajax.tpl +++ b/www/templates/omicron/views/frontend/nzbvortex-ajax.tpl @@ -9,10 +9,10 @@
{if $nzb['isPaused'] eq 1} - {else} - {/if}
@@ -28,25 +28,25 @@
{if $nzb['isPaused'] eq 1} + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/vortex/play.png"/> {else} + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/vortex/pause.png"/> {/if} + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/vortex/tv.png"/>
+ src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/vortex/arrow2_n.png"/> + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/vortex/arrow2_s.png"/> + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/vortex/arrow3_s.png"/> + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/vortex/arrow3_n.png"/> + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/vortex/trash.png"/>

diff --git a/www/templates/omicron/views/frontend/opensearch.tpl b/www/templates/omicron/views/frontend/opensearch.tpl index 191570c66..879740a62 100644 --- a/www/templates/omicron/views/frontend/opensearch.tpl +++ b/www/templates/omicron/views/frontend/opensearch.tpl @@ -4,11 +4,11 @@ {$site->title|escape} Search Facility {$site->email} - {$serverroot}templates/default/images/favicon.ico + {$serverroot}templates/omicron/images/favicon.ico newznab.com UTF-8 {$serverroot} {$serverroot}opensearch - {$serverroot}templates/default/images/favicon.ico + {$serverroot}templates/omicron/images/favicon.ico 7 \ No newline at end of file diff --git a/www/templates/omicron/views/frontend/viewanime.tpl b/www/templates/omicron/views/frontend/viewanime.tpl index 0064dcf43..2879320e0 100644 --- a/www/templates/omicron/views/frontend/viewanime.tpl +++ b/www/templates/omicron/views/frontend/viewanime.tpl @@ -147,19 +147,19 @@ {if isset($sabintegrated)} Send to my Sabnzbd + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/sabup.png"> {/if} {if $weHasVortex} Send to my NZBVortex + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/vortex/bigsmile.png"> {/if} {if isset($nzbgetintegrated)}Send to NZBget + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/nzbgetup.png"> {/if} {if isset($isadmin)}
diff --git a/www/templates/omicron/views/frontend/viewfilelist.tpl b/www/templates/omicron/views/frontend/viewfilelist.tpl index ae36e1802..3341655e3 100644 --- a/www/templates/omicron/views/frontend/viewfilelist.tpl +++ b/www/templates/omicron/views/frontend/viewfilelist.tpl @@ -19,7 +19,7 @@ {$smarty.foreach.iteration.index+1} {$file.title|escape:'htmlall'} - {assign var="icon" value='templates/default/images/fileicons/'|cat:$file.ext|cat:".png"} + {assign var="icon" value='templates/omicron/images/fileicons/'|cat:$file.ext|cat:".png"} {if $file.ext == "" || !is_file("$icon")} {assign var="icon" value='file'} {else} @@ -33,7 +33,7 @@ {/if} {$file.ext} + src="{$smarty.const.WWW_TOP}/templates/omicron/images/fileicons/{$icon}.png"/> {if $completion < 100}{$completion} %{else}{$completion}%{/if} {if $file.size < 100000}{$file.size|fsize_format:"KB"}{else}{$file.size|fsize_format:"MB"}{/if} diff --git a/www/templates/omicron/views/frontend/viewseries.tpl b/www/templates/omicron/views/frontend/viewseries.tpl index f41bbbd36..a85076f1b 100644 --- a/www/templates/omicron/views/frontend/viewseries.tpl +++ b/www/templates/omicron/views/frontend/viewseries.tpl @@ -218,7 +218,7 @@ title="Send to Sab"> Send to my Sabnzbd + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/sabup.png"> {/if} {if $weHasVortex} @@ -226,7 +226,7 @@ title="Send to NZBVortex"> Send to my NZBVortex + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/vortex/bigsmile.png"> {/if} {if isset($nzbgetintegrated)}Send to NZBget + src="{$smarty.const.WWW_TOP}/templates/omicron/images/icons/nzbgetup.png"> {/if} {if isset($isadmin)}
diff --git a/www/templates_shared/images/astra.png b/www/templates_shared/images/astra.png new file mode 100644 index 000000000..2e4ce594d Binary files /dev/null and b/www/templates_shared/images/astra.png differ diff --git a/www/templates_shared/images/banner.jpg b/www/templates_shared/images/banner.jpg new file mode 100644 index 000000000..2e82665ae Binary files /dev/null and b/www/templates_shared/images/banner.jpg differ diff --git a/www/templates_shared/images/banner_nnplushigh.jpg b/www/templates_shared/images/banner_nnplushigh.jpg new file mode 100644 index 000000000..01d0ade11 Binary files /dev/null and b/www/templates_shared/images/banner_nnplushigh.jpg differ diff --git a/www/templates_shared/images/body-bg.png b/www/templates_shared/images/body-bg.png new file mode 100644 index 000000000..e85c4fd25 Binary files /dev/null and b/www/templates_shared/images/body-bg.png differ diff --git a/www/templates_shared/images/bullet.jpg b/www/templates_shared/images/bullet.jpg new file mode 100644 index 000000000..b61637a9b Binary files /dev/null and b/www/templates_shared/images/bullet.jpg differ diff --git a/www/templates_shared/images/bullet_hov.jpg b/www/templates_shared/images/bullet_hov.jpg new file mode 100644 index 000000000..97c76c38c Binary files /dev/null and b/www/templates_shared/images/bullet_hov.jpg differ diff --git a/www/templates_shared/images/bullet_hov.png b/www/templates_shared/images/bullet_hov.png new file mode 100644 index 000000000..e80e298e8 Binary files /dev/null and b/www/templates_shared/images/bullet_hov.png differ diff --git a/www/templates_shared/images/clearlogo.png b/www/templates_shared/images/clearlogo.png new file mode 100644 index 000000000..fd0e19bf0 Binary files /dev/null and b/www/templates_shared/images/clearlogo.png differ diff --git a/www/templates_shared/images/colorbox/border1-dark.png b/www/templates_shared/images/colorbox/border1-dark.png new file mode 100644 index 000000000..df6507865 Binary files /dev/null and b/www/templates_shared/images/colorbox/border1-dark.png differ diff --git a/www/templates_shared/images/colorbox/border1.png b/www/templates_shared/images/colorbox/border1.png new file mode 100644 index 000000000..2d0a04d61 Binary files /dev/null and b/www/templates_shared/images/colorbox/border1.png differ diff --git a/www/templates_shared/images/colorbox/border2-dark.png b/www/templates_shared/images/colorbox/border2-dark.png new file mode 100644 index 000000000..9d02c3d97 Binary files /dev/null and b/www/templates_shared/images/colorbox/border2-dark.png differ diff --git a/www/templates_shared/images/colorbox/border2.png b/www/templates_shared/images/colorbox/border2.png new file mode 100644 index 000000000..be02ef492 Binary files /dev/null and b/www/templates_shared/images/colorbox/border2.png differ diff --git a/www/templates_shared/images/colorbox/controls-dark.png b/www/templates_shared/images/colorbox/controls-dark.png new file mode 100644 index 000000000..aca68844a Binary files /dev/null and b/www/templates_shared/images/colorbox/controls-dark.png differ diff --git a/www/templates_shared/images/colorbox/controls.png b/www/templates_shared/images/colorbox/controls.png new file mode 100644 index 000000000..8569b57f1 Binary files /dev/null and b/www/templates_shared/images/colorbox/controls.png differ diff --git a/www/templates_shared/images/colorbox/controls2.png b/www/templates_shared/images/colorbox/controls2.png new file mode 100644 index 000000000..8569b57f1 Binary files /dev/null and b/www/templates_shared/images/colorbox/controls2.png differ diff --git a/www/templates_shared/images/colorbox/internet_explorer/borderBottomCenter.png b/www/templates_shared/images/colorbox/internet_explorer/borderBottomCenter.png new file mode 100644 index 000000000..12e0e9ac0 Binary files /dev/null and b/www/templates_shared/images/colorbox/internet_explorer/borderBottomCenter.png differ diff --git a/www/templates_shared/images/colorbox/internet_explorer/borderBottomLeft.png b/www/templates_shared/images/colorbox/internet_explorer/borderBottomLeft.png new file mode 100644 index 000000000..b7a474ae0 Binary files /dev/null and b/www/templates_shared/images/colorbox/internet_explorer/borderBottomLeft.png differ diff --git a/www/templates_shared/images/colorbox/internet_explorer/borderBottomRight.png b/www/templates_shared/images/colorbox/internet_explorer/borderBottomRight.png new file mode 100644 index 000000000..6b6cb159b Binary files /dev/null and b/www/templates_shared/images/colorbox/internet_explorer/borderBottomRight.png differ diff --git a/www/templates_shared/images/colorbox/internet_explorer/borderMiddleLeft.png b/www/templates_shared/images/colorbox/internet_explorer/borderMiddleLeft.png new file mode 100644 index 000000000..8f248ac12 Binary files /dev/null and b/www/templates_shared/images/colorbox/internet_explorer/borderMiddleLeft.png differ diff --git a/www/templates_shared/images/colorbox/internet_explorer/borderMiddleRight.png b/www/templates_shared/images/colorbox/internet_explorer/borderMiddleRight.png new file mode 100644 index 000000000..336e19c16 Binary files /dev/null and b/www/templates_shared/images/colorbox/internet_explorer/borderMiddleRight.png differ diff --git a/www/templates_shared/images/colorbox/internet_explorer/borderTopCenter.png b/www/templates_shared/images/colorbox/internet_explorer/borderTopCenter.png new file mode 100644 index 000000000..7cb1da43e Binary files /dev/null and b/www/templates_shared/images/colorbox/internet_explorer/borderTopCenter.png differ diff --git a/www/templates_shared/images/colorbox/internet_explorer/borderTopLeft.png b/www/templates_shared/images/colorbox/internet_explorer/borderTopLeft.png new file mode 100644 index 000000000..d733b6c86 Binary files /dev/null and b/www/templates_shared/images/colorbox/internet_explorer/borderTopLeft.png differ diff --git a/www/templates_shared/images/colorbox/internet_explorer/borderTopRight.png b/www/templates_shared/images/colorbox/internet_explorer/borderTopRight.png new file mode 100644 index 000000000..0d8868399 Binary files /dev/null and b/www/templates_shared/images/colorbox/internet_explorer/borderTopRight.png differ diff --git a/www/templates_shared/images/colorbox/loading.gif b/www/templates_shared/images/colorbox/loading.gif new file mode 100644 index 000000000..602ce3c3a Binary files /dev/null and b/www/templates_shared/images/colorbox/loading.gif differ diff --git a/www/templates_shared/images/couchpotato.png b/www/templates_shared/images/couchpotato.png new file mode 100644 index 000000000..2f61b495e Binary files /dev/null and b/www/templates_shared/images/couchpotato.png differ diff --git a/www/templates_shared/images/favicon.ico b/www/templates_shared/images/favicon.ico new file mode 100644 index 000000000..316fd5bf4 Binary files /dev/null and b/www/templates_shared/images/favicon.ico differ diff --git a/www/templates_shared/images/fileicons/7z.png b/www/templates_shared/images/fileicons/7z.png new file mode 100644 index 000000000..52f7d5d72 Binary files /dev/null and b/www/templates_shared/images/fileicons/7z.png differ diff --git a/www/templates_shared/images/fileicons/ai.png b/www/templates_shared/images/fileicons/ai.png new file mode 100644 index 000000000..a999762c8 Binary files /dev/null and b/www/templates_shared/images/fileicons/ai.png differ diff --git a/www/templates_shared/images/fileicons/aiff.png b/www/templates_shared/images/fileicons/aiff.png new file mode 100644 index 000000000..82d523fdb Binary files /dev/null and b/www/templates_shared/images/fileicons/aiff.png differ diff --git a/www/templates_shared/images/fileicons/asc.png b/www/templates_shared/images/fileicons/asc.png new file mode 100644 index 000000000..d9fa4a8aa Binary files /dev/null and b/www/templates_shared/images/fileicons/asc.png differ diff --git a/www/templates_shared/images/fileicons/audio.png b/www/templates_shared/images/fileicons/audio.png new file mode 100644 index 000000000..98883256d Binary files /dev/null and b/www/templates_shared/images/fileicons/audio.png differ diff --git a/www/templates_shared/images/fileicons/avi.png b/www/templates_shared/images/fileicons/avi.png new file mode 100644 index 000000000..b89fc5299 Binary files /dev/null and b/www/templates_shared/images/fileicons/avi.png differ diff --git a/www/templates_shared/images/fileicons/bin.png b/www/templates_shared/images/fileicons/bin.png new file mode 100644 index 000000000..fbd174e2d Binary files /dev/null and b/www/templates_shared/images/fileicons/bin.png differ diff --git a/www/templates_shared/images/fileicons/bz2.png b/www/templates_shared/images/fileicons/bz2.png new file mode 100644 index 000000000..d48cae038 Binary files /dev/null and b/www/templates_shared/images/fileicons/bz2.png differ diff --git a/www/templates_shared/images/fileicons/c.png b/www/templates_shared/images/fileicons/c.png new file mode 100644 index 000000000..efe18f439 Binary files /dev/null and b/www/templates_shared/images/fileicons/c.png differ diff --git a/www/templates_shared/images/fileicons/cfc.png b/www/templates_shared/images/fileicons/cfc.png new file mode 100644 index 000000000..09c149d64 Binary files /dev/null and b/www/templates_shared/images/fileicons/cfc.png differ diff --git a/www/templates_shared/images/fileicons/cfm.png b/www/templates_shared/images/fileicons/cfm.png new file mode 100644 index 000000000..d755f286f Binary files /dev/null and b/www/templates_shared/images/fileicons/cfm.png differ diff --git a/www/templates_shared/images/fileicons/chm.png b/www/templates_shared/images/fileicons/chm.png new file mode 100644 index 000000000..53d48f3b5 Binary files /dev/null and b/www/templates_shared/images/fileicons/chm.png differ diff --git a/www/templates_shared/images/fileicons/class.png b/www/templates_shared/images/fileicons/class.png new file mode 100644 index 000000000..a39f70c16 Binary files /dev/null and b/www/templates_shared/images/fileicons/class.png differ diff --git a/www/templates_shared/images/fileicons/conf.png b/www/templates_shared/images/fileicons/conf.png new file mode 100644 index 000000000..ddffe6fd1 Binary files /dev/null and b/www/templates_shared/images/fileicons/conf.png differ diff --git a/www/templates_shared/images/fileicons/cpp.png b/www/templates_shared/images/fileicons/cpp.png new file mode 100644 index 000000000..79464401b Binary files /dev/null and b/www/templates_shared/images/fileicons/cpp.png differ diff --git a/www/templates_shared/images/fileicons/cs.png b/www/templates_shared/images/fileicons/cs.png new file mode 100644 index 000000000..d5db29ba5 Binary files /dev/null and b/www/templates_shared/images/fileicons/cs.png differ diff --git a/www/templates_shared/images/fileicons/css.png b/www/templates_shared/images/fileicons/css.png new file mode 100644 index 000000000..04012041c Binary files /dev/null and b/www/templates_shared/images/fileicons/css.png differ diff --git a/www/templates_shared/images/fileicons/csv.png b/www/templates_shared/images/fileicons/csv.png new file mode 100644 index 000000000..3a8835360 Binary files /dev/null and b/www/templates_shared/images/fileicons/csv.png differ diff --git a/www/templates_shared/images/fileicons/deb.png b/www/templates_shared/images/fileicons/deb.png new file mode 100644 index 000000000..9229d8783 Binary files /dev/null and b/www/templates_shared/images/fileicons/deb.png differ diff --git a/www/templates_shared/images/fileicons/divx.png b/www/templates_shared/images/fileicons/divx.png new file mode 100644 index 000000000..98dab8f80 Binary files /dev/null and b/www/templates_shared/images/fileicons/divx.png differ diff --git a/www/templates_shared/images/fileicons/doc.png b/www/templates_shared/images/fileicons/doc.png new file mode 100644 index 000000000..932567f8a Binary files /dev/null and b/www/templates_shared/images/fileicons/doc.png differ diff --git a/www/templates_shared/images/fileicons/dot.png b/www/templates_shared/images/fileicons/dot.png new file mode 100644 index 000000000..9f2da1add Binary files /dev/null and b/www/templates_shared/images/fileicons/dot.png differ diff --git a/www/templates_shared/images/fileicons/eml.png b/www/templates_shared/images/fileicons/eml.png new file mode 100644 index 000000000..02828e173 Binary files /dev/null and b/www/templates_shared/images/fileicons/eml.png differ diff --git a/www/templates_shared/images/fileicons/enc.png b/www/templates_shared/images/fileicons/enc.png new file mode 100644 index 000000000..cb2d7d47e Binary files /dev/null and b/www/templates_shared/images/fileicons/enc.png differ diff --git a/www/templates_shared/images/fileicons/file.png b/www/templates_shared/images/fileicons/file.png new file mode 100644 index 000000000..24d5f328c Binary files /dev/null and b/www/templates_shared/images/fileicons/file.png differ diff --git a/www/templates_shared/images/fileicons/folder.png b/www/templates_shared/images/fileicons/folder.png new file mode 100644 index 000000000..784e8fa48 Binary files /dev/null and b/www/templates_shared/images/fileicons/folder.png differ diff --git a/www/templates_shared/images/fileicons/gif.png b/www/templates_shared/images/fileicons/gif.png new file mode 100644 index 000000000..b4c07a912 Binary files /dev/null and b/www/templates_shared/images/fileicons/gif.png differ diff --git a/www/templates_shared/images/fileicons/gz.png b/www/templates_shared/images/fileicons/gz.png new file mode 100644 index 000000000..2426bd169 Binary files /dev/null and b/www/templates_shared/images/fileicons/gz.png differ diff --git a/www/templates_shared/images/fileicons/hlp.png b/www/templates_shared/images/fileicons/hlp.png new file mode 100644 index 000000000..4417d8e2c Binary files /dev/null and b/www/templates_shared/images/fileicons/hlp.png differ diff --git a/www/templates_shared/images/fileicons/htm.png b/www/templates_shared/images/fileicons/htm.png new file mode 100644 index 000000000..1a6812185 Binary files /dev/null and b/www/templates_shared/images/fileicons/htm.png differ diff --git a/www/templates_shared/images/fileicons/html.png b/www/templates_shared/images/fileicons/html.png new file mode 100644 index 000000000..672cbce42 Binary files /dev/null and b/www/templates_shared/images/fileicons/html.png differ diff --git a/www/templates_shared/images/fileicons/image.png b/www/templates_shared/images/fileicons/image.png new file mode 100644 index 000000000..f83e2898d Binary files /dev/null and b/www/templates_shared/images/fileicons/image.png differ diff --git a/www/templates_shared/images/fileicons/iso.png b/www/templates_shared/images/fileicons/iso.png new file mode 100644 index 000000000..1b2ff19ca Binary files /dev/null and b/www/templates_shared/images/fileicons/iso.png differ diff --git a/www/templates_shared/images/fileicons/jar.png b/www/templates_shared/images/fileicons/jar.png new file mode 100644 index 000000000..4db70a2c7 Binary files /dev/null and b/www/templates_shared/images/fileicons/jar.png differ diff --git a/www/templates_shared/images/fileicons/java.png b/www/templates_shared/images/fileicons/java.png new file mode 100644 index 000000000..7489b9721 Binary files /dev/null and b/www/templates_shared/images/fileicons/java.png differ diff --git a/www/templates_shared/images/fileicons/jpeg.png b/www/templates_shared/images/fileicons/jpeg.png new file mode 100644 index 000000000..aa4cc23a5 Binary files /dev/null and b/www/templates_shared/images/fileicons/jpeg.png differ diff --git a/www/templates_shared/images/fileicons/jpg.png b/www/templates_shared/images/fileicons/jpg.png new file mode 100644 index 000000000..1fb6cc1fb Binary files /dev/null and b/www/templates_shared/images/fileicons/jpg.png differ diff --git a/www/templates_shared/images/fileicons/js.png b/www/templates_shared/images/fileicons/js.png new file mode 100644 index 000000000..7db4de7e9 Binary files /dev/null and b/www/templates_shared/images/fileicons/js.png differ diff --git a/www/templates_shared/images/fileicons/lua.png b/www/templates_shared/images/fileicons/lua.png new file mode 100644 index 000000000..7c07d023f Binary files /dev/null and b/www/templates_shared/images/fileicons/lua.png differ diff --git a/www/templates_shared/images/fileicons/m.png b/www/templates_shared/images/fileicons/m.png new file mode 100644 index 000000000..aa0cbae8b Binary files /dev/null and b/www/templates_shared/images/fileicons/m.png differ diff --git a/www/templates_shared/images/fileicons/m4v.png b/www/templates_shared/images/fileicons/m4v.png new file mode 100644 index 000000000..b89fc5299 Binary files /dev/null and b/www/templates_shared/images/fileicons/m4v.png differ diff --git a/www/templates_shared/images/fileicons/mkv.png b/www/templates_shared/images/fileicons/mkv.png new file mode 100644 index 000000000..b89fc5299 Binary files /dev/null and b/www/templates_shared/images/fileicons/mkv.png differ diff --git a/www/templates_shared/images/fileicons/mm.png b/www/templates_shared/images/fileicons/mm.png new file mode 100644 index 000000000..b737571c5 Binary files /dev/null and b/www/templates_shared/images/fileicons/mm.png differ diff --git a/www/templates_shared/images/fileicons/mov.png b/www/templates_shared/images/fileicons/mov.png new file mode 100644 index 000000000..7e7aa368f Binary files /dev/null and b/www/templates_shared/images/fileicons/mov.png differ diff --git a/www/templates_shared/images/fileicons/mp3.png b/www/templates_shared/images/fileicons/mp3.png new file mode 100644 index 000000000..928705d7a Binary files /dev/null and b/www/templates_shared/images/fileicons/mp3.png differ diff --git a/www/templates_shared/images/fileicons/mpg.png b/www/templates_shared/images/fileicons/mpg.png new file mode 100644 index 000000000..9a3f8ea51 Binary files /dev/null and b/www/templates_shared/images/fileicons/mpg.png differ diff --git a/www/templates_shared/images/fileicons/nfo.png b/www/templates_shared/images/fileicons/nfo.png new file mode 100644 index 000000000..da20009c6 Binary files /dev/null and b/www/templates_shared/images/fileicons/nfo.png differ diff --git a/www/templates_shared/images/fileicons/nzb.png b/www/templates_shared/images/fileicons/nzb.png new file mode 100644 index 000000000..fbd174e2d Binary files /dev/null and b/www/templates_shared/images/fileicons/nzb.png differ diff --git a/www/templates_shared/images/fileicons/odc.png b/www/templates_shared/images/fileicons/odc.png new file mode 100644 index 000000000..47f65c84d Binary files /dev/null and b/www/templates_shared/images/fileicons/odc.png differ diff --git a/www/templates_shared/images/fileicons/odf.png b/www/templates_shared/images/fileicons/odf.png new file mode 100644 index 000000000..a2fbc5195 Binary files /dev/null and b/www/templates_shared/images/fileicons/odf.png differ diff --git a/www/templates_shared/images/fileicons/odg.png b/www/templates_shared/images/fileicons/odg.png new file mode 100644 index 000000000..434f18262 Binary files /dev/null and b/www/templates_shared/images/fileicons/odg.png differ diff --git a/www/templates_shared/images/fileicons/odi.png b/www/templates_shared/images/fileicons/odi.png new file mode 100644 index 000000000..74f6303d3 Binary files /dev/null and b/www/templates_shared/images/fileicons/odi.png differ diff --git a/www/templates_shared/images/fileicons/odp.png b/www/templates_shared/images/fileicons/odp.png new file mode 100644 index 000000000..a5c77f845 Binary files /dev/null and b/www/templates_shared/images/fileicons/odp.png differ diff --git a/www/templates_shared/images/fileicons/ods.png b/www/templates_shared/images/fileicons/ods.png new file mode 100644 index 000000000..2ab1273f0 Binary files /dev/null and b/www/templates_shared/images/fileicons/ods.png differ diff --git a/www/templates_shared/images/fileicons/odt.png b/www/templates_shared/images/fileicons/odt.png new file mode 100644 index 000000000..b0c21fc1f Binary files /dev/null and b/www/templates_shared/images/fileicons/odt.png differ diff --git a/www/templates_shared/images/fileicons/ogg.png b/www/templates_shared/images/fileicons/ogg.png new file mode 100644 index 000000000..62cea6aaa Binary files /dev/null and b/www/templates_shared/images/fileicons/ogg.png differ diff --git a/www/templates_shared/images/fileicons/par2.png b/www/templates_shared/images/fileicons/par2.png new file mode 100644 index 000000000..ddffe6fd1 Binary files /dev/null and b/www/templates_shared/images/fileicons/par2.png differ diff --git a/www/templates_shared/images/fileicons/pdf.png b/www/templates_shared/images/fileicons/pdf.png new file mode 100644 index 000000000..638066dea Binary files /dev/null and b/www/templates_shared/images/fileicons/pdf.png differ diff --git a/www/templates_shared/images/fileicons/pgp.png b/www/templates_shared/images/fileicons/pgp.png new file mode 100644 index 000000000..e6b35f36e Binary files /dev/null and b/www/templates_shared/images/fileicons/pgp.png differ diff --git a/www/templates_shared/images/fileicons/php.png b/www/templates_shared/images/fileicons/php.png new file mode 100644 index 000000000..44c0fe0a0 Binary files /dev/null and b/www/templates_shared/images/fileicons/php.png differ diff --git a/www/templates_shared/images/fileicons/pl.png b/www/templates_shared/images/fileicons/pl.png new file mode 100644 index 000000000..ad2324e35 Binary files /dev/null and b/www/templates_shared/images/fileicons/pl.png differ diff --git a/www/templates_shared/images/fileicons/png.png b/www/templates_shared/images/fileicons/png.png new file mode 100644 index 000000000..f0b5b00ee Binary files /dev/null and b/www/templates_shared/images/fileicons/png.png differ diff --git a/www/templates_shared/images/fileicons/ppt.png b/www/templates_shared/images/fileicons/ppt.png new file mode 100644 index 000000000..adaefc602 Binary files /dev/null and b/www/templates_shared/images/fileicons/ppt.png differ diff --git a/www/templates_shared/images/fileicons/ps.png b/www/templates_shared/images/fileicons/ps.png new file mode 100644 index 000000000..487c3cb7c Binary files /dev/null and b/www/templates_shared/images/fileicons/ps.png differ diff --git a/www/templates_shared/images/fileicons/py.png b/www/templates_shared/images/fileicons/py.png new file mode 100644 index 000000000..9e31edb55 Binary files /dev/null and b/www/templates_shared/images/fileicons/py.png differ diff --git a/www/templates_shared/images/fileicons/ram.png b/www/templates_shared/images/fileicons/ram.png new file mode 100644 index 000000000..1a54d7654 Binary files /dev/null and b/www/templates_shared/images/fileicons/ram.png differ diff --git a/www/templates_shared/images/fileicons/rar.png b/www/templates_shared/images/fileicons/rar.png new file mode 100644 index 000000000..a6af4d1ca Binary files /dev/null and b/www/templates_shared/images/fileicons/rar.png differ diff --git a/www/templates_shared/images/fileicons/rb.png b/www/templates_shared/images/fileicons/rb.png new file mode 100644 index 000000000..30670165f Binary files /dev/null and b/www/templates_shared/images/fileicons/rb.png differ diff --git a/www/templates_shared/images/fileicons/rm.png b/www/templates_shared/images/fileicons/rm.png new file mode 100644 index 000000000..a2db68e32 Binary files /dev/null and b/www/templates_shared/images/fileicons/rm.png differ diff --git a/www/templates_shared/images/fileicons/rpm.png b/www/templates_shared/images/fileicons/rpm.png new file mode 100644 index 000000000..22212eafa Binary files /dev/null and b/www/templates_shared/images/fileicons/rpm.png differ diff --git a/www/templates_shared/images/fileicons/rtf.png b/www/templates_shared/images/fileicons/rtf.png new file mode 100644 index 000000000..d8bada5fe Binary files /dev/null and b/www/templates_shared/images/fileicons/rtf.png differ diff --git a/www/templates_shared/images/fileicons/sfv.png b/www/templates_shared/images/fileicons/sfv.png new file mode 100644 index 000000000..da20009c6 Binary files /dev/null and b/www/templates_shared/images/fileicons/sfv.png differ diff --git a/www/templates_shared/images/fileicons/sig.png b/www/templates_shared/images/fileicons/sig.png new file mode 100644 index 000000000..3d8b19d2b Binary files /dev/null and b/www/templates_shared/images/fileicons/sig.png differ diff --git a/www/templates_shared/images/fileicons/sql.png b/www/templates_shared/images/fileicons/sql.png new file mode 100644 index 000000000..f60054a3a Binary files /dev/null and b/www/templates_shared/images/fileicons/sql.png differ diff --git a/www/templates_shared/images/fileicons/srr.png b/www/templates_shared/images/fileicons/srr.png new file mode 100644 index 000000000..da20009c6 Binary files /dev/null and b/www/templates_shared/images/fileicons/srr.png differ diff --git a/www/templates_shared/images/fileicons/srs.png b/www/templates_shared/images/fileicons/srs.png new file mode 100644 index 000000000..fbd174e2d Binary files /dev/null and b/www/templates_shared/images/fileicons/srs.png differ diff --git a/www/templates_shared/images/fileicons/srt.png b/www/templates_shared/images/fileicons/srt.png new file mode 100644 index 000000000..da20009c6 Binary files /dev/null and b/www/templates_shared/images/fileicons/srt.png differ diff --git a/www/templates_shared/images/fileicons/swf.png b/www/templates_shared/images/fileicons/swf.png new file mode 100644 index 000000000..0729ed020 Binary files /dev/null and b/www/templates_shared/images/fileicons/swf.png differ diff --git a/www/templates_shared/images/fileicons/sxc.png b/www/templates_shared/images/fileicons/sxc.png new file mode 100644 index 000000000..419c183c1 Binary files /dev/null and b/www/templates_shared/images/fileicons/sxc.png differ diff --git a/www/templates_shared/images/fileicons/sxd.png b/www/templates_shared/images/fileicons/sxd.png new file mode 100644 index 000000000..5801bb23a Binary files /dev/null and b/www/templates_shared/images/fileicons/sxd.png differ diff --git a/www/templates_shared/images/fileicons/sxi.png b/www/templates_shared/images/fileicons/sxi.png new file mode 100644 index 000000000..2a94290d7 Binary files /dev/null and b/www/templates_shared/images/fileicons/sxi.png differ diff --git a/www/templates_shared/images/fileicons/sxw.png b/www/templates_shared/images/fileicons/sxw.png new file mode 100644 index 000000000..6da97beb3 Binary files /dev/null and b/www/templates_shared/images/fileicons/sxw.png differ diff --git a/www/templates_shared/images/fileicons/tar.png b/www/templates_shared/images/fileicons/tar.png new file mode 100644 index 000000000..5a2f717fc Binary files /dev/null and b/www/templates_shared/images/fileicons/tar.png differ diff --git a/www/templates_shared/images/fileicons/tex.png b/www/templates_shared/images/fileicons/tex.png new file mode 100644 index 000000000..e46a5166f Binary files /dev/null and b/www/templates_shared/images/fileicons/tex.png differ diff --git a/www/templates_shared/images/fileicons/tgz.png b/www/templates_shared/images/fileicons/tgz.png new file mode 100644 index 000000000..141acf564 Binary files /dev/null and b/www/templates_shared/images/fileicons/tgz.png differ diff --git a/www/templates_shared/images/fileicons/txt.png b/www/templates_shared/images/fileicons/txt.png new file mode 100644 index 000000000..da20009c6 Binary files /dev/null and b/www/templates_shared/images/fileicons/txt.png differ diff --git a/www/templates_shared/images/fileicons/url.png b/www/templates_shared/images/fileicons/url.png new file mode 100644 index 000000000..672cbce42 Binary files /dev/null and b/www/templates_shared/images/fileicons/url.png differ diff --git a/www/templates_shared/images/fileicons/vcf.png b/www/templates_shared/images/fileicons/vcf.png new file mode 100644 index 000000000..195ab38bc Binary files /dev/null and b/www/templates_shared/images/fileicons/vcf.png differ diff --git a/www/templates_shared/images/fileicons/video.png b/www/templates_shared/images/fileicons/video.png new file mode 100644 index 000000000..b89fc5299 Binary files /dev/null and b/www/templates_shared/images/fileicons/video.png differ diff --git a/www/templates_shared/images/fileicons/vsd.png b/www/templates_shared/images/fileicons/vsd.png new file mode 100644 index 000000000..d14b81d98 Binary files /dev/null and b/www/templates_shared/images/fileicons/vsd.png differ diff --git a/www/templates_shared/images/fileicons/wav.png b/www/templates_shared/images/fileicons/wav.png new file mode 100644 index 000000000..79e80760e Binary files /dev/null and b/www/templates_shared/images/fileicons/wav.png differ diff --git a/www/templates_shared/images/fileicons/wma.png b/www/templates_shared/images/fileicons/wma.png new file mode 100644 index 000000000..6854de772 Binary files /dev/null and b/www/templates_shared/images/fileicons/wma.png differ diff --git a/www/templates_shared/images/fileicons/wmv.png b/www/templates_shared/images/fileicons/wmv.png new file mode 100644 index 000000000..b26f45d5f Binary files /dev/null and b/www/templates_shared/images/fileicons/wmv.png differ diff --git a/www/templates_shared/images/fileicons/xls.png b/www/templates_shared/images/fileicons/xls.png new file mode 100644 index 000000000..e8cd58dc0 Binary files /dev/null and b/www/templates_shared/images/fileicons/xls.png differ diff --git a/www/templates_shared/images/fileicons/xml.png b/www/templates_shared/images/fileicons/xml.png new file mode 100644 index 000000000..eb4632397 Binary files /dev/null and b/www/templates_shared/images/fileicons/xml.png differ diff --git a/www/templates_shared/images/fileicons/xpi.png b/www/templates_shared/images/fileicons/xpi.png new file mode 100644 index 000000000..5e537e237 Binary files /dev/null and b/www/templates_shared/images/fileicons/xpi.png differ diff --git a/www/templates_shared/images/fileicons/xvid.png b/www/templates_shared/images/fileicons/xvid.png new file mode 100644 index 000000000..d8429dc1a Binary files /dev/null and b/www/templates_shared/images/fileicons/xvid.png differ diff --git a/www/templates_shared/images/fileicons/zip.png b/www/templates_shared/images/fileicons/zip.png new file mode 100644 index 000000000..999ffbe80 Binary files /dev/null and b/www/templates_shared/images/fileicons/zip.png differ diff --git a/www/templates_shared/images/flags/cn.png b/www/templates_shared/images/flags/cn.png new file mode 100644 index 000000000..891441462 Binary files /dev/null and b/www/templates_shared/images/flags/cn.png differ diff --git a/www/templates_shared/images/flags/cz.png b/www/templates_shared/images/flags/cz.png new file mode 100644 index 000000000..c8403dd21 Binary files /dev/null and b/www/templates_shared/images/flags/cz.png differ diff --git a/www/templates_shared/images/flags/de.png b/www/templates_shared/images/flags/de.png new file mode 100644 index 000000000..ac4a97736 Binary files /dev/null and b/www/templates_shared/images/flags/de.png differ diff --git a/www/templates_shared/images/flags/dk.png b/www/templates_shared/images/flags/dk.png new file mode 100644 index 000000000..5253b65ff Binary files /dev/null and b/www/templates_shared/images/flags/dk.png differ diff --git a/www/templates_shared/images/flags/en.png b/www/templates_shared/images/flags/en.png new file mode 100644 index 000000000..6a7ae5f9f Binary files /dev/null and b/www/templates_shared/images/flags/en.png differ diff --git a/www/templates_shared/images/flags/es.png b/www/templates_shared/images/flags/es.png new file mode 100644 index 000000000..c2de2d711 Binary files /dev/null and b/www/templates_shared/images/flags/es.png differ diff --git a/www/templates_shared/images/flags/fi.png b/www/templates_shared/images/flags/fi.png new file mode 100644 index 000000000..14ec091b8 Binary files /dev/null and b/www/templates_shared/images/flags/fi.png differ diff --git a/www/templates_shared/images/flags/fr.png b/www/templates_shared/images/flags/fr.png new file mode 100644 index 000000000..8332c4ec2 Binary files /dev/null and b/www/templates_shared/images/flags/fr.png differ diff --git a/www/templates_shared/images/flags/gb.png b/www/templates_shared/images/flags/gb.png new file mode 100644 index 000000000..01a9e073d Binary files /dev/null and b/www/templates_shared/images/flags/gb.png differ diff --git a/www/templates_shared/images/flags/gr.png b/www/templates_shared/images/flags/gr.png new file mode 100644 index 000000000..8651ade7c Binary files /dev/null and b/www/templates_shared/images/flags/gr.png differ diff --git a/www/templates_shared/images/flags/hu.png b/www/templates_shared/images/flags/hu.png new file mode 100644 index 000000000..7baafe44d Binary files /dev/null and b/www/templates_shared/images/flags/hu.png differ diff --git a/www/templates_shared/images/flags/il.png b/www/templates_shared/images/flags/il.png new file mode 100644 index 000000000..2ca772d0b Binary files /dev/null and b/www/templates_shared/images/flags/il.png differ diff --git a/www/templates_shared/images/flags/in.png b/www/templates_shared/images/flags/in.png new file mode 100644 index 000000000..e4d7e81a9 Binary files /dev/null and b/www/templates_shared/images/flags/in.png differ diff --git a/www/templates_shared/images/flags/it.png b/www/templates_shared/images/flags/it.png new file mode 100644 index 000000000..89692f74f Binary files /dev/null and b/www/templates_shared/images/flags/it.png differ diff --git a/www/templates_shared/images/flags/jp.png b/www/templates_shared/images/flags/jp.png new file mode 100644 index 000000000..325fbad3f Binary files /dev/null and b/www/templates_shared/images/flags/jp.png differ diff --git a/www/templates_shared/images/flags/kr.png b/www/templates_shared/images/flags/kr.png new file mode 100644 index 000000000..9c0a78eb9 Binary files /dev/null and b/www/templates_shared/images/flags/kr.png differ diff --git a/www/templates_shared/images/flags/nl.png b/www/templates_shared/images/flags/nl.png new file mode 100644 index 000000000..fe44791e3 Binary files /dev/null and b/www/templates_shared/images/flags/nl.png differ diff --git a/www/templates_shared/images/flags/no.png b/www/templates_shared/images/flags/no.png new file mode 100644 index 000000000..160b6b5b7 Binary files /dev/null and b/www/templates_shared/images/flags/no.png differ diff --git a/www/templates_shared/images/flags/ph.png b/www/templates_shared/images/flags/ph.png new file mode 100644 index 000000000..b89e15935 Binary files /dev/null and b/www/templates_shared/images/flags/ph.png differ diff --git a/www/templates_shared/images/flags/pk.png b/www/templates_shared/images/flags/pk.png new file mode 100644 index 000000000..e9df70ca4 Binary files /dev/null and b/www/templates_shared/images/flags/pk.png differ diff --git a/www/templates_shared/images/flags/pl.png b/www/templates_shared/images/flags/pl.png new file mode 100644 index 000000000..d413d010b Binary files /dev/null and b/www/templates_shared/images/flags/pl.png differ diff --git a/www/templates_shared/images/flags/pt.png b/www/templates_shared/images/flags/pt.png new file mode 100644 index 000000000..ece798015 Binary files /dev/null and b/www/templates_shared/images/flags/pt.png differ diff --git a/www/templates_shared/images/flags/ro.png b/www/templates_shared/images/flags/ro.png new file mode 100644 index 000000000..57e74a651 Binary files /dev/null and b/www/templates_shared/images/flags/ro.png differ diff --git a/www/templates_shared/images/flags/ru.png b/www/templates_shared/images/flags/ru.png new file mode 100644 index 000000000..47da4214f Binary files /dev/null and b/www/templates_shared/images/flags/ru.png differ diff --git a/www/templates_shared/images/flags/se.png b/www/templates_shared/images/flags/se.png new file mode 100644 index 000000000..1994653da Binary files /dev/null and b/www/templates_shared/images/flags/se.png differ diff --git a/www/templates_shared/images/flags/th.png b/www/templates_shared/images/flags/th.png new file mode 100644 index 000000000..dd8ba9171 Binary files /dev/null and b/www/templates_shared/images/flags/th.png differ diff --git a/www/templates_shared/images/flags/tr.png b/www/templates_shared/images/flags/tr.png new file mode 100644 index 000000000..be32f77e9 Binary files /dev/null and b/www/templates_shared/images/flags/tr.png differ diff --git a/www/templates_shared/images/flags/tw.png b/www/templates_shared/images/flags/tw.png new file mode 100644 index 000000000..f31c654c9 Binary files /dev/null and b/www/templates_shared/images/flags/tw.png differ diff --git a/www/templates_shared/images/flags/us.png b/www/templates_shared/images/flags/us.png new file mode 100644 index 000000000..22afb1abd Binary files /dev/null and b/www/templates_shared/images/flags/us.png differ diff --git a/www/templates_shared/images/flags/vn.png b/www/templates_shared/images/flags/vn.png new file mode 100644 index 000000000..ec7cd48a3 Binary files /dev/null and b/www/templates_shared/images/flags/vn.png differ diff --git a/www/templates_shared/images/icons/ade.png b/www/templates_shared/images/icons/ade.png new file mode 100644 index 000000000..6a94eb4b2 Binary files /dev/null and b/www/templates_shared/images/icons/ade.png differ diff --git a/www/templates_shared/images/icons/aebn.png b/www/templates_shared/images/icons/aebn.png new file mode 100644 index 000000000..91d45b5c7 Binary files /dev/null and b/www/templates_shared/images/icons/aebn.png differ diff --git a/www/templates_shared/images/icons/allmusic.png b/www/templates_shared/images/icons/allmusic.png new file mode 100644 index 000000000..c2ef310e8 Binary files /dev/null and b/www/templates_shared/images/icons/allmusic.png differ diff --git a/www/templates_shared/images/icons/amazon.png b/www/templates_shared/images/icons/amazon.png new file mode 100644 index 000000000..70f8d4fd5 Binary files /dev/null and b/www/templates_shared/images/icons/amazon.png differ diff --git a/www/templates_shared/images/icons/binsearch.png b/www/templates_shared/images/icons/binsearch.png new file mode 100644 index 000000000..afe5c23a3 Binary files /dev/null and b/www/templates_shared/images/icons/binsearch.png differ diff --git a/www/templates_shared/images/icons/broken.png b/www/templates_shared/images/icons/broken.png new file mode 100644 index 000000000..9af03554f Binary files /dev/null and b/www/templates_shared/images/icons/broken.png differ diff --git a/www/templates_shared/images/icons/cartdown.png b/www/templates_shared/images/icons/cartdown.png new file mode 100644 index 000000000..f7326419e Binary files /dev/null and b/www/templates_shared/images/icons/cartdown.png differ diff --git a/www/templates_shared/images/icons/cartup.png b/www/templates_shared/images/icons/cartup.png new file mode 100644 index 000000000..a817a9f19 Binary files /dev/null and b/www/templates_shared/images/icons/cartup.png differ diff --git a/www/templates_shared/images/icons/check.png b/www/templates_shared/images/icons/check.png new file mode 100644 index 000000000..daf00c05f Binary files /dev/null and b/www/templates_shared/images/icons/check.png differ diff --git a/www/templates_shared/images/icons/couch.png b/www/templates_shared/images/icons/couch.png new file mode 100644 index 000000000..ab14bb06b Binary files /dev/null and b/www/templates_shared/images/icons/couch.png differ diff --git a/www/templates_shared/images/icons/desura.png b/www/templates_shared/images/icons/desura.png new file mode 100644 index 000000000..23c0391ca Binary files /dev/null and b/www/templates_shared/images/icons/desura.png differ diff --git a/www/templates_shared/images/icons/discogs.png b/www/templates_shared/images/icons/discogs.png new file mode 100644 index 000000000..1de9bb920 Binary files /dev/null and b/www/templates_shared/images/icons/discogs.png differ diff --git a/www/templates_shared/images/icons/edit.gif b/www/templates_shared/images/icons/edit.gif new file mode 100644 index 000000000..5e82fa9ea Binary files /dev/null and b/www/templates_shared/images/icons/edit.gif differ diff --git a/www/templates_shared/images/icons/exclamation.png b/www/templates_shared/images/icons/exclamation.png new file mode 100644 index 000000000..c37bd062e Binary files /dev/null and b/www/templates_shared/images/icons/exclamation.png differ diff --git a/www/templates_shared/images/icons/fresh.png b/www/templates_shared/images/icons/fresh.png new file mode 100644 index 000000000..eedb799be Binary files /dev/null and b/www/templates_shared/images/icons/fresh.png differ diff --git a/www/templates_shared/images/icons/gamespot.png b/www/templates_shared/images/icons/gamespot.png new file mode 100644 index 000000000..42d01f7e8 Binary files /dev/null and b/www/templates_shared/images/icons/gamespot.png differ diff --git a/www/templates_shared/images/icons/giantbomb.png b/www/templates_shared/images/icons/giantbomb.png new file mode 100644 index 000000000..e1f450c5f Binary files /dev/null and b/www/templates_shared/images/icons/giantbomb.png differ diff --git a/www/templates_shared/images/icons/go.png b/www/templates_shared/images/icons/go.png new file mode 100644 index 000000000..1dab13594 Binary files /dev/null and b/www/templates_shared/images/icons/go.png differ diff --git a/www/templates_shared/images/icons/goodreads.png b/www/templates_shared/images/icons/goodreads.png new file mode 100644 index 000000000..58091f3b1 Binary files /dev/null and b/www/templates_shared/images/icons/goodreads.png differ diff --git a/www/templates_shared/images/icons/greenlight.png b/www/templates_shared/images/icons/greenlight.png new file mode 100644 index 000000000..8947f93b1 Binary files /dev/null and b/www/templates_shared/images/icons/greenlight.png differ diff --git a/www/templates_shared/images/icons/hotmovies.png b/www/templates_shared/images/icons/hotmovies.png new file mode 100644 index 000000000..376a1472c Binary files /dev/null and b/www/templates_shared/images/icons/hotmovies.png differ diff --git a/www/templates_shared/images/icons/iafd.png b/www/templates_shared/images/icons/iafd.png new file mode 100644 index 000000000..1673ab6f4 Binary files /dev/null and b/www/templates_shared/images/icons/iafd.png differ diff --git a/www/templates_shared/images/icons/ign.png b/www/templates_shared/images/icons/ign.png new file mode 100644 index 000000000..dc9f0cd76 Binary files /dev/null and b/www/templates_shared/images/icons/ign.png differ diff --git a/www/templates_shared/images/icons/imdb.png b/www/templates_shared/images/icons/imdb.png new file mode 100644 index 000000000..16c2d97dd Binary files /dev/null and b/www/templates_shared/images/icons/imdb.png differ diff --git a/www/templates_shared/images/icons/information.png b/www/templates_shared/images/icons/information.png new file mode 100644 index 000000000..12cd1aef9 Binary files /dev/null and b/www/templates_shared/images/icons/information.png differ diff --git a/www/templates_shared/images/icons/lastfm.png b/www/templates_shared/images/icons/lastfm.png new file mode 100644 index 000000000..74320e783 Binary files /dev/null and b/www/templates_shared/images/icons/lastfm.png differ diff --git a/www/templates_shared/images/icons/lock.gif b/www/templates_shared/images/icons/lock.gif new file mode 100644 index 000000000..0a225b852 Binary files /dev/null and b/www/templates_shared/images/icons/lock.gif differ diff --git a/www/templates_shared/images/icons/lock2.png b/www/templates_shared/images/icons/lock2.png new file mode 100644 index 000000000..ad12261a5 Binary files /dev/null and b/www/templates_shared/images/icons/lock2.png differ diff --git a/www/templates_shared/images/icons/magnifier.png b/www/templates_shared/images/icons/magnifier.png new file mode 100644 index 000000000..545a6a907 Binary files /dev/null and b/www/templates_shared/images/icons/magnifier.png differ diff --git a/www/templates_shared/images/icons/note.png b/www/templates_shared/images/icons/note.png new file mode 100644 index 000000000..244e6ca04 Binary files /dev/null and b/www/templates_shared/images/icons/note.png differ diff --git a/www/templates_shared/images/icons/note_add.png b/www/templates_shared/images/icons/note_add.png new file mode 100644 index 000000000..abdad91eb Binary files /dev/null and b/www/templates_shared/images/icons/note_add.png differ diff --git a/www/templates_shared/images/icons/note_edit.png b/www/templates_shared/images/icons/note_edit.png new file mode 100644 index 000000000..291bfc764 Binary files /dev/null and b/www/templates_shared/images/icons/note_edit.png differ diff --git a/www/templates_shared/images/icons/nuke.png b/www/templates_shared/images/icons/nuke.png new file mode 100644 index 000000000..2d0e42f02 Binary files /dev/null and b/www/templates_shared/images/icons/nuke.png differ diff --git a/www/templates_shared/images/icons/nuked.png b/www/templates_shared/images/icons/nuked.png new file mode 100644 index 000000000..558e95bf8 Binary files /dev/null and b/www/templates_shared/images/icons/nuked.png differ diff --git a/www/templates_shared/images/icons/nzbdown.png b/www/templates_shared/images/icons/nzbdown.png new file mode 100644 index 000000000..7dd6bcf0d Binary files /dev/null and b/www/templates_shared/images/icons/nzbdown.png differ diff --git a/www/templates_shared/images/icons/nzbindex.png b/www/templates_shared/images/icons/nzbindex.png new file mode 100644 index 000000000..eb18ea0af Binary files /dev/null and b/www/templates_shared/images/icons/nzbindex.png differ diff --git a/www/templates_shared/images/icons/nzbup.png b/www/templates_shared/images/icons/nzbup.png new file mode 100644 index 000000000..391f3abc9 Binary files /dev/null and b/www/templates_shared/images/icons/nzbup.png differ diff --git a/www/templates_shared/images/icons/popporn.png b/www/templates_shared/images/icons/popporn.png new file mode 100644 index 000000000..7e90684f9 Binary files /dev/null and b/www/templates_shared/images/icons/popporn.png differ diff --git a/www/templates_shared/images/icons/predbme.png b/www/templates_shared/images/icons/predbme.png new file mode 100644 index 000000000..9bfbc4dde Binary files /dev/null and b/www/templates_shared/images/icons/predbme.png differ diff --git a/www/templates_shared/images/icons/queuedown.png b/www/templates_shared/images/icons/queuedown.png new file mode 100644 index 000000000..ba96aac6e Binary files /dev/null and b/www/templates_shared/images/icons/queuedown.png differ diff --git a/www/templates_shared/images/icons/queueup.png b/www/templates_shared/images/icons/queueup.png new file mode 100644 index 000000000..4d0f9a569 Binary files /dev/null and b/www/templates_shared/images/icons/queueup.png differ diff --git a/www/templates_shared/images/icons/rotten.png b/www/templates_shared/images/icons/rotten.png new file mode 100644 index 000000000..4ef2358c3 Binary files /dev/null and b/www/templates_shared/images/icons/rotten.png differ diff --git a/www/templates_shared/images/icons/rottentomatoes.png b/www/templates_shared/images/icons/rottentomatoes.png new file mode 100644 index 000000000..e771d12ab Binary files /dev/null and b/www/templates_shared/images/icons/rottentomatoes.png differ diff --git a/www/templates_shared/images/icons/sabdown.png b/www/templates_shared/images/icons/sabdown.png new file mode 100644 index 000000000..237313d1c Binary files /dev/null and b/www/templates_shared/images/icons/sabdown.png differ diff --git a/www/templates_shared/images/icons/sabup.png b/www/templates_shared/images/icons/sabup.png new file mode 100644 index 000000000..ed512086d Binary files /dev/null and b/www/templates_shared/images/icons/sabup.png differ diff --git a/www/templates_shared/images/icons/shelfari.png b/www/templates_shared/images/icons/shelfari.png new file mode 100644 index 000000000..99d752eac Binary files /dev/null and b/www/templates_shared/images/icons/shelfari.png differ diff --git a/www/templates_shared/images/icons/steam.png b/www/templates_shared/images/icons/steam.png new file mode 100644 index 000000000..8947f93b1 Binary files /dev/null and b/www/templates_shared/images/icons/steam.png differ diff --git a/www/templates_shared/images/icons/switch.png b/www/templates_shared/images/icons/switch.png new file mode 100644 index 000000000..7accb6ac4 Binary files /dev/null and b/www/templates_shared/images/icons/switch.png differ diff --git a/www/templates_shared/images/icons/trakt.png b/www/templates_shared/images/icons/trakt.png new file mode 100644 index 000000000..a96881526 Binary files /dev/null and b/www/templates_shared/images/icons/trakt.png differ diff --git a/www/templates_shared/images/icons/tvrage.png b/www/templates_shared/images/icons/tvrage.png new file mode 100644 index 000000000..1fcc64614 Binary files /dev/null and b/www/templates_shared/images/icons/tvrage.png differ diff --git a/www/templates_shared/images/icons/unnuked.png b/www/templates_shared/images/icons/unnuked.png new file mode 100644 index 000000000..14bade3d2 Binary files /dev/null and b/www/templates_shared/images/icons/unnuked.png differ diff --git a/www/templates_shared/images/icons/vortex/arrow2_n.png b/www/templates_shared/images/icons/vortex/arrow2_n.png new file mode 100644 index 000000000..dc41b02cf Binary files /dev/null and b/www/templates_shared/images/icons/vortex/arrow2_n.png differ diff --git a/www/templates_shared/images/icons/vortex/arrow2_s.png b/www/templates_shared/images/icons/vortex/arrow2_s.png new file mode 100644 index 000000000..0bbfe97d2 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/arrow2_s.png differ diff --git a/www/templates_shared/images/icons/vortex/arrow3_n.png b/www/templates_shared/images/icons/vortex/arrow3_n.png new file mode 100644 index 000000000..c2ef2cd6a Binary files /dev/null and b/www/templates_shared/images/icons/vortex/arrow3_n.png differ diff --git a/www/templates_shared/images/icons/vortex/arrow3_s.png b/www/templates_shared/images/icons/vortex/arrow3_s.png new file mode 100644 index 000000000..d654f40f5 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/arrow3_s.png differ diff --git a/www/templates_shared/images/icons/vortex/bigsmile.png b/www/templates_shared/images/icons/vortex/bigsmile.png new file mode 100644 index 000000000..5edfa84b6 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/bigsmile.png differ diff --git a/www/templates_shared/images/icons/vortex/bigsmiledown.png b/www/templates_shared/images/icons/vortex/bigsmiledown.png new file mode 100644 index 000000000..e9519a0a3 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/bigsmiledown.png differ diff --git a/www/templates_shared/images/icons/vortex/blah.png b/www/templates_shared/images/icons/vortex/blah.png new file mode 100644 index 000000000..f46608de9 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/blah.png differ diff --git a/www/templates_shared/images/icons/vortex/edit.png b/www/templates_shared/images/icons/vortex/edit.png new file mode 100644 index 000000000..6f582ec47 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/edit.png differ diff --git a/www/templates_shared/images/icons/vortex/frown.png b/www/templates_shared/images/icons/vortex/frown.png new file mode 100644 index 000000000..bc56f7c82 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/frown.png differ diff --git a/www/templates_shared/images/icons/vortex/pause.png b/www/templates_shared/images/icons/vortex/pause.png new file mode 100644 index 000000000..b3b058760 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/pause.png differ diff --git a/www/templates_shared/images/icons/vortex/play.png b/www/templates_shared/images/icons/vortex/play.png new file mode 100644 index 000000000..a8b88e102 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/play.png differ diff --git a/www/templates_shared/images/icons/vortex/stop.png b/www/templates_shared/images/icons/vortex/stop.png new file mode 100644 index 000000000..ae257e6d9 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/stop.png differ diff --git a/www/templates_shared/images/icons/vortex/trash.png b/www/templates_shared/images/icons/vortex/trash.png new file mode 100644 index 000000000..8ea124f88 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/trash.png differ diff --git a/www/templates_shared/images/icons/vortex/tv.png b/www/templates_shared/images/icons/vortex/tv.png new file mode 100644 index 000000000..935e6f2f8 Binary files /dev/null and b/www/templates_shared/images/icons/vortex/tv.png differ diff --git a/www/templates_shared/images/icons/warning.png b/www/templates_shared/images/icons/warning.png new file mode 100644 index 000000000..14c51d6c1 Binary files /dev/null and b/www/templates_shared/images/icons/warning.png differ diff --git a/www/templates_shared/images/logo_large.png b/www/templates_shared/images/logo_large.png new file mode 100644 index 000000000..71ccfc2f4 Binary files /dev/null and b/www/templates_shared/images/logo_large.png differ diff --git a/www/templates_shared/images/logo_largeplus.png b/www/templates_shared/images/logo_largeplus.png new file mode 100644 index 000000000..de4167db7 Binary files /dev/null and b/www/templates_shared/images/logo_largeplus.png differ diff --git a/www/templates_shared/images/logo_largeplushigh.png b/www/templates_shared/images/logo_largeplushigh.png new file mode 100644 index 000000000..24cacf486 Binary files /dev/null and b/www/templates_shared/images/logo_largeplushigh.png differ diff --git a/www/templates_shared/images/menu.gif b/www/templates_shared/images/menu.gif new file mode 100644 index 000000000..6d0ae0ad8 Binary files /dev/null and b/www/templates_shared/images/menu.gif differ diff --git a/www/templates_shared/images/multimedia/audio.png b/www/templates_shared/images/multimedia/audio.png new file mode 100644 index 000000000..d67a4bb2a Binary files /dev/null and b/www/templates_shared/images/multimedia/audio.png differ diff --git a/www/templates_shared/images/multimedia/video.png b/www/templates_shared/images/multimedia/video.png new file mode 100644 index 000000000..2a6bfc24a Binary files /dev/null and b/www/templates_shared/images/multimedia/video.png differ diff --git a/www/templates_shared/images/nav-tile.png b/www/templates_shared/images/nav-tile.png new file mode 100644 index 000000000..171b3c369 Binary files /dev/null and b/www/templates_shared/images/nav-tile.png differ diff --git a/www/templates_shared/images/newwindow.png b/www/templates_shared/images/newwindow.png new file mode 100644 index 000000000..b8782b585 Binary files /dev/null and b/www/templates_shared/images/newwindow.png differ diff --git a/www/templates_shared/images/nn_small.jpg b/www/templates_shared/images/nn_small.jpg new file mode 100644 index 000000000..33b38918f Binary files /dev/null and b/www/templates_shared/images/nn_small.jpg differ diff --git a/www/templates_shared/images/nzbget.png b/www/templates_shared/images/nzbget.png new file mode 100644 index 000000000..1d9d1177b Binary files /dev/null and b/www/templates_shared/images/nzbget.png differ diff --git a/www/templates_shared/images/powered.png b/www/templates_shared/images/powered.png new file mode 100644 index 000000000..d7ed21cf6 Binary files /dev/null and b/www/templates_shared/images/powered.png differ diff --git a/www/templates_shared/images/sabnzbd.png b/www/templates_shared/images/sabnzbd.png new file mode 100644 index 000000000..99ca8c9d8 Binary files /dev/null and b/www/templates_shared/images/sabnzbd.png differ diff --git a/www/templates_shared/images/sickbeard.png b/www/templates_shared/images/sickbeard.png new file mode 100644 index 000000000..5a5115eb4 Binary files /dev/null and b/www/templates_shared/images/sickbeard.png differ diff --git a/www/templates_shared/images/sorting/arrow_down.gif b/www/templates_shared/images/sorting/arrow_down.gif new file mode 100644 index 000000000..861bd1c6d Binary files /dev/null and b/www/templates_shared/images/sorting/arrow_down.gif differ diff --git a/www/templates_shared/images/sorting/arrow_up.gif b/www/templates_shared/images/sorting/arrow_up.gif new file mode 100644 index 000000000..677684dde Binary files /dev/null and b/www/templates_shared/images/sorting/arrow_up.gif differ diff --git a/www/templates_shared/images/tvrage_small.gif b/www/templates_shared/images/tvrage_small.gif new file mode 100644 index 000000000..6d8ec8993 Binary files /dev/null and b/www/templates_shared/images/tvrage_small.gif differ diff --git a/www/templates_shared/images/valid-xhtml10.png b/www/templates_shared/images/valid-xhtml10.png new file mode 100644 index 000000000..b81de9160 Binary files /dev/null and b/www/templates_shared/images/valid-xhtml10.png differ diff --git a/www/templates_shared/scripts/bootstrap.min.js b/www/templates_shared/scripts/bootstrap.min.js new file mode 100644 index 000000000..87313dbdd --- /dev/null +++ b/www/templates_shared/scripts/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.4 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-mp.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/www/templates_shared/scripts/holder.js b/www/templates_shared/scripts/holder.js new file mode 100644 index 000000000..13612b12f --- /dev/null +++ b/www/templates_shared/scripts/holder.js @@ -0,0 +1,419 @@ +/* + +Holder - 2.0 - client side image placeholders +(c) 2012-2013 Ivan Malopinsky / http://imsky.co + +Provided under the Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0 +Commercial use requires attribution. + +*/ + +var Holder = Holder || {}; +(function (app, win) { + +var preempted = false, +fallback = false, +canvas = document.createElement('canvas'); + +//getElementsByClassName polyfill +document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i= 0.75) { + text_height = Math.floor(text_height * 0.75 * (width/text_width)); + } + //Resetting font size if necessary + ctx.font = "bold " + (text_height * ratio) + "px " + font; + ctx.fillText(text, (width / 2), (height / 2), width); + return canvas.toDataURL("image/png"); +} + +function render(mode, el, holder, src) { + var dimensions = holder.dimensions, + theme = holder.theme, + text = holder.text ? decodeURIComponent(holder.text) : holder.text; + var dimensions_caption = dimensions.width + "x" + dimensions.height; + theme = (text ? extend(theme, { + text: text + }) : theme); + theme = (holder.font ? extend(theme, { + font: holder.font + }) : theme); + if (mode == "image") { + el.setAttribute("data-src", src); + el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); + if (fallback || !holder.auto) { + el.style.width = dimensions.width + "px"; + el.style.height = dimensions.height + "px"; + } + if (fallback) { + el.style.backgroundColor = theme.background; + } else { + el.setAttribute("src", draw(ctx, dimensions, theme, ratio)); + } + } else if (mode == "background") { + if (!fallback) { + el.style.backgroundImage = "url(" + draw(ctx, dimensions, theme, ratio) + ")"; + el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px"; + } + } else if (mode == "fluid") { + el.setAttribute("data-src", src); + el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); + if (dimensions.height.substr(-1) == "%") { + el.style.height = dimensions.height + } else { + el.style.height = dimensions.height + "px" + } + if (dimensions.width.substr(-1) == "%") { + el.style.width = dimensions.width + } else { + el.style.width = dimensions.width + "px" + } + if (el.style.display == "inline" || el.style.display == "") { + el.style.display = "block"; + } + if (fallback) { + el.style.backgroundColor = theme.background; + } else { + el.holderData = holder; + fluid_images.push(el); + fluid_update(el); + } + } +}; + +function fluid_update(element) { + var images; + if (element.nodeType == null) { + images = fluid_images; + } else { + images = [element] + } + for (i in images) { + var el = images[i] + if (el.holderData) { + var holder = el.holderData; + el.setAttribute("src", draw(ctx, { + height: el.clientHeight, + width: el.clientWidth + }, holder.theme, ratio)); + } + } +} + +function parse_flags(flags, options) { + + var ret = { + theme: settings.themes.gray + }, render = false; + + for (sl = flags.length, j = 0; j < sl; j++) { + var flag = flags[j]; + if (app.flags.dimensions.match(flag)) { + render = true; + ret.dimensions = app.flags.dimensions.output(flag); + } else if (app.flags.fluid.match(flag)) { + render = true; + ret.dimensions = app.flags.fluid.output(flag); + ret.fluid = true; + } else if (app.flags.colors.match(flag)) { + ret.theme = app.flags.colors.output(flag); + } else if (options.themes[flag]) { + //If a theme is specified, it will override custom colors + ret.theme = options.themes[flag]; + } else if (app.flags.text.match(flag)) { + ret.text = app.flags.text.output(flag); + } else if (app.flags.font.match(flag)) { + ret.font = app.flags.font.output(flag); + } else if (app.flags.auto.match(flag)) { + ret.auto = true; + } + } + + return render ? ret : false; + +}; + + + +if (!canvas.getContext) { + fallback = true; +} else { + if (canvas.toDataURL("image/png") + .indexOf("data:image/png") < 0) { + //Android doesn't support data URI + fallback = true; + } else { + var ctx = canvas.getContext("2d"); + } +} + +var dpr = 1, bsr = 1; + +if(!fallback){ + dpr = window.devicePixelRatio || 1, + bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; +} + +var ratio = dpr / bsr; + +var fluid_images = []; + +var settings = { + domain: "holder.js", + images: "img", + bgnodes: ".holderjs", + themes: { + "gray": { + background: "#eee", + foreground: "#aaa", + size: 12 + }, + "social": { + background: "#3a5a97", + foreground: "#fff", + size: 12 + }, + "industrial": { + background: "#434A52", + foreground: "#C2F200", + size: 12 + } + }, + stylesheet: "" +}; + + +app.flags = { + dimensions: { + regex: /^(\d+)x(\d+)$/, + output: function (val) { + var exec = this.regex.exec(val); + return { + width: +exec[1], + height: +exec[2] + } + } + }, + fluid: { + regex: /^([0-9%]+)x([0-9%]+)$/, + output: function (val) { + var exec = this.regex.exec(val); + return { + width: exec[1], + height: exec[2] + } + } + }, + colors: { + regex: /#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i, + output: function (val) { + var exec = this.regex.exec(val); + return { + size: settings.themes.gray.size, + foreground: "#" + exec[2], + background: "#" + exec[1] + } + } + }, + text: { + regex: /text\:(.*)/, + output: function (val) { + return this.regex.exec(val)[1]; + } + }, + font: { + regex: /font\:(.*)/, + output: function (val) { + return this.regex.exec(val)[1]; + } + }, + auto: { + regex: /^auto$/ + } +} + +for (var flag in app.flags) { + if (!app.flags.hasOwnProperty(flag)) continue; + app.flags[flag].match = function (val) { + return val.match(this.regex) + } +} + +app.add_theme = function (name, theme) { + name != null && theme != null && (settings.themes[name] = theme); + return app; +}; + +app.add_image = function (src, el) { + var node = selector(el); + if (node.length) { + for (var i = 0, l = node.length; i < l; i++) { + var img = document.createElement("img") + img.setAttribute("data-src", src); + node[i].appendChild(img); + } + } + return app; +}; + +app.run = function (o) { + var options = extend(settings, o), + images = [], imageNodes = [], bgnodes = []; + + if(typeof(options.images) == "string"){ + imageNodes = selector(options.images); + } + else if (window.NodeList && options.images instanceof window.NodeList) { + imageNodes = options.images; + } else if (window.Node && options.images instanceof window.Node) { + imageNodes = [options.images]; + } + + if(typeof(options.bgnodes) == "string"){ + bgnodes = selector(options.bgnodes); + } else if (window.NodeList && options.elements instanceof window.NodeList) { + bgnodes = options.bgnodes; + } else if (window.Node && options.bgnodes instanceof window.Node) { + bgnodes = [options.bgnodes]; + } + + preempted = true; + + for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]); + + var holdercss = document.getElementById("holderjs-style"); + if (!holdercss) { + holdercss = document.createElement("style"); + holdercss.setAttribute("id", "holderjs-style"); + holdercss.type = "text/css"; + document.getElementsByTagName("head")[0].appendChild(holdercss); + } + + if (!options.nocss) { + if (holdercss.styleSheet) { + holdercss.styleSheet.cssText += options.stylesheet; + } else { + holdercss.appendChild(document.createTextNode(options.stylesheet)); + } + } + + var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)"); + + for (var l = bgnodes.length, i = 0; i < l; i++) { + var src = window.getComputedStyle(bgnodes[i], null) + .getPropertyValue("background-image"); + var flags = src.match(cssregex); + var bgsrc = bgnodes[i].getAttribute("data-background-src"); + + if (flags) { + var holder = parse_flags(flags[1].split("/"), options); + if (holder) { + render("background", bgnodes[i], holder, src); + } + } + else if(bgsrc != null){ + var holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1) + .split("/"), options); + if(holder){ + render("background", bgnodes[i], holder, src); + } + } + } + + for (l = images.length, i = 0; i < l; i++) { + + var attr_src = attr_data_src = src = null; + + try{ + attr_src = images[i].getAttribute("src"); + attr_datasrc = images[i].getAttribute("data-src"); + }catch(e){} + + if (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) { + src = attr_src; + } else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) { + src = attr_datasrc; + } + + if (src) { + var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1) + .split("/"), options); + if (holder) { + if (holder.fluid) { + render("fluid", images[i], holder, src) + } else { + render("image", images[i], holder, src); + } + } + } + } + return app; +}; + +contentLoaded(win, function () { + if (window.addEventListener) { + window.addEventListener("resize", fluid_update, false); + window.addEventListener("orientationchange", fluid_update, false); + } else { + window.attachEvent("onresize", fluid_update) + } + preempted || app.run(); +}); + +if (typeof define === "function" && define.amd) { + define("Holder", [], function () { + return app; + }); +} + +})(Holder, window); diff --git a/www/templates_shared/scripts/html5shiv.js b/www/templates_shared/scripts/html5shiv.js new file mode 100644 index 000000000..784f221ca --- /dev/null +++ b/www/templates_shared/scripts/html5shiv.js @@ -0,0 +1,8 @@ +/* + HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); +for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d type pairs + class2type = {}, + + // List of deleted data cache ids, so we can reuse them + core_deletedIds = [], + + core_version = "1.9.1", + + // Save a reference to some core methods + core_concat = core_deletedIds.concat, + core_push = core_deletedIds.push, + core_slice = core_deletedIds.slice, + core_indexOf = core_deletedIds.indexOf, + core_toString = class2type.toString, + core_hasOwn = class2type.hasOwnProperty, + core_trim = core_version.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + + // Used for splitting on whitespace + core_rnotwhite = /\S+/g, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + + // The ready event handler + completed = function( event ) { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } + }, + // Clean-up method for dom ready events + detach = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: core_version, + + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of id + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + if ( obj == null ) { + return String( obj ); + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ core_toString.call(obj) ] || "object" : + typeof obj; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + if ( scripts ) { + jQuery( scripts ).remove(); + } + return jQuery.merge( [], parsed.childNodes ); + }, + + parseJSON: function( data ) { + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + if ( data === null ) { + return data; + } + + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + if ( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + } + } + } + + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + core_push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return core_concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || type !== "function" && + ( length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj ); +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function() { + + var support, all, a, + input, select, fragment, + opt, eventName, isSupported, i, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
a"; + + // Support tests won't run in some limited or non-browser environments + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + if ( !all || !a || !all.length ) { + return {}; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + support = { + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: div.firstChild.nodeType === 3, + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: a.getAttribute("href") === "/a", + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) + checkOn: !!input.value, + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Tests for enctype support on a form (#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: document.compatMode === "CSS1Compat", + + // Will be defined later + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<9 + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + // Check if we can trust getAttribute("value") + input = document.createElement("input"); + input.setAttribute( "value", "" ); + support.input = input.getAttribute( "value" ) === ""; + + // Check if an input maintains its value after becoming a radio + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "checked", "t" ); + input.setAttribute( "name", "t" ); + + fragment = document.createDocumentFragment(); + fragment.appendChild( input ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php + for ( i in { submit: true, change: true, focusin: true }) { + div.setAttribute( eventName = "on" + i, "t" ); + + support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; + } + + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, marginDiv, tds, + divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; + + body.appendChild( container ).appendChild( div ); + + // Support: IE8 + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + div.innerHTML = "
t
"; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Support: IE8 + // Check if empty table cells still have offsetWidth/Height + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // Use window.getComputedStyle because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = div.appendChild( document.createElement("div") ); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== core_strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + div.style.display = "block"; + div.innerHTML = "
"; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + if ( support.inlineBlockNeedsLayout ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); + + // Null elements to avoid leaks in IE + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + all = select = fragment = opt = a = input = null; + + return support; +})(); + +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +function internalData( elem, name, data, pvt /* Internal Use Only */ ){ + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an id for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique id for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var i, l, thisCache, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + // Do not set data on non-element because it will not be cleared (#8335). + if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { + return false; + } + + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var attrs, name, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attrs = elem.attributes; + for ( ; i < attrs.length; i++ ) { + name = attrs[i].name; + + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.slice(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + // Try to fetch any internally stored data first + return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; + } + + this.each(function() { + jQuery.data( this, key, value ); + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + hooks.cur = fn; + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rfocusable = /^(?:input|select|textarea|button|object)$/i, + rclickable = /^(?:a|area)$/i, + rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i, + ruseDefault = /^(?:checked|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + getSetInput = jQuery.support.input; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + elem.className = jQuery.trim( cur ); + + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = arguments.length === 0 || typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + elem.className = value ? jQuery.trim( cur ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.match( core_rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + // Toggle whole class name + } else if ( type === core_strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed "false", + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var ret, hooks, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val, + self = jQuery(this); + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attr: function( elem, name, value ) { + var hooks, notxml, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === core_strundefined ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + // In IE9+, Flash objects don't have .getAttribute (#12945) + // Support: IE9+ + if ( typeof elem.getAttribute !== core_strundefined ) { + ret = elem.getAttribute( name ); + } + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( core_rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( rboolean.test( name ) ) { + // Set corresponding property to false for boolean attributes + // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8 + if ( !getSetAttribute && ruseDefault.test( name ) ) { + elem[ jQuery.camelCase( "default-" + name ) ] = + elem[ propName ] = false; + } else { + elem[ propName ] = false; + } + + // See #9699 for explanation of this approach (setting first, then removal) + } else { + jQuery.attr( elem, name, "" ); + } + + elem.removeAttribute( getSetAttribute ? name : propName ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to default in case type is set after value during creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + 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( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + var + // Use .prop to determine if this attribute is understood as boolean + prop = jQuery.prop( elem, name ), + + // Fetch it accordingly + attr = typeof prop === "boolean" && elem.getAttribute( name ), + detail = typeof prop === "boolean" ? + + getSetInput && getSetAttribute ? + attr != null : + // oldIE fabricates an empty string for missing boolean attributes + // and conflates checked/selected into attroperties + ruseDefault.test( name ) ? + elem[ jQuery.camelCase( "default-" + name ) ] : + !!attr : + + // fetch an attribute node for properties not recognized as boolean + elem.getAttributeNode( name ); + + return detail && detail.value !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + // IE<8 needs the *property* name + elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); + + // Use defaultChecked and defaultSelected for oldIE + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; + } + + return name; + } +}; + +// fix oldIE value attroperty +if ( !getSetInput || !getSetAttribute ) { + jQuery.attrHooks.value = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return jQuery.nodeName( elem, "input" ) ? + + // Ignore the value *property* by using defaultValue + elem.defaultValue : + + ret && ret.specified ? ret.value : undefined; + }, + set: function( elem, value, name ) { + if ( jQuery.nodeName( elem, "input" ) ) { + // Does not return so that setAttribute is also used + elem.defaultValue = value; + } else { + // Use nodeHook if defined (#1954); otherwise setAttribute is fine + return nodeHook && nodeHook.set( elem, value, name ); + } + } + }; +} + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + elem.setAttributeNode( + (ret = elem.ownerDocument.createAttribute( name )) + ); + } + + ret.value = value += ""; + + // Break association with cloned elements by also using setAttribute (#9646) + return name === "value" || value === elem.getAttribute( name ) ? + value : + undefined; + } + }; + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + nodeHook.set( elem, value === "" ? false : value, name ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); +} + + +// Some attributes require a special call on IE +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret == null ? undefined : ret; + } + }); + }); + + // href/src property should get the full normalized URL (#10299/#12915) + jQuery.each([ "href", "src" ], function( i, name ) { + jQuery.propHooks[ name ] = { + get: function( elem ) { + return elem.getAttribute( name, 4 ); + } + }; + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Note: IE uppercases css property names, but if we were to .toLowerCase() + // .cssText, that would destroy case senstitivity in URL's, like in "background" + return elem.style.cssText || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique id, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = core_hasOwn.call( event, "type" ) ? event.type : event, + namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + event.isTrigger = true; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = core_slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur != this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + } + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== document.activeElement && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === document.activeElement && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + + beforeunload: { + postDispatch: function( event ) { + + // Even when returnValue equals to undefined Firefox will still show alert + if ( event.result !== undefined ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === core_strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function( window, undefined ) { + +var i, + cachedruns, + Expr, + getText, + isXML, + compile, + hasDuplicate, + outermostContext, + + // Local document vars + setDocument, + document, + docElem, + documentIsXML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + sortOrder, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + support = {}, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Array methods + arr = [], + pop = arr.pop, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "id": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rsibling = /[\x20\t\r\n\f]*[+~]/, + + rnative = /^[^{]+\{\s*\[native code/, + + // Easily-parseable/retrievable id or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, + funescape = function( _, escaped ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + return high !== high ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Use a stripped-down slice if we can't use a native one +try { + slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType; +} catch ( e ) { + slice = function( i ) { + var elem, + results = []; + while ( (elem = this[i++]) ) { + results.push( elem ); + } + return results; + }; +} + +/** + * For feature detection + * @param {Function} fn The function to test for native support + */ +function isNative( fn ) { + return rnative.test( fn + "" ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var cache, + keys = []; + + return (cache = function( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key ] = value); + }); +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( !documentIsXML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#id") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of id + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + + // QSA path + if ( support.qsa && !rbuggyQSA.test(selector) ) { + old = true; + nid = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra id on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, slice.call( newContext.querySelectorAll( + newSelector + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsXML = isXML( doc ); + + // Check if getElementsByTagName("*") returns only elements + support.tagNameNoComments = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if attributes should be retrieved by attribute nodes + support.attributes = assert(function( div ) { + div.innerHTML = ""; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }); + + // Check if getElementsByClassName can be trusted + support.getByClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = ""; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }); + + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by id + support.getByName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "
"; + docElem.insertBefore( div, docElem.firstChild ); + + // Test + var pass = doc.getElementsByName && + // buggy browsers will return fewer than the correct 2 + doc.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + doc.getElementsByName( expando + 0 ).length; + support.getIdNotName = !doc.getElementById( expando ); + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + + // IE6/7 return modified attributes + Expr.attrHandle = assert(function( div ) { + div.innerHTML = ""; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }) ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }; + + // id find and filter + if ( support.getIdNotName ) { + Expr.find["id"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && !documentIsXML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["id"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + Expr.find["id"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && !documentIsXML ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }; + Expr.filter["id"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.tagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Name + Expr.find["NAME"] = support.getByName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }; + + // Class + Expr.find["CLASS"] = support.getByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) { + return context.getElementsByClassName( className ); + } + }; + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21), + // no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ]; + + if ( (support.qsa = isNative(doc.querySelectorAll)) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE8 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = ""; + if ( div.querySelectorAll("[i^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = new RegExp( rbuggyMatches.join("|") ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + var compare; + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) { + if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) { + if ( a === doc || contains( preferredDoc, a ) ) { + return -1; + } + if ( b === doc || contains( preferredDoc, b ) ) { + return 1; + } + return 0; + } + return compare & 4 ? -1 : 1; + } + + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + // Always assume the presence of duplicates if sort doesn't + // pass them to our comparison function (as in Google Chrome). + hasDuplicate = false; + [0, 0].sort( sortOrder ); + support.detectDuplicates = hasDuplicate; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyQSA always contains :focus, so no need for an existence check + if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + var val; + + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( !documentIsXML ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( documentIsXML || support.attributes ) { + return elem.getAttribute( name ); + } + return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ? + name : + val && val.specified ? val.value : null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + i = 1, + j = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[4] ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + + nodeName = nodeName.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifider + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsXML ? + elem.getAttribute("xml:lang") || elem.getAttribute("lang") : + elem.lang) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push( { + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an id + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "id" && + context.nodeType === 9 && !documentIsXML && + Expr.relative[ tokens[1].type ] ) { + + context = Expr.find["id"]( token.matches[0].replace( runescape, funescape ), context )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, slice.call( seed, 0 ) ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + documentIsXML, + results, + rsibling.test( selector ) + ); + return results; +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Easy API for creating new setFilters +function setFilters() {} +Expr.filters = setFilters.prototype = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Initialize with the default document +setDocument(); + +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, ret, self, + len = this.length; + + if ( typeof selector !== "string" ) { + self = this; + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + ret = []; + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, this[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = ( this.selector ? this.selector + " " : "" ) + selector; + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false) ); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true) ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + cur = this[i]; + + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } + + return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( jQuery.unique(all) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +jQuery.fn.andSelf = jQuery.fn.addBack; + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( this.length > 1 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, false, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, false, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function( value ) { + var isFunc = jQuery.isFunction( value ); + + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( !isFunc && typeof value !== "string" ) { + value = jQuery( value ).not( this ).detach(); + } + + return this.domManip( [ value ], true, function( elem ) { + var next = this.nextSibling, + parent = this.parentNode; + + if ( parent ) { + jQuery( this ).remove(); + parent.insertBefore( elem, next ); + } + }); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, table, callback ) { + + // Flatten any nested arrays + args = core_concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, table ? self.html() : undefined ); + } + self.domManip( args, table, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + node, + i + ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Hope ajax is available... + jQuery.ajax({ + url: node.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +function findOrAppend( elem, tag ) { + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + var attr = elem.getAttributeNode("type"); + elem.type = ( attr && attr.specified ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( manipulation_rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== core_strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + core_deletedIds.push( id ); + } + } + } + } + } +}); +var iframe, getStyles, curCSS, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity\s*=\s*([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = jQuery._data( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + + if ( !values[ index ] ) { + hidden = isHidden( elem ); + + if ( display && display !== "none" || !hidden ) { + jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + var len, styles, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + var bool = typeof state === "boolean"; + + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Exclude the following css properties to add px + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var num, val, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// NOTE: we've included the "window" in window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + getStyles = function( elem ) { + return window.getComputedStyle( elem, null ); + }; + + curCSS = function( elem, name, _computed ) { + var width, minWidth, maxWidth, + computed = _computed || getStyles( elem ), + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, + style = elem.style; + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + getStyles = function( elem ) { + return elem.currentStyle; + }; + + curCSS = function( elem, name, _computed ) { + var left, rs, rsLeft, + computed = _computed || getStyles( elem ), + ret = computed ? computed[ name ] : undefined, + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rs = elem.runtimeStyle; + rsLeft = rs && rs.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + rs.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + rs.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // at this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + // Use the already-created iframe if possible + iframe = ( iframe || + jQuery("';d.extend(y.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Db).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("
",{id:T+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(F),width:c.outerWidth(F)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[J,M]:[K,L],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(K,f.height),f.width?e.css(J,f.width):(e.css(J,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(J,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Cb=S.ie6=function(a){return 6===eb.ie?new y(a):F},Cb.initialize="render",C.ie6={"^content|style$":function(){this.redraw()}}})}(window,document); +//# sourceMappingURL=http://cdn.jsdelivr.net/qtip2/2.2.0/jquery.qtip.min.js \ No newline at end of file diff --git a/www/templates_shared/scripts/jquery.qtip2.js b/www/templates_shared/scripts/jquery.qtip2.js new file mode 100644 index 000000000..257ce216c --- /dev/null +++ b/www/templates_shared/scripts/jquery.qtip2.js @@ -0,0 +1 @@ +/* * qTip2 - Pretty powerful tooltips * http://craigsworks.com/projects/qtip2/ * * Version: nightly * Copyright 2009-2010 Craig Michael Thompson - http://craigsworks.com * * Dual licensed under MIT or GPLv2 licenses * http://en.wikipedia.org/wiki/MIT_License * http://en.wikipedia.org/wiki/GNU_General_Public_License * * Date: Wed Mar 9 02:39:53 PST 2011 */"use strict",function(a,b,c){function z(b){var c=this,d=b.elements,e=d.tooltip,f=".bgiframe-"+b.id,g="tooltipmove"+f+" tooltipshow"+f;a.extend(c,{init:function(){d.bgiframe=a(''),d.bgiframe.appendTo(e),e.bind(g,c.adjust)},adjust:function(){var a=b.get("dimensions"),c=b.plugins.tip,f=b.elements.tip,g,h;h=parseInt(e.css("border-left-width"),10)||0,h={left:-h,top:-h},c&&f&&(g=c.corner.precedance==="x"?["width","left"]:["height","top"],h[g[1]]-=f[g[0]]()),d.bgiframe.css(h).css(a)},destroy:function(){c.iframe.remove(),e.unbind(g)}}),c.init()}function y(c){var f=this,h=c.options.show.modal,i=c.elements,j=i.tooltip,k="#qtip-overlay",l=".qtipmodal",m="tooltipshow"+l+" tooltiphide"+l;c.checks.modal={"^show.modal.(on|blur)$":function(){f.init(),i.overlay.toggle(j.is(":visible"))}},a.extend(f,{init:function(){h.on&&(j.unbind(l).bind(m,function(b,c,d){var e=b.type.replace("tooltip","");a.isFunction(h[e])?h[e].call(i.overlay,d,c):f[e](d)}),f.create(),h.blur===d&&i.overlay.unbind(l+c.id).bind("click"+l+c.id,function(){c.hide.call(c)}),i.overlay.css("cursor",h.blur?"pointer":""))},create:function(){var c=a(k),d;if(c.length){i.overlay=c;return c}d=i.overlay=a("
",{id:k.substr(1),css:{position:"absolute",top:0,left:0,display:"none"},mousedown:function(){return e}}).appendTo(document.body),a(b).bind("resize"+l,function(){d.css({height:Math.max(a(b).height(),a(document).height()),width:Math.max(a(b).width(),a(document).width())})}).trigger("resize");return d},toggle:function(b){var h=i.overlay,k=c.options.show.modal.effect,l=b?"show":"hide",m;h||(h=f.create());if(!h.is(":animated")||b)h.stop(d,e),b&&(m=parseInt(a.css(j[0],"z-index"),10),h.css("z-index",(m||g.zindex)-1)),a.isFunction(k)?k.call(h,b):k===e?h[l]():h.fadeTo(90,b?.7:0,function(){b||a(this).hide()})},show:function(){f.toggle(d)},hide:function(){f.toggle(e)},destroy:function(){var d=i.overlay;d&&(a(k).each(function(){var b=a(this).data("qtip");if(b&&b.id!==b.id&&b.options.show.modal)return d=e}),d?(i.overlay.remove(),a(b).unbind(l)):i.overlay.unbind(l+c.id)),j.unbind(m)}}),f.init()}function x(b,g){function v(a){var b=a.precedance==="y",c=n[b?"width":"height"],d=n[b?"height":"width"],e=a.string().indexOf("center")>-1,f=c*(e?.5:1),g=Math.pow,h=Math.round,i,j,k,l=Math.sqrt(g(f,2)+g(d,2)),m=[p/f*l,p/d*l];m[2]=Math.sqrt(g(m[0],2)-g(p,2)),m[3]=Math.sqrt(g(m[1],2)-g(p,2)),i=l+m[2]+m[3]+(e?0:m[0]),j=i/l,k=[h(j*d),h(j*c)];return{height:k[b?0:1],width:k[b?1:0]}}function u(b){var c=k.titlebar&&b.y==="top",d=c?k.titlebar:k.content,e=a.browser.mozilla,f=e?"-moz-":a.browser.webkit?"-webkit-":"",g=b.y+(e?"":"-")+b.x,h=f+(e?"border-radius-"+g:"border-"+g+"-radius");return parseInt(d.css(h),10)||parseInt(l.css(h),10)||0}function t(a,b,c){b=b?b:a[a.precedance];var d=k.titlebar&&a.y==="top",e=d?k.titlebar:k.content,f="border-"+b+"-width",g=parseInt(e.css(f),10);return(c?g||parseInt(l.css(f),10):g)||0}function s(b,e,f,g){if(k.tip){var h=a.extend({},i.corner),l=f.adjusted,n;i.corner.fixed!==d&&(l.left&&(h.x=h.x==="center"?l.left>0?"left":"right":h.x==="left"?"right":"left"),l.top&&(h.y=h.y==="center"?l.top>0?"top":"bottom":h.y==="top"?"bottom":"top"),h.string()!==m.corner&&(m.top!==l.top||m.left!==l.left)&&(n=i.update(h))),n||(n=i.position(h,0)),n.right!==c&&(n.left=n.right),n.bottom!==c&&(n.top=n.bottom),n.option=Math.max(0,j.offset),f.left-=n.left.charAt?n.option:(n.right?-1:1)*n.left,f.top-=n.top.charAt?n.option:(n.bottom?-1:1)*n.top,m.left=l.left,m.top=l.top,m.corner=h.string()}}var i=this,j=b.options.style.tip,k=b.elements,l=k.tooltip,m={top:0,left:0,corner:""},n={width:j.width,height:j.height},o={},p=j.border||0,q=".qtip-tip",r=a("")[0].getContext;i.corner=f,i.mimic=f,b.checks.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){i.init()||i.destroy(),b.reposition()},"^style.tip.(height|width)$":function(){n={width:j.width,height:j.height},i.create(),i.update(),b.reposition()},"^content.title.text|style.(classes|widget)$":function(){k.tip&&i.update()}},a.extend(i,{init:function(){var b=i.detectCorner()&&(r||a.browser.msie);b&&(i.create(),i.update(),l.unbind(q).bind("tooltipmove"+q,s));return b},detectCorner:function(){var a=j.corner,c=b.options.position,f=c.at,g=c.my.string?c.my.string():c.my;if(a===e||g===e&&f===e)return e;a===d?i.corner=new h.Corner(g):a.string||(i.corner=new h.Corner(a),i.corner.fixed=d);return i.corner.string()!=="centercenter"},detectColours:function(){var c,d=k.tip.css({backgroundColor:"",border:""}),e=i.corner,f=e[e.precedance],g="border-"+f+"-color",h="border"+f.charAt(0)+f.substr(1)+"Color",m=/rgba?\(0, 0, 0(, 0)?\)|transparent/i,p="background-color",q="transparent",r=a(document.body).css("color"),s=b.elements.content.css("color"),t=k.titlebar&&(e.y==="top"||e.y==="center"&&d.position().top+n.height/2+j.offset",{"class":"ui-tooltip-tip"}).css({width:b,height:c}).prependTo(l),r?a("").appendTo(k.tip)[0].getContext("2d").save():(d='',k.tip.html(p?d+=d:d))},update:function(b){var c=k.tip,g=c.children(),l=n.width,m=n.height,q="px solid ",s="px dashed transparent",u=j.mimic,x=Math.round,y,z,A,B,C;b||(b=i.corner),u===e?u=b:(u=new h.Corner(u),u.precedance=b.precedance,u.x==="inherit"?u.x=b.x:u.y==="inherit"?u.y=b.y:u.x===u.y&&(u[b.precedance]=b[b.precedance])),y=u.precedance,i.detectColours(),p=o.border==="transparent"||o.border==="#123456"?0:j.border===d?t(b,f,d):j.border,A=w(u,l,m),C=v(b),c.css(C),b.precedance==="y"?B=[x(u.x==="left"?p:u.x==="right"?C.width-l-p:(C.width-l)/2),x(u.y==="top"?C.height-m:0)]:B=[x(u.x==="left"?C.width-l:0),x(u.y==="top"?p:u.y==="bottom"?C.height-m-p:(C.height-m)/2)],r?(g.attr(C),z=g[0].getContext("2d"),z.restore(),z.save(),z.clearRect(0,0,3e3,3e3),z.translate(B[0],B[1]),z.beginPath(),z.moveTo(A[0][0],A[0][1]),z.lineTo(A[1][0],A[1][1]),z.lineTo(A[2][0],A[2][1]),z.closePath(),z.fillStyle=o.fill,z.strokeStyle=o.border,z.lineWidth=p*2,z.lineJoin="miter",z.miterLimit=100,z.stroke(),z.fill()):(A="m"+A[0][0]+","+A[0][1]+" l"+A[1][0]+","+A[1][1]+" "+A[2][0]+","+A[2][1]+" xe",B[2]=p&&/^(r|b)/i.test(b.string())?1:0,g.css({antialias:""+(u.string().indexOf("center")>-1),left:B[0]-B[2]*Number(y==="x"),top:B[1]-B[2]*Number(y==="y"),width:l+p,height:m+p}).each(function(b){var c=a(this);c.attr({coordsize:l+p+" "+(m+p),path:A,fillcolor:o.fill,filled:!!b,stroked:!b}).css({display:p||b?"block":"none"}),!b&&p>0&&c.html()===""&&c.html('')}));return i.position(b,1)},position:function(b,c){var f=k.tip,g={},h=Math.max(0,j.offset),l,m,n;if(j.corner===e||!f)return e;b=b||i.corner,l=b.precedance,m=v(b),n=a.browser.msie&&p&&/^(b|r)/i.test(b.string())?1:0,a.each(l==="y"?[b.x,b.y]:[b.y,b.x],function(a,c){var e,f;c==="center"?(e=l==="y"?"left":"top",g[e]="50%",g["margin-"+e]=-Math.round(m[l==="y"?"width":"height"]/2)+h):(e=t(b,c,d),f=u(b),g[c]=a||!p?t(b,c)+(a?0:f):h+(f>e?f:0))}),g[b[l]]-=m[l==="x"?"width":"height"]+n,c&&f.css({top:"",bottom:"",left:"",right:"",margin:""}).css(g);return g},destroy:function(){k.tip&&k.tip.remove(),l.unbind(q)}}),i.init()}function w(a,b,c){var d=Math.ceil(b/2),e=Math.ceil(c/2),f={bottomright:[[0,0],[b,c],[b,0]],bottomleft:[[0,0],[b,0],[0,c]],topright:[[0,c],[b,0],[b,c]],topleft:[[0,0],[0,c],[b,c]],topcenter:[[0,c],[d,0],[b,c]],bottomcenter:[[0,0],[b,0],[d,c]],rightcenter:[[0,0],[b,e],[0,c]],leftcenter:[[b,0],[b,c],[0,e]]};f.lefttop=f.bottomright,f.righttop=f.bottomleft,f.leftbottom=f.topright,f.rightbottom=f.topleft;return f[a.string()]}function v(b){var c=this,d=b.elements.tooltip,e=b.options.content.ajax,f=".qtip-ajax",g=/)<[^<]*)*<\/script>/gi;b.checks.ajax={"^content.ajax":function(a,b,d){b==="ajax"&&(e=d),b==="once"?c.once(e.once):e&&e.url?c.load():c.once(0)}},a.extend(c,{init:function(){e&&e.url&&(c.load(),d.one("tooltipshow",function(){c.once(e.once)}))},once:function(a){d[(a?"un":"")+"bind"]("tooltipshow"+f,c.load)},load:function(){function j(a,c,d){b.set("content.text",c+": "+d)}function i(c){h&&(c=a("
").append(c.replace(g,"")).find(h)),b.set("content.text",c)}var d=e.url.indexOf(" "),f=e.url,h;d>-1&&(h=f.substr(d),f=f.substr(0,d)),a.ajax(a.extend({success:i,error:j,context:b},e,{url:f}));return c}}),c.init()}function u(b,c){var i,j,k,l,m=a(this),n=a(document.body),o=this===document?n:m,p=m.metadata?m.metadata(c.metadata):f,u=c.metadata.type==="html5"&&p?p[c.metadata.name]:f,v=m.data(c.metadata.name||"qtipopts");try{v=typeof v==="string"?(new Function("return "+v))():v}catch(w){r("Unable to parse HTML5 attribute data: "+v)}l=a.extend(d,{},g.defaults,c,typeof v==="object"?s(v):f,s(u||p)),p&&a.removeData(this,"metadata"),j=l.position,l.id=b;if("boolean"===typeof l.content.text){k=m.attr(l.content.attr);if(l.content.attr!==e&&k)l.content.text=k;else return e}j.container===e&&(j.container=n),j.target===e&&(j.target=o),l.show.target===e&&(l.show.target=o),l.show.solo===d&&(l.show.solo=n),l.hide.target===e&&(l.hide.target=o),l.position.viewport===d&&(l.position.viewport=j.container),j.at=new h.Corner(j.at),j.my=new h.Corner(j.my);if(a.data(this,"qtip"))if(l.overwrite)m.qtip("destroy");else if(l.overwrite===e)return e;a.attr(this,"title")&&(a.data(this,q,a.attr(this,"title")),m.removeAttr("title")),i=new t(m,l,b,!!k),a.data(this,"qtip",i),m.bind("remove.qtip",function(){i.destroy()});return i}function t(p,r,t,u){function M(c,d,e,f){f=parseInt(f,10)!==0;var g=".qtip-"+t,h={show:c&&r.show.target[0],hide:d&&r.hide.target[0],tooltip:e&&v.rendered&&A.tooltip[0],content:e&&v.rendered&&A.content[0],container:f&&r.position.container[0]===w?document:r.position.container[0],window:f&&b};v.rendered?a([]).pushStack(a.grep([h.show,h.hide,h.tooltip,h.container,h.content,h.window],function(a){return typeof a==="object"})).unbind(g):c&&r.show.target.unbind(g+"-create")}function L(c,d,f,h){function y(a){D()&&v.reposition(a)}function x(a){if(z.hasClass(l))return e;clearTimeout(v.timers.inactive),v.timers.inactive=setTimeout(function(){v.hide(a)},r.hide.inactive)}function u(b){if(z.hasClass(l))return e;var c=a(b.relatedTarget||b.target),d=c.closest(m)[0]===z[0],f=c[0]===n.show[0];clearTimeout(v.timers.show),clearTimeout(v.timers.hide);if(k.target==="mouse"&&d||r.hide.fixed&&(/mouse(out|leave|move)/.test(b.type)&&(d||f))){b.stopPropagation(),b.preventDefault();return e}z.stop(1,1),r.hide.delay>0?v.timers.hide=setTimeout(function(){v.hide(b)},r.hide.delay):v.hide(b)}function s(a){if(z.hasClass(l))return e;n.show.trigger("qtip-"+t+"-inactive"),clearTimeout(v.timers.show),clearTimeout(v.timers.hide);var b=function(){v.show(a)};r.show.delay>0?v.timers.show=setTimeout(b,r.show.delay):b()}var j=".qtip-"+t,k=r.position,n={show:r.show.target,hide:r.hide.target,container:k.container[0]===w?a(document):k.container,doc:a(document)},o={show:a.trim(""+r.show.event).split(" "),hide:a.trim(""+r.hide.event).split(" ")},q=a.browser.msie&&parseInt(a.browser.version,10)===6;f&&(r.hide.fixed&&(n.hide=n.hide.add(z),z.bind("mouseover"+j,function(){z.hasClass(l)||clearTimeout(v.timers.hide)})),k.target==="mouse"&&k.adjust.mouse&&r.hide.event&&z.bind("mouseleave"+j,function(a){(a.relatedTarget||a.target)!==n.show[0]&&v.hide(a)}),z.bind("mouseenter"+j+" mouseleave"+j,function(a){v[a.type==="mouseenter"?"focus":"blur"](a)})),d&&("number"===typeof r.hide.inactive&&(n.show.bind("qtip-"+t+"-inactive",x),a.each(g.inactiveEvents,function(a,b){n.hide.add(A.tooltip).bind(b+j+"-inactive",x)})),a.each(o.hide,function(b,c){var d=a.inArray(c,o.show),e=a(n.hide);d>-1&&e.add(n.show).length===e.length||c==="unfocus"?(n.show.bind(c+j,function(a){D()?u(a):s(a)}),delete o.show[d]):n.hide.bind(c+j,u)})),c&&a.each(o.show,function(a,b){n.show.bind(b+j,s)}),h&&((k.adjust.resize||k.viewport)&&a(a.event.special.resize?k.viewport:b).bind("resize"+j,y),(k.viewport||q&&z.css("position")==="fixed")&&a(k.viewport).bind("scroll"+j,y),/unfocus/i.test(r.hide.event)&&n.doc.bind("mousedown"+j,function(b){var c=a(b.target);c.parents(m).length===0&&c.add(p).length>1&&D()&&!z.hasClass(l)&&v.hide(b)}),k.target==="mouse"&&n.doc.bind("mousemove"+j,function(a){k.adjust.mouse&&!z.hasClass(l)&&D()&&v.reposition(a||i)}))}function K(b,c){var f=A.content;if(!v.rendered||!b)return e;a.isFunction(b)&&(b=b.call(p,v)||""),b.jquery&&b.length>0?f.empty().append(b.css({display:"block"})):f.html(b),z.queue("fx",function(b){function e(a){c=c.not(a),c.length===0&&(v.redraw(),v.rendered&&D()&&v.reposition(B.event),b())}var c=f.find("img:not([height]):not([width])");c.each(function(b,c){var f=["abort","error","load","unload",""].join(".qtip-image ");a(this).bind(f,function(){clearTimeout(v.timers.img[b]),e(this)}),function g(){if(c.height&&c.width)return e(c);v.timers.img[b]=setTimeout(g,20)}();return d}),c.length===0&&e(c)});return v}function J(b){var c=A.title;if(!v.rendered||!b)return e;a.isFunction(b)&&(b=b.call(p,v)||""),b.jquery&&b.length>0?c.empty().append(b.css({display:"block"})):c.html(b),v.redraw(),v.rendered&&D()&&v.reposition(B.event)}function I(a){var b=A.button,c=A.title;if(!v.rendered)return e;a?(c||H(),G()):b.remove()}function H(){var b=x+"-title";A.titlebar&&F(),A.titlebar=a("
",{"class":j+"-titlebar "+(r.style.widget?"ui-widget-header":"")}).append(A.title=a("
",{id:b,"class":j+"-title","aria-atomic":d})).insertBefore(A.content),r.content.title.button?G():v.rendered&&v.redraw()}function G(){var b=r.content.title.button;A.button&&A.button.remove(),b.jquery?A.button=b:A.button=a("",{"class":"ui-state-default "+(r.style.widget?"":j+"-icon"),title:"Close tooltip","aria-label":"Close tooltip"}).prepend(a("",{"class":"ui-icon ui-icon-close",html:"×"})),A.button.appendTo(A.titlebar).attr("role","button").hover(function(b){a(this).toggleClass("ui-state-hover",b.type==="mouseenter")}).click(function(a){z.hasClass(l)||v.hide(a);return e}).bind("mousedown keydown mouseup keyup mouseout",function(b){a(this).toggleClass("ui-state-active ui-state-focus",b.type.substr(-4)==="down")}),v.redraw()}function F(){A.title&&(A.titlebar.remove(),A.titlebar=A.title=A.button=f,v.reposition())}function E(){var a=r.style.widget;z.toggleClass(k,a),A.content.toggleClass(k+"-content",a),A.titlebar&&A.titlebar.toggleClass(k+"-header",a),A.button&&A.button.toggleClass(j+"-icon",!a)}function D(){return z&&z.css("left")!==o&&z.css("visibility")!=="hidden"}function C(a){var b=0,c,d=r,e=a.split(".");while(d=d[e[b++]])b0&&!a("#"+i).length&&(z[0].id=i,A.content[0].id=i+"-content",A.title[0].id=i+"-title")},"^content.text$":function(a,b,c){K(c)},"^content.title.text$":function(a,b,c){if(!c)return F();!A.title&&c&&H(),J(c)},"^content.title.button$":function(a,b,c){I(c)},"^position.(my|at)$":function(a,b,c){"string"===typeof c&&(a[b]=new h.Corner(c))},"^position.container$":function(a,b,c){v.rendered&&z.appendTo(c)},"^(show|hide).(event|target|fixed|delay|inactive)$":function(a,b,c,d,e){var f=[1,0,0];f[e[0]==="show"?"push":"unshift"](0),M.apply(v,f),L.apply(v,[1,1,0,0])},"^show.ready$":function(){v.rendered||v.show()},"^style.classes$":function(b,c,d){a.attr(z[0],"class",j+" qtip ui-helper-reset "+d)},"^style.widget|content.title":E,"^events.(render|show|move|hide|focus|blur)$":function(b,c,d){z[(a.isFunction(d)?"":"un")+"bind"]("tooltip"+c,d)}},a.extend(v,{render:function(b){if(v.rendered)return e;var c=r.content.text,f=r.content.title.text,g=a.Event("tooltiprender");a.attr(p[0],"aria-describedby",x),z=A.tooltip=a("
").attr({id:x,"class":j+" qtip ui-helper-reset "+r.style.classes,role:"alert","aria-live":"polite","aria-atomic":e,"aria-describedby":x+"-content","aria-hidden":d}).toggleClass(l,B.disabled).data("qtip",v).appendTo(r.position.container).append(A.content=a("
",{"class":j+"-content",id:x+"-content","aria-atomic":d})),v.rendered=-1,f&&(H(),J(f)),v.rendered=d,K(c),E(),a.each(h,function(){this.initialize==="render"&&this(v)}),L(1,1,1,1),a.each(r.events,function(a,b){if(b){var c=a==="toggle"?"tooltipshow tooltiphide":"tooltip"+a;z.bind(c,b)}}),z.css("visibility","hidden").queue("fx",function(a){g.originalEvent=B.event,z.trigger(g,[v]),(r.show.ready||b)&&v.show(B.event),a()});return v},get:function(a){var b,c;switch(a.toLowerCase()){case"dimensions":b={height:z.outerHeight(),width:z.outerWidth()};break;case"offset":b=h.offset(z,r.position.container);break;default:c=C(a.toLowerCase()),b=c[0][c[1]],b=b.precedance?b.string():b}return b},set:function(b,c){function j(a,b){var c,e,f;if(v.rendered){for(c in h)for(e in h[c])if(f=(new RegExp(e,"i")).exec(a))b.push(f),h[c][e].apply(v,b)}else a==="show.ready"&&b[2]&&(y=0,v.render(d))}var f=/^position.(my|at|adjust|target|container)|style|content/i,g=e,h=v.checks,i;"string"===typeof b?(i=b,b={},b[i]=c):b=a.extend(d,{},b),a.each(b,function(c,d){var e=C(c.toLowerCase()),h;h=e[0][e[1]],e[0][e[1]]="object"===typeof d&&d.nodeType?a(d):d,b[c]=[e[0],e[1],d,h],g=f.test(c)||g}),s(r),y=1,a.each(b,j),y=0,g&&D()&&v.rendered&&v.reposition();return v},toggle:function(b,c){function j(){b?a.browser.msie&&z[0].style.removeAttribute("filter"):z.css({display:"",visibility:"hidden",width:"",opacity:"",left:"",top:""})}if(!v.rendered)if(b)v.render(1);else return e;var d=b?"show":"hide",g=r[d],h=D(),i;(typeof b).search("boolean|number")&&(b=!h);if(h===b)return v;if(c){if(/over|enter/.test(c.type)&&/out|leave/.test(B.event.type)&&c.target===r.show.target[0]&&z.has(c.relatedTarget).length)return v;B.event=a.extend({},c)}i=a.Event("tooltip"+d),i.originalEvent=c?B.event:f,z.trigger(i,[v,90]);if(i.isDefaultPrevented())return v;a.attr(z[0],"aria-hidden",!b),b?(z.hide().css({visibility:""}),v.focus(c),v.reposition(c,0),g.solo&&a(m,g.solo).not(z).qtip("hide",i)):(clearTimeout(v.timers.show),v.blur(c)),z.stop(1,1),a.isFunction(g.effect)?(g.effect.call(z,v),z.queue("fx",function(a){j.call(this,a),a()})):g.effect===e?(z[d](),j.call(z)):z.fadeTo(90,b?1:0,j),b&&g.target.trigger("qtip-"+t+"-inactive");return v},show:function(a){return v.toggle(d,a)},hide:function(a){return v.toggle(e,a)},focus:function(b){if(!v.rendered)return e;var c=a(m),d=parseInt(z[0].style.zIndex,10),f=g.zindex+c.length,h=a.extend({},b),i,j;z.hasClass(n)||(d!==f&&(c.each(function(){this.style.zIndex>d&&(this.style.zIndex=this.style.zIndex-1)}),c.filter("."+n).qtip("blur",h)),j=a.Event("tooltipfocus"),j.originalEvent=h,z.trigger(j,[v,f]),j.isDefaultPrevented()||(z.addClass(n)[0].style.zIndex=f));return v},blur:function(b){var c=a.extend({},b),d;z.removeClass(n),d=a.Event("tooltipblur"),d.originalEvent=c,z.trigger(d,[v]);return v},reposition:function(f,k){if(!v.rendered||y)return e;y=d;var l=r.position.target,m=r.position,n=m.my,o=m.at,p=m.adjust,q=z.outerWidth(),s=z.outerHeight(),t=0,u=0,x=a.Event("tooltipmove"),A=z.css("position")==="fixed",C=m.viewport.jquery?m.viewport:a(b),E={left:0,top:0},F=(v.plugins.tip||{}).corner,G={left:function(a){var b=C.scrollLeft,c=n.x==="left"?q:n.x==="right"?-q:-q/2,d=o.x==="left"?t:o.x==="right"?-t:-t/2,e=F&&F.precedance==="x"?g.defaults.style.tip.width:0,f=b-a-e,h=a+q-C.width-b+e,i=c-(n.precedance==="x"||n.x===n.y?d:0),j=n.x==="center";f>0&&(n.x!=="left"||h>0)?E.left-=i+(j?0:2*p.x):h>0&&(n.x!=="right"||f>0)&&(E.left-=j?-i:i+2*p.x),E.left!==a&&j&&(E.left-=p.x),E.left<0&&-E.left>h&&(E.left=a);return E.left-a},top:function(a){var b=C.scrollTop,c=n.y==="top"?s:n.y==="bottom"?-s:-s/2,d=o.y==="top"?u:o.y==="bottom"?-u:-u/2,e=F&&F.precedance==="y"?g.defaults.style.tip.height:0,f=b-a-e,h=a+s-C.height-b+e,i=c-(n.precedance==="y"||n.x===n.y?d:0),j=n.y==="center";f>0&&(n.y!=="top"||h>0)?E.top-=i+(j?0:2*p.y):h>0&&(n.y!=="bottom"||f>0)&&(E.top-=j?-i:i+2*p.y),E.top!==a&&j&&(E.top-=p.y),E.top<0&&-E.top>h&&(E.top=a);return E.top-a}};k=k===c||!!k||e,C=C?{elem:C,height:C[(C[0]===b?"h":"outerH")+"eight"](),width:C[(C[0]===b?"w":"outerW")+"idth"](),scrollLeft:C.scrollLeft(),scrollTop:C.scrollTop()}:e;if(l==="mouse")o={x:"left",y:"top"},f=f&&(f.type==="resize"||f.type==="scroll")?B.event:p.mouse||!f||!f.pageX?a.extend({},i):f,E={top:f.pageY,left:f.pageX};else{l==="event"&&(f&&f.target&&f.type!=="scroll"&&f.type!=="resize"?l=B.target=a(f.target):l=B.target),l=a(l).eq(0);if(l.length===0)return v;l[0]===document||l[0]===b?(t=l.width(),u=l.height(),l[0]===b&&(E={top:A?0:C.scrollTop,left:A?0:C.scrollLeft})):l.is("area")&&h.imagemap?E=h.imagemap(l,o):l[0].namespaceURI=="http://www.w3.org/2000/svg"&&h.svg?E=h.svg(l,o):(t=l.outerWidth(),u=l.outerHeight(),E=h.offset(l,m.container)),E.offset&&(t=E.width,u=E.height,E=E.offset),E.left+=o.x==="right"?t:o.x==="center"?t/2:0,E.top+=o.y==="bottom"?u:o.y==="center"?u/2:0}E.left+=p.x+(n.x==="right"?-q:n.x==="center"?-q/2:0),E.top+=p.y+(n.y==="bottom"?-s:n.y==="center"?-s/2:0),m.viewport.jquery&&l[0]!==b&&l[0]!==w?E.adjusted={left:G.left(E.left),top:G.top(E.top)}:E.adjusted={left:0,top:0},z.attr("class",function(b,c){return a.attr(this,"class").replace(/ui-tooltip-pos-\w+/i,"")}).addClass(j+"-pos-"+n.abbreviation()),x.originalEvent=a.extend({},f),z.trigger(x,[v,E,C.elem]);if(x.isDefaultPrevented())return v;delete E.adjusted,k&&isNaN(E.left,E.top)?D()&&a.isFunction(m.effect)&&(m.effect.call(z,v,E),z.queue(function(b){var c=a(this);c.css({opacity:"",height:""}),a.browser.msie&&this.style&&this.style.removeAttribute("filter"),b()})):z.css(E),y=e;return v},redraw:function(){var b=j+"-fluid",c="auto",d;if(v.rendered<1)return e;z.css({width:c,height:c}).addClass(b),d={height:z.outerHeight(),width:z.outerWidth()},a.each(["width","height"],function(a,b){var c=parseInt(z.css("max-"+b),10)||0,e=parseInt(z.css("min-"+b),10)||0;d[b]=c+e?Math.min(Math.max(d[b],e),c):d[b]}),z.css(d).removeClass(b);return v},disable:function(b){var c=l;"boolean"!==typeof b&&(b=!z.hasClass(c)&&!B.disabled),v.rendered?(z.toggleClass(c,b),a.attr(z[0],"aria-disabled",b)):B.disabled=!!b;return v},enable:function(){v.disable(e)},destroy:function(){var b=p[0],c=a.data(b,q);v.rendered&&(z.remove(),a.each(v.plugins,function(){this.destroy&&this.destroy()})),clearTimeout(v.timers.show),clearTimeout(v.timers.hide),M(1,1,1,1),a.removeData(b,"qtip"),c&&a.attr(b,"title",c),p.removeAttr("aria-describedby").unbind(".qtip");return p}})}function s(b){var c;if(!b||"object"!==typeof b)return e;"object"!==typeof b.metadata&&(b.metadata={type:b.metadata});if("content"in b){if("object"!==typeof b.content||b.content.jquery)b.content={text:b.content};c=b.content.text||e,!a.isFunction(c)&&(!c&&!c.attr||c.length<1||"object"===typeof c&&!c.jquery)&&(b.content.text=e),"title"in b.content&&("object"!==typeof b.content.title&&(b.content.title={text:b.content.title}),c=b.content.title.text||e,!a.isFunction(c)&&(!c&&!c.attr||c.length<1||"object"===typeof c&&!c.jquery)&&(b.content.title.text=e))}"position"in b&&("object"!==typeof b.position&&(b.position={my:b.position,at:b.position})),"show"in b&&("object"!==typeof b.show&&(b.show.jquery?b.show={target:b.show}:b.show={event:b.show})),"hide"in b&&("object"!==typeof b.hide&&(b.hide.jquery?b.hide={target:b.hide}:b.hide={event:b.hide})),"style"in b&&("object"!==typeof b.style&&(b.style={classes:b.style})),a.each(h,function(){this.sanitize&&this.sanitize(b)});return b}function r(){var c=b.console;return c&&(c.error||c.log||a.noop).apply(c,arguments)}var d=!0,e=!1,f=null,g,h,i,j="ui-tooltip",k="ui-widget",l="ui-state-disabled",m="div.qtip."+j,n=j+"-focus",o="-31000px",p="_replacedByqTip",q="oldtitle";g=a.fn.qtip=function(b,h,i){var j=(""+b).toLowerCase(),k=f,l=j==="disable"?[d]:a.makeArray(arguments).slice(1,10),m=l[l.length-1],n=this[0]?a.data(this[0],"qtip"):f;if(!arguments.length&&n||j==="api")return n;if("string"===typeof b){this.each(function(){var b=a.data(this,"qtip");if(!b)return d;m&&m.timeStamp&&(b.cache.event=m);if(j==="option"&&h)if(a.isPlainObject(h)||i!==c)b.set(h,i);else{k=b.get(h);return e}else b[j]&&b[j].apply(b[j],l)});return k!==f?k:this}if("object"===typeof b||!arguments.length){n=s(a.extend(d,{},b));return g.bind.call(this,n,m)}},g.bind=function(b,c){return this.each(function(f){function p(b){function c(){o.render(typeof b==="object"||i.show.ready),k.show.unbind(l.show),k.hide.unbind(l.hide)}if(o.cache.disabled)return e;o.cache.event=a.extend({},b),i.show.delay>0?(clearTimeout(o.timers.show),o.timers.show=setTimeout(c,i.show.delay),l.show!==l.hide&&k.hide.bind(l.hide,function(){clearTimeout(o.timers.show)})):c()}var i,k,l,m=!b.id||b.id===e||b.id.length<1||a("#"+j+"-"+b.id).length?g.nextid++:b.id,n=".qtip-"+m+"-create",o=u.call(this,m,b);if(o===e)return d;i=o.options,a.each(h,function(){this.initialize==="initialize"&&this(o)}),k={show:i.show.target,hide:i.hide.target},l={show:a.trim(""+i.show.event).replace(/ /g,n+" ")+n,hide:a.trim(""+i.hide.event).replace(/ /g,n+" ")+n},k.show.bind(l.show,p),(i.show.ready||i.prerender)&&p(c)})},h=g.plugins={Corner:function(a){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,"center").toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.precedance=a.charAt(0).search(/^(t|b)/)>-1?"y":"x",this.string=function(){return this.precedance==="y"?this.y+this.x:this.x+this.y},this.abbreviation=function(){var a=this.x.substr(0,1),b=this.y.substr(0,1);return a===b?a:a==="c"||a!=="c"&&b!=="c"?b+a:a+b}},offset:function(c,d){function k(a,b){e.left+=b*a.scrollLeft(),e.top+=b*a.scrollTop()}var e=c.offset(),f=d,g=0,i=document.body,j;if(f){do{if(f[0]===i)break;f.css("position")!=="static"&&(j=f.position(),e.left-=j.left+(parseInt(f.css("borderLeftWidth"),10)||0),e.top-=j.top+(parseInt(f.css("borderTopWidth"),10)||0),g++)}while(f=f.offsetParent());(d[0]!==i||g>1)&&k(d,1),h.iOS&&k(a(b),-1)}return e},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{3})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,"4_2"])[1]).replace("undefined","3_2").replace("_","."))<4.1,fn:{attr:function(b,c){if(this.length){var d=this[0],e="title",f=a.data(d,"qtip");if(b===e){if(arguments.length<2)return a.data(d,q);if(typeof f==="object"){f&&f.rendered&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",c),a.fn["attr"+p].apply(this,arguments),a.data(d,q,a.attr(d,e));return this.removeAttr("title")}}}},clone:function(b){var c=a([]),d;a("*",this).add(this).each(function(){var b=a.data(this,q);b&&(a.attr(this,"title",b),c=c.add(this))}),d=a.fn["clone"+p].apply(this,arguments),c.removeAttr("title");return d},remove:a.ui?f:function(b,c){a(this).each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add(this).each(function(){a(this).triggerHandler("remove")})})}}},a.each(h.fn,function(b,c){if(!c)return d;var e=a.fn[b+p]=a.fn[b];a.fn[b]=function(){return c.apply(this,arguments)||e.apply(this,arguments)}}),a(b).bind("load.qtip",function(){var b="mousemove";a(document).bind(b+".qtip",function(a){i={pageX:a.pageX,pageY:a.pageY,type:b}})}),g.version="nightly",g.nextid=0,g.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),g.zindex=15e3,g.defaults={prerender:e,id:e,overwrite:d,content:{text:d,attr:"title",title:{text:e,button:e}},position:{my:"top left",at:"bottom right",target:e,container:e,viewport:e,adjust:{x:0,y:0,mouse:d,resize:d},effect:d},show:{target:e,event:"mouseenter",effect:d,delay:90,solo:e,ready:e},hide:{target:e,event:"mouseleave",effect:d,delay:0,fixed:e,inactive:e},style:{classes:"",widget:e},events:{render:f,move:f,show:f,hide:f,toggle:f,focus:f,blur:f}},h.ajax=function(a){var b=a.plugins.ajax;return"object"===typeof b?b:a.plugins.ajax=new v(a)},h.ajax.initialize="render",h.ajax.sanitize=function(a){var b=a.content,c;b&&"ajax"in b&&(c=b.ajax,typeof c!=="object"&&(c=a.content.ajax={url:c}),"boolean"!==typeof c.once&&c.once&&(c.once=!!c.once))},a.extend(d,g.defaults,{content:{ajax:{once:d}}}),h.imagemap=function(b,c){function l(a,b){var d=0,e=1,f=1,g=0,h=0,i=a.width,j=a.height;while(i>0&&j>0&&e>0&&f>0){i=Math.floor(i/2),j=Math.floor(j/2),c.x==="left"?e=i:c.x==="right"?e=a.width-i:e+=Math.floor(i/2),c.y==="top"?f=j:c.y==="bottom"?f=a.height-j:f+=Math.floor(j/2),d=b.length;while(d--){if(b.length<2)break;g=b[d][0]-a.offset.left,h=b[d][1]-a.offset.top,(c.x==="left"&&g>=e||c.x==="right"&&g<=e||c.x==="center"&&(ga.width-e)||c.y==="top"&&h>=f||c.y==="bottom"&&h<=f||c.y==="center"&&(ha.height-f))&&b.splice(d,1)}}return{left:b[0][0],top:b[0][1]}}var d=b.attr("shape").toLowerCase(),e=b.attr("coords").split(","),f=[],g=a('img[usemap="#'+b.parent("map").attr("name")+'"]'),h=g.offset(),i={width:0,height:0,offset:{top:1e10,right:0,bottom:0,left:1e10}},j=0,k=0;h.left+=Math.ceil((g.outerWidth()-g.width())/2),h.top+=Math.ceil((g.outerHeight()-g.height())/2);if(d==="poly"){j=e.length;while(j--)k=[parseInt(e[--j],10),parseInt(e[j+1],10)],k[0]>i.offset.right&&(i.offset.right=k[0]),k[0]i.offset.bottom&&(i.offset.bottom=k[1]),k[1]0}(jQuery,window) \ No newline at end of file diff --git a/www/templates_shared/scripts/respond.min.js b/www/templates_shared/scripts/respond.min.js new file mode 100644 index 000000000..56418a245 --- /dev/null +++ b/www/templates_shared/scripts/respond.min.js @@ -0,0 +1,6 @@ +/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ +/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ +window.matchMedia=window.matchMedia||function(a){"use strict";var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='­',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document); + +/*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ +(function(a){"use strict";function x(){u(!0)}var b={};a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,b.mediaQueriesSupported;var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var a=m.shift();v(a.href,function(b){p(b,a.href,a.media),h[a.href]=!0,setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(a){var b="clientWidth",h=d[b],k="CSS1Compat"===c.compatMode&&h||c.body[b]||h,m={},n=l[l.length-1],o=(new Date).getTime();if(a&&q&&i>o-q)return clearTimeout(r),r=setTimeout(u,i),void 0;q=o;for(var p in e)if(e.hasOwnProperty(p)){var v=e[p],w=v.minw,x=v.maxw,y=null===w,z=null===x,A="em";w&&(w=parseFloat(w)*(w.indexOf(A)>-1?t||s():1)),x&&(x=parseFloat(x)*(x.indexOf(A)>-1?t||s():1)),v.hasquery&&(y&&z||!(y||k>=w)||!(z||x>=k))||(m[v.media]||(m[v.media]=[]),m[v.media].push(f[v.rules]))}for(var B in g)g.hasOwnProperty(B)&&g[B]&&g[B].parentNode===j&&j.removeChild(g[B]);for(var C in m)if(m.hasOwnProperty(C)){var D=c.createElement("style"),E=m[C].join("\n");D.type="text/css",D.media=C,j.insertBefore(D,n.nextSibling),D.styleSheet?D.styleSheet.cssText=E:D.appendChild(c.createTextNode(E)),g.push(D)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)})(this); diff --git a/www/templates_shared/scripts/sorttable.js b/www/templates_shared/scripts/sorttable.js new file mode 100644 index 000000000..244b6dc4d --- /dev/null +++ b/www/templates_shared/scripts/sorttable.js @@ -0,0 +1,234 @@ +// +// Javascript clientside sorting of table data +// + +addEvent(window, "load", sortables_init); + +var SORT_COLUMN_INDEX; + +function sortables_init() +{ + // Find all tables with class sortable and make them sortable + if (!document.getElementsByTagName) { alert ( "cannot" ); return; } + tbls = document.getElementsByTagName("table"); + for (ti=0;ti 0) { + var firstRow = table.rows[0]; + } + if (!firstRow) return; + + // We have a first row: assume it's the header, and make its contents clickable links + for (var i=0;i' + txt + ''; + } + else str_HTML += '>'; + + str_HTML += ''; + + // insert new html into cell + cell.innerHTML = str_HTML; + } +} + +function ts_getInnerText(el) { + if ( typeof el == "string") return el; + if ( typeof el == "undefined") { return el }; + if ( el.innerText ) return el.innerText; //Not needed but it is faster + var str = ""; + + var cs = el.childNodes; + var l = cs.length; + for (var i = 0; i < l; i++) + { + switch (cs[i].nodeType) + { + case 1: //ELEMENT_NODE + str += ts_getInnerText(cs[i]); + break; + case 3: //TEXT_NODE + str += cs[i].nodeValue; + break; + } + } + return str; +} + +function ts_resortTable(lnk,clid) { + // get the span + var span; + for (var ci=0;ci'; + newRows.reverse(); + span.setAttribute('sortdir','up'); + } + else + { + //ARROW = '  ↓'; + ARROW = ''; + span.setAttribute('sortdir','down'); + } + + // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones + // don't do sortbottom rows + for (i=0;i= subnavTop && !isFixed) { + isFixed = 1; + $nav.addClass('subnav-fixed'); + $body.css('margin-top', marginTop + subnavHeight + 'px'); + } else if (scrollTop <= subnavTop && isFixed) { + isFixed = 0; + $nav.removeClass('subnav-fixed'); + $body.css('margin-top', marginTop + 'px'); + } + } + + }); + +})(window.jQuery); \ No newline at end of file diff --git a/www/templates_shared/scripts/utils-admin.js b/www/templates_shared/scripts/utils-admin.js new file mode 100644 index 000000000..de33cdc00 --- /dev/null +++ b/www/templates_shared/scripts/utils-admin.js @@ -0,0 +1,743 @@ +/** + * ajax_group_status() + * + * @param id group id + * @param status 0 = deactive, 1 = activate + */ +function ajax_group_status(id, what) +{ + // no caching of results + if (what != undefined) + { + $.ajax({ + url : WWW_TOP + '/admin/ajax_group-edit.php?rand=' + $.now(), + data : { group_id: id, group_status: what }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // switch some links around + if (what == 0) { + $('td#group-' + id).html('Activate'); + } + else { + $('td#group-' + id).html('Deactivate'); + } + + // fade.. mm + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_group_status: " + err ); } + }); + } + else + { + alert('Weird.. what group id are looking for?'); + } +} + +/** + * ajax_sharing_site_status() + * + * @param id site id + * @param status 0 = deactive, 1 = activate + */ +function ajax_sharing_site_status(id, status) +{ + // no caching of results + var rand_no = Math.random(); + if (status != undefined) + { + $.ajax({ + url : WWW_TOP + '/admin/ajax_sharing_settings.php?rand=' + rand_no, + data : { site_id: id, site_status: status }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // switch some links around + if (status == 0) { + $('td#site-' + id).html(''); + } + else { + $('td#site-' + id).html(''); + } + + // fade.. mm + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_sharing_site_status: " + err ); } + }); + } + else + { + alert('Weird.. what site id are looking for?'); + } +} + +/** + * ajax_sharing_enabled() + * + * @param id + * @param status 0 = deactive, 1 = activate + */ +function ajax_sharing_enabled(id, status) +{ + // no caching of results + var rand_no = Math.random(); + if (status != undefined) + { + $.ajax({ + url : WWW_TOP + '/admin/ajax_sharing_settings.php?rand=' + rand_no, + data : { enabled_status: status }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // switch some links around + if (status == 0) { + $('strong#enabled-' + id).html(''); + } + else { + $('strong#enabled-' + id).html(''); + } + + // fade.. mm + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_sharing_enabled: " + err ); } + }); + } + else + { + alert('Weird.. what enabled id are looking for?'); + } +} + +/** + * ajax_sharing_startposition() + * + * @param id + * @param status 0 = deactive, 1 = activate + */ +function ajax_sharing_startposition(id, status) +{ + // no caching of results + var rand_no = Math.random(); + if (status != undefined) + { + $.ajax({ + url : WWW_TOP + '/admin/ajax_sharing_settings.php?rand=' + rand_no, + data : { start_position: status }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // switch some links around + if (status == 0) { + $('strong#startposition-' + id).html(''); + } + else { + $('strong#startposition-' + id).html(''); + } + + // fade.. mm + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_sharing_startposition: " + err ); } + }); + } + else + { + alert('Weird.. what enabled id are looking for?'); + } +} + +/** + * ajax_sharing_reset() + * + * @param id + */ +function ajax_sharing_reset(id) +{ + var rand_no = Math.random(); + $.ajax({ + url : WWW_TOP + '/admin/ajax_sharing_settings.php?rand=' + rand_no, + data : { reset_settings: id }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // fade.. mm + $('#message').fadeOut(5000); + setTimeout('history.go(0);',1500); + }, + error: function(xhr,err,e) { alert( "Error in ajax_sharing_reset: " + err ); } + }); +} + +/** + * ajax_sharing_site_purge() + * + * @param id + */ +function ajax_sharing_site_purge(id) +{ + var rand_no = Math.random(); + $.ajax({ + url : WWW_TOP + '/admin/ajax_sharing_settings.php?rand=' + rand_no, + data : { purge_site: id }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // fade.. mm + $('#message').fadeOut(5000); + setTimeout('history.go(0);',1500); + }, + error: function(xhr,err,e) { alert( "Error in ajax_sharing_site_purge: " + err ); } + }); +} + +/** + * ajax_sharing_posting() + * + * @param id + * @param status 0 = deactive, 1 = activate + */ +function ajax_sharing_posting(id, status) +{ + // no caching of results + var rand_no = Math.random(); + if (status != undefined) + { + $.ajax({ + url : WWW_TOP + '/admin/ajax_sharing_settings.php?rand=' + rand_no, + data : { posting_status: status }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // switch some links around + if (status == 0) { + $('strong#posting-' + id).html(''); + } + else { + $('strong#posting-' + id).html(''); + } + + // fade.. mm + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_sharing_posting: " + err ); } + }); + } + else + { + alert('Weird.. what posting id are looking for?'); + } +} + +/** + * ajax_sharing_fetching() + * + * @param id + * @param status 0 = deactive, 1 = activate + */ +function ajax_sharing_fetching(id, status) +{ + // no caching of results + var rand_no = Math.random(); + if (status != undefined) + { + $.ajax({ + url : WWW_TOP + '/admin/ajax_sharing_settings.php?rand=' + rand_no, + data : { fetching_status: status }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // switch some links around + if (status == 0) { + $('strong#fetching-' + id).html(''); + } + else { + $('strong#fetching-' + id).html(''); + } + + // fade.. mm + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_sharing_fetching: " + err ); } + }); + } + else + { + alert('Weird.. what fetching id are looking for?'); + } +} + +/** + * ajax_sharing_auto() + * + * @param id + * @param status 0 = deactive, 1 = activate + */ +function ajax_sharing_auto(id, status) +{ + // no caching of results + var rand_no = Math.random(); + if (status != undefined) + { + $.ajax({ + url : WWW_TOP + '/admin/ajax_sharing_settings.php?rand=' + rand_no, + data : { auto_status: status }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // switch some links around + if (status == 0) { + $('strong#auto-' + id).html(''); + } + else { + $('strong#auto-' + id).html(''); + } + + // fade.. mm + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_sharing_auto: " + err ); } + }); + } + else + { + alert('Weird.. what auto id are looking for?'); + } +} + +/** + * ajax_sharing_hide() + * + * @param id + * @param status 0 = deactive, 1 = activate + */ +function ajax_sharing_hide(id, status) +{ + // no caching of results + var rand_no = Math.random(); + if (status != undefined) + { + $.ajax({ + url : WWW_TOP + '/admin/ajax_sharing_settings.php?rand=' + rand_no, + data : { hide_status: status }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // switch some links around + if (status == 0) { + $('strong#hide-' + id).html(''); + } + else { + $('strong#hide-' + id).html(''); + } + + // fade.. mm + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_sharing_hide: " + err ); } + }); + } + else + { + alert('Weird.. what hide id are looking for?'); + } +} + +/** + * ajax_sharing_toggle_all() + * + * @param status + */ +function ajax_sharing_toggle_all(status) +{ + // no caching of results + var rand_no = Math.random(); + if (status != undefined) + { + $.ajax({ + url : WWW_TOP + '/admin/ajax_sharing_settings.php?rand=' + rand_no, + data : { toggle_all: status }, + dataType : "html" + }); + } + else + { + alert('Weird.. what toggle status are you looking for?'); + } +} +/** + * ajax_backfill_status() + * + * @param id group id + * @param status 0 = deactive, 1 = activate + */ +function ajax_backfill_status(id, what) +{ + // no caching of results + var rand_no = Math.random(); + if (what != undefined) + { + $.ajax({ + url : WWW_TOP + '/admin/ajax_group-edit.php?rand=' + rand_no, + data : { group_id: id, backfill_status: what }, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + + // switch some links around + if (what == 0) { + $('td#backfill-' + id).html('Activate'); + } + else { + $('td#backfill-' + id).html('Deactivate'); + } + + // fade.. mm + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_backfill_status: " + err ); } + }); + } + else + { + alert('Weird.. what group id are looking for?'); + } +} + +/** + * ajax_group_delete() + * + * @param id group id + */ +function ajax_group_delete(id) +{ + // no caching of results + $.ajax({ + url : WWW_TOP + '/admin/ajax_group-edit.php?action=2&rand=' + $.now(), + data : { group_id: id}, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + $('#grouprow-'+id).fadeOut(2000); + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_group_delete: " + err ); } + }); +} + +/** + * ajax_group_reset() + * + * @param id group id + */ +function ajax_group_reset(id) +{ + // no caching of results + $.ajax({ + url : WWW_TOP + '/admin/ajax_group-edit.php?action=3&rand=' + $.now(), + data : { group_id: id}, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + $('#grouprow-'+id).fadeTo(2000, 0.5); + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_group_reset: " + err ); } + }); +} + +/** + * ajax_group_purge() + * + * @param id group id + */ +function ajax_group_purge(id) +{ + // no caching of results + $.ajax({ + url : WWW_TOP + '/admin/ajax_group-edit.php?action=4&rand=' + $.now(), + data : { group_id: id}, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + $('#grouprow-'+id).fadeTo(2000, 0.5); + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_group_reset: " + err ); } + }); +} + +/** + * ajax_all_reset() + * + * + */ +function ajax_all_reset() +{ + // no caching of results + var rand_no = Math.random(); + $.ajax({ + url : WWW_TOP + '/admin/ajax_group-edit.php?action=5&rand=' + rand_no, + data : "All groups reset.", + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + $('#grouprow-'+id).fadeTo(2000, 0.5); + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_all_reset: " + err ); } + }); +} + +/** + * ajax_all_purge() + */ +function ajax_all_purge() +{ + // no caching of results + var rand_no = Math.random(); + $.ajax({ + url : WWW_TOP + '/admin/ajax_group-edit.php?action=6&rand=' + rand_no, + data : "All groups purged", + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + $('#grouprow-'+id).fadeTo(2000, 0.5); + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_all_purge: " + err ); } + }); +} + +/** + * ajax_releaseregex_delete() + * + * @param id regex id + */ +function ajax_releaseregex_delete(id) +{ + // no caching of results + $.ajax({ + url : WWW_TOP + '/admin/ajax_regex-list.php?action=2&rand=' + $.now(), + data : { regex_id: id}, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + $('#row-'+id).fadeOut(2000); + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_releaseregex_delete: " + err ); } + }); +} + + +/** + * ajax_binaryblacklist_delete() + * + * @param id binary id + */ +function ajax_binaryblacklist_delete(id) +{ + // no caching of results + $.ajax({ + url : WWW_TOP + '/admin/ajax_binaryblacklist-list.php?action=2&rand=' + $.now(), + data : { bin_id: id}, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + $('#row-'+id).fadeOut(2000); + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_binaryblacklist_delete: " + err ); } + }); +} + + +/** + * ajax_welcome_msg() + * + * @param bln flag + */ +function ajax_welcome_msg(bln) +{ + // no caching of results + var _action = (bln ? 1 : 0); + $.ajax({ + url : WWW_TOP + '/admin/ajax_welcome_msg.php?rand=' + $.now(), + data : { action: _action}, + dataType : "html", + success : function(data) + { + if (bln) + { + $('div#adminhome').hide(); + $('div#adminwelcome').show('fast', function() {}); + } + else + { + $('div#adminwelcome').hide(); + $('div#adminhome').show('fast', function() {}); + } + }, + error: function(xhr,err,e) { alert( "Error in ajax_welcome_msg: " + err ); } + }); +} + +/** + * ajax_category_regex_delete() + * + * @param id binary id + */ +function ajax_category_regex_delete(id) +{ + // no caching of results + var rand_no = Math.random(); + $.ajax({ + url : WWW_TOP + '/admin/ajax.php?action=category_regex_delete&rand=' + rand_no, + data : { row_id: id}, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + $('#row-'+id).fadeOut(2000); + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_category_regex_delete: " + err ); } + }); +} + +/** + * ajax_collection_regex_delete() + * + * @param id binary id + */ +function ajax_collection_regex_delete(id) +{ + // no caching of results + var rand_no = Math.random(); + $.ajax({ + url : WWW_TOP + '/admin/ajax_regex.php?action=1&rand=' + rand_no, + data : { col_id: id}, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + $('#row-'+id).fadeOut(2000); + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_collection_regex_delete: " + err ); } + }); +} + +/** + * ajax_release_naming_regex_delete() + * + * @param id binary id + */ +function ajax_release_naming_regex_delete(id) +{ + // no caching of results + var rand_no = Math.random(); + $.ajax({ + url : WWW_TOP + '/admin/ajax.php?action=release_naming_regex_delete&rand=' + rand_no, + data : { row_id: id}, + dataType : "html", + success : function(data) + { + $('div#message').html(data); + $('div#message').show('fast', function() {}); + $('#row-'+id).fadeOut(2000); + $('#message').fadeOut(5000); + }, + error: function(xhr,err,e) { alert( "Error in ajax_release_naming_regex_delete: " + err ); } + }); +} + + +jQuery(function($){ + + $('#regexGroupSelect').change(function() { + document.location="?group=" + $("#regexGroupSelect option:selected").attr('value'); + }); + + $('#previewcat').change(function() { + document.location="?previewcat=" + $("#previewcat option:selected").attr('value'); + }); + + // misc + $('.confirm_action').click(function(){ return confirm('Are you sure?'); }); + + + //fix for autosizing plugin + $('.autosize').autosize({append: "\n"}); + +}); + +//enable Custom checkboxes for fix crap releases +function enableFixCrapCustom(){ + var inputs = document.getElementsByName('fix_crap_opt'); + if (inputs[2].checked == true) { + var checks = document.getElementsByName('fix_crap[]') + for (var t = 0; t < checks.length; t ++) { + checks[t].disabled = false; + checks[t].readonly = false; + } + } + else { + var checks = document.getElementsByName('fix_crap[]') + for (var t = 0; t < checks.length; t ++) { + checks[t].disabled = true; + checks[t].readonly = true; + } + } +} \ No newline at end of file diff --git a/www/templates_shared/scripts/utils.js b/www/templates_shared/scripts/utils.js new file mode 100644 index 000000000..f2295fef6 --- /dev/null +++ b/www/templates_shared/scripts/utils.js @@ -0,0 +1,802 @@ +// event bindings +jQuery(function ($) { + + // browse.tpl, search.tpl -- show icons on hover + var orig_opac = $('table.data tr').children('td.icons').children('div.icon').css('opacity'); + $('table.data tr').hover( + function () { + $(this).children('td.icons').children('div.icon').css('opacity', 1); + }, + function () { + $(this).children('td.icons').children('div.icon').css('opacity', orig_opac); + } + ); + + $(".forumpostsubmit").click(function (e) { + if ($.trim($("#addMessage").val()) == "" || $.trim($("#addSubject").val()) == "") { + alert("Please enter a subject and message."); + return false; + } + }); + + $(".forumreplysubmit").click(function (e) { + if ($.trim($("#addReply").val()) == "") { + alert("Please enter a message."); + return false; + } + }); + + $(".check").click(function (e) { + if (!$(e.target).is('input')) + $(this).children(".nzb_check").prop('checked', !$(this).children(".nzb_check").prop('checked')); + }); + + $(".descmore").click(function (e) { + $(".descinitial").hide(); + $(".descfull").show(); + return false; + }); + + $('.nzb_check_all').change(function () { + $('table#browsetable tr td input:checkbox').prop('checked', $(this).prop('checked')); + }); + + $('.nzb_check_all_season').change(function () { + var season = $(this).attr('name'); + $('table.data tr td input:checkbox').each(function (i, row) { + if ($(row).attr('name') == season) { + $(row).prop('checked', !$(row).prop('checked')); + } + }); + }); + + // browse.tpl, search.tpl + $('.icon_cart').click(function (e) { + if ($(this).hasClass('icon_cart_clicked')) return false; + var guid = $(this).parent().parent().attr('id').substring(4); + $.post(SERVERROOT + "cart?add=" + guid, function (resp) { + $(e.target).addClass('icon_cart_clicked').attr('title', 'Added to Cart'); + createGrowl('Added to Cart'); + }); + return false; + }); + $('.icon_sab').click(function (e) { // replace with cookies? + if ($(this).hasClass('icon_sab_clicked')) { + return false; + } + + var guid = $(this).parent().parent().attr('id').substring(4); + var nzburl = SERVERROOT + "sendtoqueue/" + guid; + + $.post(nzburl, function (resp) { + $(e.target).addClass('icon_sab_clicked').attr('title', 'Added to Queue'); + createGrowl('Added to Queue'); + }); + return false; + }); + $('.sendtocouch').click(function (e) { + e.preventDefault(); + $.get($(this).attr('rel')); + + $.pnotify({ + title: 'ADDED TO COUCHPOTATO!', + text: 'Its now on your wanted list! ^_^', + type: 'info', + animate_speed: 'fast', + icon: 'icon-info-sign' + }); + }); + $("table.data a.modal_nfo").colorbox({ // NFO modal + href: function () { + return $(this).attr('href') + '&modal'; + }, + title: function () { + return $(this).parent().parent().children('a.title').text(); + }, + innerWidth: "800px", innerHeight: "90%", initialWidth: "800px", initialHeight: "90%", speed: 0, opacity: 0.7 + }); + // Screenshot modal + $("table.data a.modal_prev").colorbox({maxWidth: "1920px", maxHeight: "1080px"}); + + $("table.data a.modal_imdb").colorbox({ // IMDB modal + href: function () { + return SERVERROOT + "movie/" + $(this).attr('name').substring(4) + '&modal'; + }, + title: function () { + return $(this).parent().parent().children('a.title').text(); + }, + innerWidth: "800px", innerHeight: "450px", initialWidth: "800px", initialHeight: "450px", speed: 0, opacity: 0.7 + }).click(function () { + $('#colorbox').removeClass().addClass('cboxMovie'); + }); + + $("a.modal_imdbtrailer").colorbox({ // IMDB trailer modal + href: function(){ return SERVERROOT + "movietrailer/"+$(this).attr('name').substring(4)+'&modal'; }, + title: function(){ return $(this).parent().parent().children('a.title').text(); }, + innerWidth:"800px", innerHeight:"450px", initialWidth:"800px", initialHeight:"450px", speed:0, opacity:0.7 + }).click(function(){ + $('#colorbox').removeClass().addClass('cboxMovie'); + }); + + $("table.data a.modal_music").colorbox({ // Music modal + href: function () { + return SERVERROOT + "musicmodal/" + $(this).attr('name').substring(4) + '&modal'; + }, + title: function () { + return $(this).parent().parent().children('a.title').text(); + }, + innerWidth: "800px", innerHeight: "450px", initialWidth: "800px", initialHeight: "450px", speed: 0, opacity: 0.7 + }).click(function () { + $('#colorbox').removeClass().addClass('cboxMusic'); + }); + $("table.data a.modal_console").colorbox({ // Console modal + href: function () { + return SERVERROOT + "consolemodal/" + $(this).attr('name').substring(4) + '&modal'; + }, + title: function () { + return $(this).parent().parent().children('a.title').text(); + }, + innerWidth: "800px", innerHeight: "450px", initialWidth: "800px", initialHeight: "450px", speed: 0, opacity: 0.7 + }).click(function () { + $('#colorbox').removeClass().addClass('cboxConsole'); + }); + $("table.data a.modal_book").colorbox({ // Book modal + href: function () { + return SERVERROOT + "bookmodal/" + $(this).attr('name').substring(4) + '&modal'; + }, + title: function () { + return $(this).parent().parent().children('a.title').text(); + }, + innerWidth: "800px", innerHeight: "450px", initialWidth: "800px", initialHeight: "450px", speed: 0, opacity: 0.7 + }).click(function () { + $('#colorbox').removeClass().addClass('cboxBook'); + }); + + + /* nzb_multi_operations_form */ + $('#nzb_multi_operations_form').submit(function(){return false;}); + $('button.nzb_multi_operations_download').click(function () { + var ids = ""; + $("table.data INPUT[type='checkbox']:checked").each( function (i, row) { + if ($(row).val()!="on") + ids += $(row).val()+','; + }); + ids = ids.substring(0,ids.length-1); + if (ids) + window.location = SERVERROOT + "getnzb?zip=1&id="+ids; + }); + $('button.nzb_multi_operations_cart').click(function(){ + var guids = new Array(); + $("table.data INPUT[type='checkbox']:checked").each( function(i, row) { + var guid = $(row).val(); + var $cartIcon = $(row).parent().parent().children('td.icons').children('.icon_cart'); + if (guid && !$cartIcon.hasClass('icon_cart_clicked')){ + $cartIcon.addClass('icon_cart_clicked').attr('title','Added to '+CARTNAME); // consider doing this only upon success + guids.push(guid); + $.pnotify({ + title: 'ADDED!', + text: 'Its now in your '+CARTNAME+'! ^_^', + type: 'success', + icon: 'fa-icon-info-sign' + }); + } + $(this).prop('checked', false); + }); + $.post( SERVERROOT + "cart?add", { 'add': guids }); + }); + $('button.nzb_multi_operations_sab').click(function(){ + $("table.data INPUT[type='checkbox']:checked").each( function(i, row) { + var $sabIcon = $(row).parent().parent().children('td.icons').children('.icon_sab'); + var guid = $(row).val(); + if (guid && !$sabIcon.hasClass('icon_sab_clicked')) { + var nzburl = SERVERROOT + "sendtoqueue/" + guid; + $.post( nzburl, function(resp){ + $sabIcon.addClass('icon_sab_clicked').attr('title','Added to Queue'); + $.pnotify({ + title: 'ADDED TO SAB!', + text: 'Its now in the queue!! ^_^', + type: 'info', + icon: 'fa-icon-info-sign' + }); + }); + } + $(this).attr('checked', false); + }); + }); + + //front end admin functions + $('button.nzb_multi_operations_edit').click(function(){ + var ids = ""; + $("table.data INPUT[type='checkbox']:checked").each( function(i, row) { + if ($(row).val()!="on") + ids += '&id[]='+$(row).val(); + }); + if (ids) + $('input.nzb_multi_operations_edit').colorbox({ + href: function(){ return SERVERROOT + "ajax_release-admin?action=edit"+ids+"&from="+encodeURIComponent(window.location); }, + title: 'Edit Release', + innerWidth:"400px", innerHeight:"250px", initialWidth:"400px", initialHeight:"250px", speed:0, opacity:0.7 + }); + }); + $('button.nzb_multi_operations_delete').click(function(){ + var ids = ""; + $("table.data INPUT[type='checkbox']:checked").each( function(i, row) { + if ($(row).val()!="on") + ids += '&id[]='+$(row).val(); + }); + if (ids) + if (confirm('Are you sure you want to delete the selected releases?')) { + $.post(SERVERROOT + "ajax_release-admin?action=dodelete"+ids, function(resp){ + window.location = window.location; + }); + } + }); + $('button.nzb_multi_operations_rebuild').click(function(){ + var ids = ""; + $("table.data INPUT[type='checkbox']:checked").each( function(i, row) { + if ($(row).val()!="on") + ids += '&id[]='+$(row).val(); + }); + if (ids) + if (confirm('Are you sure you want to rebuild the selected releases?')) { + $.post(SERVERROOT + "ajax_release-admin?action=dorebuild"+ids, function(resp){ + window.location = window.location; + }); + } + }); + //cart functions + $('button.nzb_multi_operations_cartdelete').click(function(){ + var ids = new Array(); + $("table.data INPUT[type='checkbox']:checked").each( function(i, row) { + if ($(row).val()!="on") + ids += '&id[]='+$(row).val(); + }); + if (ids) + { + if (confirm('Are you sure you want to delete the selected releases from your '+CARTNAME+'?')) { + $.post( SERVERROOT + "cart?delete", { 'delete': ids }, function(resp){ + window.location = window.location; + }); + } + } + }); + $('button.nzb_multi_operations_cartsab').click(function(){ + var ids = new Array(); + $("table.data INPUT[type='checkbox']:checked").each( function(i, row) { + var guid = $(row).val(); + var nzburl = SERVERROOT + "sendtoqueue/" + guid; + $.post( nzburl, function(resp){ + $.pnotify({ + title: 'ADDED TO SAB!', + text: 'Its now in the queue!! ^_^', + type: 'info', + icon: 'fa-icon-info-sign' + }); + }); + }); + }); + + /* END OFF - nzb_multi_operations_form */ + + // headermenu.tpl + $('#headsearch') + .focus(function () { + if (this.value == 'Enter keywords') this.value = ''; + }) + .blur(function () { + if (this.value == '') this.value = 'Enter keywords'; + }); + $('#headsearch_form').submit(function () { + $('headsearch_go').trigger('click'); + return false; + }); + $('#headsearch_go').click(function () { + if ($('#headsearch').val() && $('#headsearch').val() != 'Enter keywords') { + document.location = WWW_TOP + "/search/" + $('#headsearch').val() + ($("#headcat").val() != -1 ? "?t=" + $("#headcat").val() : ""); + } + }); + + // search.tpl + $('#search_search_button').click(function () { + if ($('#search').val()) + document.location = WWW_TOP + "/search/" + $('#search').val() + ($("#search_cat").val() != -1 ? "?t=" + $("#search_cat").val() : ""); + return false; + }); + + // login.tpl, register.tpl, search.tpl, searchraw.tpl + if ($('#username').length) + $('#username').focus(); + if ($('#search').length) + $('#search').focus(); + + // viewfilelist.tpl + $('#viewfilelist_download_selected').click(function () { + if ($('#fileform input:checked').length) + $('#fileform').trigger('submit'); + return false; + }); + + // misc + $('.confirm_action').click(function () { + return confirm('Are you sure?'); + }); + + // mmenu + $('.mmenu').click(function () { + document.location = $(this).children('a').attr('href'); + return false; + }); + + // mmenu_new + $('.mmenu_new').click(function () { + window.open($(this).children('a').attr('href')); + return false; + }); + + // searchraw.tpl, viewfilelist.tpl -- checkbox operations + // selections + var last1, last2; + $(".checkbox_operations .select_all").click(function () { + $("table.data INPUT[type='checkbox']").prop('checked', true).trigger('change'); + return false; + }); + $(".checkbox_operations .select_none").click(function () { + $("table.data INPUT[type='checkbox']").prop('checked', false).trigger('change'); + return false; + }); + $(".checkbox_operations .select_invert").click(function () { + $("table.data INPUT[type='checkbox']").each(function () { + $(this).prop('checked', !$(this).prop('checked')).trigger('change'); + }); + return false; + }); + $(".checkbox_operations .select_range").click(function () { + if (last1 && last2 && last1 < last2) + $("table.data INPUT[type='checkbox']").slice(last1, last2).prop('checked', true).trigger('change'); + else if (last1 && last2) + $("table.data INPUT[type='checkbox']").slice(last2, last1).prop('checked', true).trigger('change'); + return false; + }); + $('table.data td.check INPUT[type="checkbox"]').click(function (e) { + // range event interaction -- see further above + var rowNum = $(e.target).parent().parent()[0].rowIndex; + if (last1) last2 = last1; + last1 = rowNum; + + // perform range selection + if (e.shiftKey && last1 && last2) { + if (last1 < last2) + $("table.data INPUT[type='checkbox']").slice(last1, last2).prop('checked', true).trigger('change'); + else + $("table.data INPUT[type='checkbox']").slice(last2, last1).prop('checked', true).trigger('change'); + } + }); + $('table.data a.data_filename').click(function (e) { // click filenames to select + // range event interaction -- see further above + var rowNum = $(e.target).parent().parent()[0].rowIndex; + if (last1) last2 = last1; + last1 = rowNum; + + var $checkbox = $('table.data tr:nth-child(' + (rowNum + 1) + ') td.selection INPUT[type="checkbox"]'); + $checkbox.prop('checked', !$checkbox.prop('checked')); + + return false; + }); + + + // show/hide invite form + $('#lnkSendInvite').click(function () { + $('#divInvite').slideToggle('fast'); + }); + + // send an invite + $('#frmSendInvite').submit(function () { + var inputEmailto = $("#txtInvite").val(); + if (isValidEmailAddress(inputEmailto)) { + + // no caching of results + var rand_no = Math.random(); + $.ajax({ + url: WWW_TOP + '/ajax_profile?action=1&rand=' + rand_no, + data: { emailto: inputEmailto}, + dataType: "html", + success: function (data) { + $("#txtInvite").val(""); + $('#divInvite').slideToggle('fast'); + $("#divInviteSuccess").text(data).show(); + $("#divInviteError").hide(); + }, + error: function (xhr, err, e) { + alert("Error in ajax_profile: " + err); + } + }); + } + else { + $("#divInviteSuccess").hide(); + $("#divInviteError").text("Invalid email").show(); + } + return false; + }); + + // movie.tpl + $('.mlmore').click(function () { // show more movies + $(this).parent().parent().hide(); + $(this).parent().parent().parent().children(".mlextra").show(); + return false; + }); + + // lookup tmdb for a movie + $('#frmMyMovieLookup').submit(function () { + var movSearchText = $("#txtsearch").val(); + // no caching of results + var rand_no = Math.random(); + $.ajax({ + url: WWW_TOP + '/ajax_mymovies?rand=' + rand_no, + data: { id: movSearchText}, + dataType: "html", + success: function (data) { + $("#divMovResults").html(data); + }, + error: function (xhr, err, e) { + alert("Error in ajax_mymovies: " + err); + } + }); + + return false; + }); + + + // file list tooltip + $(".rarfilelist").each(function () { + var guid = $(this).children('img').attr('alt'); + $(this).qtip({ + content: { + title: { + text: 'rar archive contains...' + }, + text: 'loading...', // The text to use whilst the AJAX request is loading + ajax: { + url: SERVERROOT + 'ajax_rarfilelist', // URL to the local file + type: 'GET', // POST or GET + data: { id: guid }, // Data to pass along with your request + success: function (data, status) { + this.set('content.text', data); + } + } + }, + position: { + my: 'top right', + at: 'bottom left' + }, + style: { + classes: 'qtip-dark qtip-shadow qtip-rounded', + width: { max: 500 }, + tip: { // Now an object instead of a string + corner: 'topRight', // We declare our corner within the object using the corner sub-option + size: { + x: 8, // Be careful that the x and y values refer to coordinates on screen, not height or width. + y: 8 // Depending on which corner your tooltip is at, x and y could mean either height or width! + } + } + } + }); + }); + + // seriesinfo tooltip + $(".seriesinfo").each(function () { + var guid = $(this).attr('title'); + $(this).qtip({ + content: { + title: { + text: 'episode info...' + }, + text: 'loading...', // The text to use whilst the AJAX request is loading + ajax: { + url: SERVERROOT + 'ajax_tvinfo', // URL to the local file + type: 'GET', // POST or GET + data: { id: guid }, // Data to pass along with your request + success: function (data, status) { + this.set('content.text', data); + } + } + }, + style: { + classes: 'qtip-dark qtip-shadow qtip-rounded' + } + }); + }); + + // mediainfo tooltip + $(".mediainfo").each(function () { + var guid = $(this).attr('title'); + $(this).qtip({ + content: { + title: { + text: 'extended media info...' + }, + text: 'loading...', // The text to use whilst the AJAX request is loading + ajax: { + url: SERVERROOT + 'ajax_mediainfo', // URL to the local file + type: 'GET', // POST or GET + data: { id: guid }, // Data to pass along with your request + success: function (data, status) { + this.set('content.text', data); + } + } + }, + style: { + classes: 'qtip-dark qtip-shadow qtip-rounded', + width: { max: 500 }, + tip: { // Now an object instead of a string + corner: 'topLeft', // We declare our corner within the object using the corner sub-option + size: { + x: 8, // Be careful that the x and y values refer to coordinates on screen, not height or width. + y: 8 // Depending on which corner your tooltip is at, x and y could mean either height or width! + } + } + } + }); + }); + + // preinfo tooltip + $(".preinfo").each(function() { + var searchname = $(this).attr('title'); + $(this).qtip({ + content: { + title: { + text: 'Pre Info' + }, + text: 'loading...', + ajax: { + url: SERVERROOT + 'ajax_preinfo', + type: 'GET', + data: { searchname: searchname }, + success: function(data, status) { + this.set('content.text', data); + } + } + }, + style: { + classes: 'ui-tooltip-tmux' + } + }); + }); + + // prehashinfo tooltip + $(".prehashinfo").each(function () { + var prehashid = $(this).attr('title'); + $(this).qtip({ + content: { + title: { + text: 'PreHash info...' + }, + text: 'loading...', // The text to use whilst the AJAX request is loading + ajax: { + url: SERVERROOT + 'ajax_prehashinfo', // URL to the local file + type: 'GET', // POST or GET + data: { id: prehashid }, // Data to pass along with your request + success: function (data, status) { + this.set('content.text', data); + } + } + }, + style: { + classes: 'qtip-dark qtip-shadow qtip-rounded', + width: { max: 500 }, + tip: { // Now an object instead of a string + corner: 'topLeft', // We declare our corner within the object using the corner sub-option + size: { + x: 8, // Be careful that the x and y values refer to coordinates on screen, not height or width. + y: 8 // Depending on which corner your tooltip is at, x and y could mean either height or width! + } + } + } + }); + }); + + // titleinfo tooltip + $(".titleinfo").each(function () { + var guid = $(this).attr('title'); + $(this).qtip({ + content: { + title: { + text: 'Release info...' + }, + text: 'loading...', // The text to use whilst the AJAX request is loading + ajax: { + url: SERVERROOT + 'ajax_titleinfo', // URL to the local file + type: 'GET', // POST or GET + data: { id: guid }, // Data to pass along with your request + success: function (data, status) { + this.set('content.text', data); + } + } + }, + style: { + classes: 'qtip-dark qtip-shadow qtip-rounded', + width: { max: 500 }, + tip: { // Now an object instead of a string + corner: 'topLeft', // We declare our corner within the object using the corner sub-option + size: { + x: 8, // Be careful that the x and y values refer to coordinates on screen, not height or width. + y: 8 // Depending on which corner your tooltip is at, x and y could mean either height or width! + } + } + } + }); + }); +}); + + +$.extend({ // http://plugins.jquery.com/project/URLEncode + URLEncode: function (c) { + var o = ''; + var x = 0; + c = c.toString(); + var r = /(^[a-zA-Z0-9_.]*)/; + while (x < c.length) { + var m = r.exec(c.substr(x)); + if (m != null && m.length > 1 && m[1] != '') { + o += m[1]; + x += m[1].length; + } else { + if (c[x] == ' ')o += '+'; else { + var d = c.charCodeAt(x); + var h = d.toString(16); + o += '%' + (h.length < 2 ? '0' : '') + h.toUpperCase(); + } + x++; + } + } + return o; + }, + URLDecode: function (s) { + var o = s; + var binVal, t; + var r = /(%[^%]{2})/; + while ((m = r.exec(o)) != null && m.length > 1 && m[1] != '') { + b = parseInt(m[1].substr(1), 16); + t = String.fromCharCode(b); + o = o.replace(m[1], t); + } + return o; + } +}); + + +function isValidEmailAddress(emailAddress) { + var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i); + return pattern.test(emailAddress); +} + +function mymovie_del(imdbid, btn) { + var rand_no = Math.random(); + $.ajax({ + url: WWW_TOP + '/ajax_mymovies?rand=' + rand_no, + data: { del: imdbid}, + dataType: "html", + success: function (data) { + $(btn).hide(); + $(btn).prev("a").show(); + }, + error: function (xhr, err, e) { + } + }); + + return false; +} + +function mymovie_add(imdbid, btn) { + $(btn).hide(); + $(btn).next("a").show(); + + var rand_no = Math.random(); + $.ajax({ + url: WWW_TOP + '/ajax_mymovies?rand=' + rand_no, + data: { add: imdbid}, + dataType: "html", + success: function (data) { + }, + error: function (xhr, err, e) { + } + }); + + return false; +} + + +// qtip growl +$(document).ready(function () { + + window.createGrowl = function (tipText /*, tipTitle, persistent*/) { + // Use the last visible jGrowl qtip as our positioning target + var target = $('.qtip.jgrowl:visible:last'); + var tipTitle = 'Attention!'; + var persistent = false; + + // Create your jGrowl qTip... + $(document.body).qtip({ + // Any content config you want here really.... go wild! + content: { + text: tipText, + title: { + text: tipTitle, + button: true + } + }, + position: { + my: 'top right', // Not really important... + at: (target.length ? 'bottom' : 'top') + ' right', // If target is window use 'top right' instead of 'bottom right' + target: target.length ? target : $(document.body), // Use our target declared above + adjust: { y: 5 } // Add some vertical spacing + }, + show: { + event: false, // Don't show it on a regular event + ready: true, // Show it when ready (rendered) + effect: function () { + $(this).stop(0, 1).fadeIn(400); + }, // Matches the hide effect + + // Custom option for use with the .get()/.set() API, awesome! + persistent: persistent + }, + hide: { + event: false, // Don't hide it on a regular event + effect: function (api) { + // Do a regular fadeOut, but add some spice! + $(this).stop(0, 1).fadeOut(400).queue(function () { + // Destroy this tooltip after fading out + api.destroy(); + + // Update positions + updateGrowls(); + }) + } + }, + style: { + classes: 'jgrowl qtip-dark qtip-shadow qtip-rounded', // Some nice visual classes + tip: false // No tips for this one (optional ofcourse) + }, + events: { + render: function (event, api) { + // Trigger the timer (below) on render + timer.call(api.elements.tooltip, event); + } + } + }) + .removeData('qtip'); + }; + + // Make it a window property see we can call it outside via updateGrowls() at any point + window.updateGrowls = function () { + // Loop over each jGrowl qTip + var each = $('.qtip.jgrowl:not(:animated)'); + each.each(function (i) { + var api = $(this).data('qtip'); + + // Set the target option directly to prevent reposition() from being called twice. + api.options.position.target = !i ? $(document.body) : each.eq(i - 1); + api.set('position.at', (!i ? 'top' : 'bottom') + ' right'); + }); + }; + + // Setup our timer function + function timer(event) { + var api = $(this).data('qtip'), + lifespan = 5000; // 5 second lifespan + + // If persistent is set to true, don't do anything. + if (api.get('show.persistent') === true) { + return; + } + + // Otherwise, start/clear the timer depending on event type + clearTimeout(api.timer); + if (event.type !== 'mouseover') { + api.timer = setTimeout(api.hide, lifespan); + } + } + + // Utilise delegate so we don't have to rebind for every qTip! + $(document).delegate('.qtip.jgrowl', 'mouseover mouseout', timer); +}); \ No newline at end of file diff --git a/www/templates_shared/styles/admin.css b/www/templates_shared/styles/admin.css new file mode 100644 index 000000000..66c60ee56 --- /dev/null +++ b/www/templates_shared/styles/admin.css @@ -0,0 +1,59 @@ +body { background: #FFFFFF ; } +textarea { height:100px; width:400px; } +fieldset { margin-bottom:20px; border:1px solid #999;} +legend { padding: 0.4em 0.6em; border:1px solid #999; font-weight:bold; text-align:right; } + + +#content { width: 77%; } +#sidebar { width: 200px; } +#sidebar li li:hover { cursor:auto; } +#logo { width: 0; height: 0; margin: 0 auto; padding-left:0; margin-top:0; } +.footer { width: 100%; height: 100px; margin: 0 auto; background: #FFF; border-top: 0; } +#menu { height:0px; border:0px;} + + +table.input td { vertical-align:top;} + +/* group editing */ +div#group_list { +} + +div#message { + display: none; + margin: 0 0 10px 0; + color: #fff; + background: #008C00; + border: 1px solid #ddd; + padding: 5px; + } + +/* deactivate link */ +div#group_list a.group_active, +div#group_list a.group_active:visited, +div#group_list a.group_active:active +a.backfill_active, +a.backfill_active:visited, +a.backfill_active:active { + color: #CC0000; +} + +/* activate link */ +div#group_list a.group_deactive +div#group_list a.group_deactive:visited, +div#group_list a.group_deactive:active +a.backfill_deactive, +a.backfill_deactive:visited, +a.backfill_deactive:active { + color: #008C00; +} + +#donate { + float: right; + display: block; + width: 150px; + border: 1px solid #ddd; + text-align: center; + padding: 8px 0px 8px 0px; +} +#donate form { margin: 0px; padding: 0px; } +#donate h3 { margin: 0px 0px 6px 0px; padding: 0px; } \ No newline at end of file diff --git a/www/templates_shared/styles/bootstrap.min.css b/www/templates_shared/styles/bootstrap.min.css new file mode 100644 index 000000000..cd1c616ad --- /dev/null +++ b/www/templates_shared/styles/bootstrap.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.4 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}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-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/www/templates_shared/styles/install.css b/www/templates_shared/styles/install.css new file mode 100644 index 000000000..199f4dda7 --- /dev/null +++ b/www/templates_shared/styles/install.css @@ -0,0 +1,46 @@ +/* +site wide html styles +*/ +body { margin: 0; padding: 0; background: #FFFFFF url(../images/menu.gif) repeat-x; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 14px; color: #515151; } +input, select, textarea { font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 14px;} +a { text-decoration: none; color: blue; } +h1, h2, h3 { margin: 0; font-weight: normal; color: #485459; } +li { padding-top:10px; } +textarea { font-family: Arial, Helvetica, sans-serif; height:100px; width:300px;} +h1 { font-size: 3.0em; padding-bottom:10px;} +h2 { font-size: 2.0em; padding-bottom:10px;} +input[type=text], input[type=password], textarea, select { background: #fff; background: -webkit-gradient(linear, left top, left 25, from(#fff), color-stop(4%, #f0f0f0), to(#fff)); border: 1px solid #ccc; border-bottom-color: #999; border-right-color: #999; margin: 0; padding: 4px; color: #444; font-size: 100%; outline: none; } + + + +/* +page layout +*/ +#logo { margin-left: 200px; margin-top: 30px; margin-bottom: 30px; } +.content { border: 1px solid #515151; width: 600px; padding: 30px; margin-left: auto; margin-right: auto; background: #FFF; border:1px solid #EEE; -moz-box-shadow: 3px 6px 8px -4px #777; -webkit-box-shadow: 3px 6px 8px -4px #777; box-shadow: 3px 6px 8px -4px #777; } +.footer { font-size: 10px; text-align: center; } + +/* +install warning message +*/ +div.error { color: red; padding: 20px; } +span.error { color: red; } +span.warn { color: orange; } +span.success { color: green; } + +/* +lists +*/ +table.data { border-collapse:collapse; } +table.data th { text-align:left; vertical-align:top; background-color:#DDD; border-color: #AAA; border-width: 1px; border-style: solid; padding:3px; font-style:bolder; text-transform:capitalize;} +table.data td { white-space:normal; vertical-align:top; padding:5px; border-color: #AAA; border-width: 1px; border-style: solid; } +table.data td.less { color: #888; font-size: 0.8em; white-space:nowrap; } +table.data td.icons { white-space:nowrap; padding-left:0px; padding-right:0px; width:60px; } +table.highlight tr:hover td { background-color: #E1F0D9; } +table tr.alt { background-color: #EEE; } +table.data em {font-weight:bolder; color:red;} +div.hint, div.hint a {font-size:0.9em; font-style:italic; color:#999;} +div.hint { margin-bottom:10px;} +input.long {width:400px; } +input.short { width:40px; } +input.date { width:70px; } diff --git a/www/templates_shared/styles/jquery.multiselect.css b/www/templates_shared/styles/jquery.multiselect.css new file mode 100644 index 000000000..f04797105 --- /dev/null +++ b/www/templates_shared/styles/jquery.multiselect.css @@ -0,0 +1,93 @@ +.ms-container{ + background: transparent url('../images/icons/switch.png') no-repeat 50% 50%; + width: 500px; +} + +.ms-container:after{ + content: "."; + display: block; + height: 0; + line-height: 0; + font-size: 0; + clear: both; + min-height: 0; + visibility: hidden; +} + +.ms-container .ms-selectable, .ms-container .ms-selection{ + background: #fff; + color: #555555; + float: left; + width: 45%; +} +.ms-container .ms-selection{ + float: right; +} + +.ms-container .ms-list{ + -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 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + position: relative; + height: 200px; + padding: 0; + overflow-y: auto; +} + +.ms-container .ms-list.ms-focus{ + border-color: rgba(82, 168, 236, 0.8); + -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); + outline: 0; + outline: thin dotted \9; +} + +.ms-container ul{ + margin: 0; + list-style-type: none; + padding: 0; +} + +.ms-container .ms-optgroup-container{ + width: 100%; +} + +.ms-container .ms-optgroup-label{ + margin: 0; + padding: 5px 0px 0px 5px; + cursor: pointer; + color: #999; +} + +.ms-container .ms-selectable li.ms-elem-selectable, +.ms-container .ms-selection li.ms-elem-selection{ + border-bottom: 1px #eee solid; + padding: 2px 10px; + color: #555; + font-size: 14px; +} + +.ms-container .ms-selectable li.ms-hover, +.ms-container .ms-selection li.ms-hover{ + cursor: pointer; + color: #fff; + text-decoration: none; + background-color: #08c; +} + +.ms-container .ms-selectable li.disabled, +.ms-container .ms-selection li.disabled{ + background-color: #eee; + color: #aaa; + cursor: text; +} \ No newline at end of file diff --git a/www/templates_shared/styles/jquery.pnotify.default.css b/www/templates_shared/styles/jquery.pnotify.default.css new file mode 100644 index 000000000..de1068aab --- /dev/null +++ b/www/templates_shared/styles/jquery.pnotify.default.css @@ -0,0 +1,83 @@ +/* +Document : jquery.pnotify.default.css +Created on : Nov 23, 2009, 3:14:10 PM +Author : Hunter Perrin +Version : 1.2.0 +Link : http://pinesframework.org/pnotify/ +Description: + Default styling for Pines Notify jQuery plugin. +*/ +/* -- Notice */ +.ui-pnotify { +top: 25px; +right: 25px; +position: absolute; +height: auto; +/* Ensures notices are above everything */ +z-index: 9999; +} +/* Hides position: fixed from IE6 */ +html > body .ui-pnotify { +position: fixed; +} +.ui-pnotify .ui-pnotify-shadow { +-webkit-box-shadow: 0px 2px 10px rgba(50, 50, 50, 0.5); +-moz-box-shadow: 0px 2px 10px rgba(50, 50, 50, 0.5); +box-shadow: 0px 2px 10px rgba(50, 50, 50, 0.5); +} +.ui-pnotify-container { +background-position: 0 0; +padding: .8em; +height: 100%; +margin: 0; +} +.ui-pnotify-sharp { +-webkit-border-radius: 0; +-moz-border-radius: 0; +border-radius: 0; +} +.ui-pnotify-closer, .ui-pnotify-sticker { +float: right; +margin-left: .2em; +} +.ui-pnotify-title { +display: block; +margin-bottom: .4em; +} +.ui-pnotify-text { +display: block; +} +.ui-pnotify-icon, .ui-pnotify-icon span { +display: block; +float: left; +margin-right: .2em; +} +/* -- History Pulldown */ +.ui-pnotify-history-container { +position: absolute; +top: 0; +right: 18px; +width: 70px; +border-top: none; +padding: 0; +-webkit-border-top-left-radius: 0; +-moz-border-top-left-radius: 0; +border-top-left-radius: 0; +-webkit-border-top-right-radius: 0; +-moz-border-top-right-radius: 0; +border-top-right-radius: 0; +/* Ensures history container is above notices. */ +z-index: 10000; +} +.ui-pnotify-history-container .ui-pnotify-history-header { +padding: 2px; +} +.ui-pnotify-history-container button { +cursor: pointer; +display: block; +width: 100%; +} +.ui-pnotify-history-container .ui-pnotify-history-pulldown { +display: block; +margin: 0 auto; +} \ No newline at end of file diff --git a/www/templates_shared/styles/jquery.qtip.css b/www/templates_shared/styles/jquery.qtip.css new file mode 100644 index 000000000..e466f4c14 --- /dev/null +++ b/www/templates_shared/styles/jquery.qtip.css @@ -0,0 +1,623 @@ +/* + * qTip2 - Pretty powerful tooltips - v2.2.0 + * http://qtip2.com + * + * Copyright (c) 2013 Craig Michael Thompson + * Released under the MIT, GPL licenses + * http://jquery.org/license + * + * Date: Sun Dec 15 2013 12:33 EST-0500 + * Plugins: tips viewport imagemap svg modal ie6 + * Styles: basic css3 + */ +.qtip{ + position: absolute; + left: -28000px; + top: -28000px; + display: none; + + max-width: 280px; + min-width: 50px; + + font-size: 10.5px; + line-height: 12px; + + direction: ltr; + + box-shadow: none; + padding: 0; +} + + .qtip-content{ + position: relative; + padding: 5px 9px; + overflow: hidden; + + text-align: left; + word-wrap: break-word; + } + + .qtip-titlebar{ + position: relative; + padding: 5px 35px 5px 10px; + overflow: hidden; + + border-width: 0 0 1px; + font-weight: bold; + } + + .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; } + + /* Default close button class */ + .qtip-close{ + position: absolute; + right: -9px; top: -9px; + + cursor: pointer; + outline: medium none; + + border-width: 1px; + border-style: solid; + border-color: transparent; + } + + .qtip-titlebar .qtip-close{ + right: 4px; top: 50%; + margin-top: -9px; + } + + * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */ + + .qtip-titlebar .ui-icon, + .qtip-icon .ui-icon{ + display: block; + text-indent: -1000em; + direction: ltr; + } + + .qtip-icon, .qtip-icon .ui-icon{ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + text-decoration: none; + } + + .qtip-icon .ui-icon{ + width: 18px; + height: 14px; + + line-height: 14px; + text-align: center; + text-indent: 0; + font: normal bold 10px/13px Tahoma,sans-serif; + + color: inherit; + background: transparent none no-repeat -100em -100em; + } + +/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */ +.qtip-focus{} + +/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */ +.qtip-hover{} + +/* Default tooltip style */ +.qtip-default{ + border-width: 1px; + border-style: solid; + border-color: #F1D031; + + background-color: #FFFFA3; + color: #555; +} + + .qtip-default .qtip-titlebar{ + background-color: #FFEF93; + } + + .qtip-default .qtip-icon{ + border-color: #CCC; + background: #F1F1F1; + color: #777; + } + + .qtip-default .qtip-titlebar .qtip-close{ + border-color: #AAA; + color: #111; + } + + + +/*! Light tooltip style */ +.qtip-light{ + background-color: white; + border-color: #E2E2E2; + color: #454545; +} + + .qtip-light .qtip-titlebar{ + background-color: #f1f1f1; + } + + +/*! Dark tooltip style */ +.qtip-dark{ + background-color: #505050; + border-color: #303030; + color: #f3f3f3; +} + + .qtip-dark .qtip-titlebar{ + background-color: #404040; + } + + .qtip-dark .qtip-icon{ + border-color: #444; + } + + .qtip-dark .qtip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/*! Cream tooltip style */ +.qtip-cream{ + background-color: #FBF7AA; + border-color: #F9E98E; + color: #A27D35; +} + + .qtip-cream .qtip-titlebar{ + background-color: #F0DE7D; + } + + .qtip-cream .qtip-close .qtip-icon{ + background-position: -82px 0; + } + + +/*! Red tooltip style */ +.qtip-red{ + background-color: #F78B83; + border-color: #D95252; + color: #912323; +} + + .qtip-red .qtip-titlebar{ + background-color: #F06D65; + } + + .qtip-red .qtip-close .qtip-icon{ + background-position: -102px 0; + } + + .qtip-red .qtip-icon{ + border-color: #D95252; + } + + .qtip-red .qtip-titlebar .ui-state-hover{ + border-color: #D95252; + } + + +/*! Green tooltip style */ +.qtip-green{ + background-color: #CAED9E; + border-color: #90D93F; + color: #3F6219; +} + + .qtip-green .qtip-titlebar{ + background-color: #B0DE78; + } + + .qtip-green .qtip-close .qtip-icon{ + background-position: -42px 0; + } + + +/*! Blue tooltip style */ +.qtip-blue{ + background-color: #E5F6FE; + border-color: #ADD9ED; + color: #5E99BD; +} + + .qtip-blue .qtip-titlebar{ + background-color: #D0E9F5; + } + + .qtip-blue .qtip-close .qtip-icon{ + background-position: -2px 0; + } + + + +.qtip-shadow{ + -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); + box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); +} + +/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ +.qtip-rounded, +.qtip-tipsy, +.qtip-bootstrap{ + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +.qtip-rounded .qtip-titlebar{ + -moz-border-radius: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +/* Youtube tooltip style */ +.qtip-youtube{ + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + + -webkit-box-shadow: 0 0 3px #333; + -moz-box-shadow: 0 0 3px #333; + box-shadow: 0 0 3px #333; + + color: white; + border-width: 0; + + background: #4A4A4A; + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black)); + background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%); + background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%); +} + + .qtip-youtube .qtip-titlebar{ + background-color: #4A4A4A; + background-color: rgba(0,0,0,0); + } + + .qtip-youtube .qtip-content{ + padding: .75em; + font: 12px arial,sans-serif; + + filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000); + -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"; + } + + .qtip-youtube .qtip-icon{ + border-color: #222; + } + + .qtip-youtube .qtip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/* jQuery TOOLS Tooltip style */ +.qtip-jtools{ + background: #232323; + background: rgba(0, 0, 0, 0.7); + background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323)); + background-image: -moz-linear-gradient(top, #717171, #232323); + background-image: -webkit-linear-gradient(top, #717171, #232323); + background-image: -ms-linear-gradient(top, #717171, #232323); + background-image: -o-linear-gradient(top, #717171, #232323); + + border: 2px solid #ddd; + border: 2px solid rgba(241,241,241,1); + + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + + -webkit-box-shadow: 0 0 12px #333; + -moz-box-shadow: 0 0 12px #333; + box-shadow: 0 0 12px #333; +} + + /* IE Specific */ + .qtip-jtools .qtip-titlebar{ + background-color: transparent; + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"; + } + .qtip-jtools .qtip-content{ + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"; + } + + .qtip-jtools .qtip-titlebar, + .qtip-jtools .qtip-content{ + background: transparent; + color: white; + border: 0 dashed transparent; + } + + .qtip-jtools .qtip-icon{ + border-color: #555; + } + + .qtip-jtools .qtip-titlebar .ui-state-hover{ + border-color: #333; + } + + +/* Cluetip style */ +.qtip-cluetip{ + -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); + + background-color: #D9D9C2; + color: #111; + border: 0 dashed transparent; +} + + .qtip-cluetip .qtip-titlebar{ + background-color: #87876A; + color: white; + border: 0 dashed transparent; + } + + .qtip-cluetip .qtip-icon{ + border-color: #808064; + } + + .qtip-cluetip .qtip-titlebar .ui-state-hover{ + border-color: #696952; + color: #696952; + } + + +/* Tipsy style */ +.qtip-tipsy{ + background: black; + background: rgba(0, 0, 0, .87); + + color: white; + border: 0 solid transparent; + + font-size: 11px; + font-family: 'Lucida Grande', sans-serif; + font-weight: bold; + line-height: 16px; + text-shadow: 0 1px black; +} + + .qtip-tipsy .qtip-titlebar{ + padding: 6px 35px 0 10px; + background-color: transparent; + } + + .qtip-tipsy .qtip-content{ + padding: 6px 10px; + } + + .qtip-tipsy .qtip-icon{ + border-color: #222; + text-shadow: none; + } + + .qtip-tipsy .qtip-titlebar .ui-state-hover{ + border-color: #303030; + } + + +/* Tipped style */ +.qtip-tipped{ + border: 3px solid #959FA9; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + + background-color: #F9F9F9; + color: #454545; + + font-weight: normal; + font-family: serif; +} + + .qtip-tipped .qtip-titlebar{ + border-bottom-width: 0; + + color: white; + background: #3A79B8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D)); + background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D); + background-image: -moz-linear-gradient(top, #3A79B8, #2E629D); + background-image: -ms-linear-gradient(top, #3A79B8, #2E629D); + background-image: -o-linear-gradient(top, #3A79B8, #2E629D); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"; + } + + .qtip-tipped .qtip-icon{ + border: 2px solid #285589; + background: #285589; + } + + .qtip-tipped .qtip-icon .ui-icon{ + background-color: #FBFBFB; + color: #555; + } + + +/** + * Twitter Bootstrap style. + * + * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11. + * Does not work with IE 7. + */ +.qtip-bootstrap{ + /** Taken from Bootstrap body */ + font-size: 14px; + line-height: 20px; + color: #333333; + + /** Taken from Bootstrap .popover */ + padding: 1px; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -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; +} + + .qtip-bootstrap .qtip-titlebar{ + /** Taken from Bootstrap .popover-title */ + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; + } + + .qtip-bootstrap .qtip-titlebar .qtip-close{ + /** + * Overrides qTip2: + * .qtip-titlebar .qtip-close{ + * [...] + * right: 4px; + * top: 50%; + * [...] + * border-style: solid; + * } + */ + right: 11px; + top: 45%; + border-style: none; + } + + .qtip-bootstrap .qtip-content{ + /** Taken from Bootstrap .popover-content */ + padding: 9px 14px; + } + + .qtip-bootstrap .qtip-icon{ + /** + * Overrides qTip2: + * .qtip-default .qtip-icon { + * border-color: #CCC; + * background: #F1F1F1; + * color: #777; + * } + */ + background: transparent; + } + + .qtip-bootstrap .qtip-icon .ui-icon{ + /** + * Overrides qTip2: + * .qtip-icon .ui-icon{ + * width: 18px; + * height: 14px; + * } + */ + width: auto; + height: auto; + + /* Taken from Bootstrap .close */ + float: right; + font-size: 20px; + font-weight: bold; + line-height: 18px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); + } + + .qtip-bootstrap .qtip-icon .ui-icon:hover{ + /* Taken from Bootstrap .close:hover */ + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); + } + + +/* IE9 fix - removes all filters */ +.qtip:not(.ie9haxors) div.qtip-content, +.qtip:not(.ie9haxors) div.qtip-titlebar{ + filter: none; + -ms-filter: none; +} + + + +.qtip .qtip-tip{ + margin: 0 auto; + overflow: hidden; + z-index: 10; + +} + + /* Opera bug #357 - Incorrect tip position + https://github.com/Craga89/qTip2/issues/367 */ + x:-o-prefocus, .qtip .qtip-tip{ + visibility: hidden; + } + + .qtip .qtip-tip, + .qtip .qtip-tip .qtip-vml, + .qtip .qtip-tip canvas{ + position: absolute; + + color: #123456; + background: transparent; + border: 0 dashed transparent; + } + + .qtip .qtip-tip canvas{ top: 0; left: 0; } + + .qtip .qtip-tip .qtip-vml{ + behavior: url(#default#VML); + display: inline-block; + visibility: visible; + } + +#qtip-overlay{ + position: fixed; + left: 0; top: 0; + width: 100%; height: 100%; +} + + /* Applied to modals with show.modal.blur set to true */ + #qtip-overlay.blurs{ cursor: pointer; } + + /* Change opacity of overlay here */ + #qtip-overlay div{ + position: absolute; + left: 0; top: 0; + width: 100%; height: 100%; + + background-color: black; + + opacity: 0.7; + filter:alpha(opacity=70); + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + } + + + +.qtipmodal-ie6fix{ + position: absolute !important; +} \ No newline at end of file diff --git a/www/templates_shared/styles/posterwall.css b/www/templates_shared/styles/posterwall.css new file mode 100644 index 000000000..89f72a9e3 --- /dev/null +++ b/www/templates_shared/styles/posterwall.css @@ -0,0 +1,859 @@ +body,h1,h2,h3,h4,h5,h6,img,input,form,fieldset{ + margin:0; + padding:0; + outline:0; + border:0; +} + + +*{ + outline:0; +} + + +body{ + font-family:"Droid Sans",Arial,serif; + font-size:13px; + color:#000; + background-color:#d5d3be; +} + + +div.poster a img{ + margin:0; + padding:0; + border:0; +} + + +div.poster a{ + text-decoration:none; + color:#008fbb; +} + + +div.icons { + white-space:nowrap; + padding-left:0px; + padding-right:0px; + width:65px; + margin: 0 auto; +} + +.icon_allmusic { background-image:url('../images/icons/allmusic.png'); } +.icon_allmusic2 { content:url('../images/icons/allmusic.png'); } +.icon_amazon { background-image:url('../images/icons/amazon.png'); } +.icon_amazon2 { content:url('../images/icons/amazon.png'); } +.icon_giantbomb { background-image:url('../images/icons/giantbomb.png');} +.icon_cart { background-image:url('../images/icons/cartup.png'); } +.icon_cart_clicked { background-image:url('../images/icons/cartdown.png'); } +.icon_couch { background-image:url('../images/icons/couch.png'); } +.icon_couch2 { content:url('../images/icons/couch.png'); } +.icon_discogs { background-image:url('../images/icons/discogs.png'); } +.icon_gamespot { background-image:url('../images/icons/gamespot.png'); } +.icon_ign { background-image:url('../images/icons/ign.png'); } +.icon_lastfm { background-image:url('../images/icons/lastfm.png'); } +.icon_nzb { background-image:url('../images/icons/nzbup.png'); } +.icon_nzb_clicked { background-image:url('../images/icons/nzbdown.png'); } +.icon_nzb a { text-decoration:none; padding-bottom:2px; padding-right:12px; } +.icon_predbme { background-image:url('../images/icons/predbme.png'); } +.icon_imdb { background-image:url('../images/icons/imdb.png'); } +.icon_imdb2 { content:url('../images/icons/imdb.png'); } +.icon_imdb a { text-decoration:none; padding-bottom:2px; padding-right:12px; } +.icon_sab { background-image:url('../images/icons/sabup.png'); } +.icon_sab_clicked { background-image:url('../images/icons/sabdown.png'); } +.icon_trakt { background-image:url('../images/icons/trakt.png'); } +.icon_trakt2 { content:url('../images/icons/trakt.png'); } +.icon_tvrage { background-image:url('../images/icons/tvrage.png'); } +.icon_check { background-image:url('../images/icons/check.png'); } +.icon_cp { background-image:url('../images/icons/couch.png'); } +.icon_goodreads { background-image:url('../images/icons/goodreads.png'); } +.icon_shelfari { background-image:url('../images/icons/shelfari.png'); } + +a.divlink { + display:block; + width:16px; + height:16px; + float:left; +} + +h1{ +} + + +h2{ +} + + +h3{ + margin:13px 0; + font-size:18px; + font-weight:normal; +} + + +h3 a{ + color:#000; +} + + +h3 a.see-more{ + display:block; + border-radius:8px; + color:#000; + padding:5px 7px; + display:block; + float:right; + font-size:12px; + font-weight:normal; + background-color:#d5d3be; +} + + +h3 a.see-more:hover{ + color:#07637a; +; +} + + +h3 a:hover{ + text-decoration:underline; +} + + +input.placeholder{ + color:#aaa!important; +} + + +::-moz-selection{ + background:#4DBCE9; + color:#fff; + text-shadow:none; +} + + +::selection{ + background:#4DBCE9; + color:#fff; + text-shadow:none; +} + + +br.clear{ + clear:both; +} + + +.content{ + margin:0 auto; +} + +/* +#main,.main{ + overflow:hidden; +} + + +#main-wrapper,.main-wrapper{ + background-color:#e8e8dc; + padding-bottom:20px; +} + + +#main-wrapper.alt,.main-wrapper.alt{ + background-color:#d5d3be; +} + + +#main-wrapper.no-bottom,.main-wrapper.no-bottom{ + padding-bottom:0; +} + + +#main-wrapper.less-top,.main-wrapper.less-top{ + margin-top:-40px; +} + + +#main-wrapper.more-top,.main-wrapper.more-top{ + padding-top:20px; +} + + +#main-wrapper.no-top,.main-wrapper.no-top{ + margin-top:0; +} + + +#main-wrapper.less-bottom,.main-wrapper.less-bottom{ + padding-bottom:10px; +} + + +#main-wrapper.top-border,.main-wrapper.top-border{ + border-top:solid 2px #D5D3BE; +} + + +.main-wrapper.alt .recent-wrapper .recent-row,.main-wrapper.alt .recent-wrapper .recent-row.alt{ + background-color:transparent; + border-bottom-color:#bbb9a6; +} + + +.main-wrapper.alt .recent-wrapper .recent-row:first-child{ + border-top:solid 1px #bbb9a6; +} + + +.main-wrapper.alt .recent-wrapper .recent-row:hover{ + background-color:#ebe9d4; +} + + +#main-wrapper.alt .title-overflow,.main-wrapper.alt .title-overflow{ + background-image:url(https://trakt.us/images/title-overflow-alt.png); +} +*/ + +.title-overflow{ + background:url("../images/title-overflow.png") repeat-y 100% 0; + width:30px; + height:40px; + position:absolute; + top:0; + right:0; +} + +.main-content { + background: none repeat scroll 0% 0% rgb(242, 242, 242); + box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5); + text-align: center; +} + +.one-column.no-padding{ + padding:0; +} + +.library-wrapper{ + overflow:hidden; + max-width:100%; + padding:10px; + margin: 0px; +} + +.library-console { + display:inline-block; + width: 130px; + height: 180px; +} + +.library-games { + display:inline-block; + width: 130px; + height: 130px; +} + +.library-music { + display:inline-block; + width: 250px; + height: 250px; +} + +.library-wrapper .library-show{ + display:inline-block; + margin:10px 10px 0 10px; +} + + +/*.library-wrapper .library-show .rank-wrapper{ + position:absolute; + z-index:3; + text-align:center; + width:100%; + top:-10px; +}*/ + + +.library-wrapper .library-show .rank-wrapper .rank{ + background:rgba(0,0,0,0.8); + color:#fff; + padding:4px 8px; + border-radius:15px; + font-size:14px; + font-weight:bold; +} + + +.library-wrapper .library-show .remove-watched,.library-wrapper .library-show .remove-library,.library-wrapper .library-show .remove-watchlist,.library-wrapper .library-show .remove-seen,.library-wrapper .library-show .remove-checkin{ + margin-left:126px; + display:none; +} + + +.library-wrapper .library-show.screen .remove-watched,.library-wrapper .library-show.screen .remove-library,.library-wrapper .library-show.screen .remove-watchlist,.library-wrapper .library-show.screen .remove-seen,.library-wrapper .library-show.screen .remove-checkin{ + margin-left:155px; + display:none; +} + + +.episodes-listing-episode .remove-watchlist{ + margin-left:204px; + display:none; +} + + +.library-wrapper .library-show:hover .remove-watched,.library-wrapper .library-show:hover .remove-library,.library-wrapper .library-show:hover .remove-watchlist,.episodes-listing-episode:hover .remove-watchlist,.library-wrapper .library-show:hover .remove-seen,.library-wrapper .library-show:hover .remove-checkin{ + display:block; +} + + +.library-wrapper .library-show .poster{ + position:relative; + border:solid 1px #d0d0c5; + transition:border-color .5s; + -moz-transition:border-color .5s; + -webkit-transition:border-color .5s; + -o-transition:border-color .5s; +} + + +.library-wrapper .library-show.with-rating-bar .poster{ + padding-bottom:22px; +} + + +.library-wrapper .library-show.with-rating-bar .quick-icons.rating-pod{ + top:228px; +} + + +.library-wrapper .library-show.screen.with-rating-bar .poster{ + padding-bottom:23px; +} + + +.library-wrapper .library-show.screen.with-rating-bar .quick-icons.rating-pod{ + top:121px; +} + + +.library-wrapper .library-show .poster:hover{ + border-color:#000; +} + + +.library-wrapper .library-show .poster.screen-overlay{ +} + + +.library-wrapper .library-show .poster.screen-overlay .poster-art{ + opacity:0.5; + filter:url(filters.svg#grayscale); + filter:gray; + -webkit-filter:grayscale(1); +} + + +.library-wrapper .library-show .poster.screen-overlay .screen{ + position:absolute; + z-index:2; + height:78px; + width:138px; + top:62px; + overflow:hidden; + -moz-box-shadow:0 0 10px 1px #666; + -webkit-box-shadow:0 0 10px 1px #666; + box-shadow:0 0 10px 1px #666; + -webkit-transform:rotate(-5deg); + -moz-transform:rotate(-5deg); + -o-transform:rotate(-5deg); + -ms-transform:rotate(-5deg); +} + + +.library-wrapper .library-show .poster.screen-overlay .screen img{ + width:138px; + height:auto; +} + + +.library-wrapper .library-show img{ + display: inline-block; + width:138px; + height:203px; +} + + +.library-wrapper .library-show.screen{ + position:relative; +} + + +.library-wrapper .library-show.screen .poster{ + height:95px; + overflow:hidden; +} + + +.library-wrapper .library-show.screen img{ + display:block; + width:170px; + height:auto; +} + + +.library-wrapper .library-show .on{ + font-size:11px; + padding:2px 5px; + line-height:13px; +} + + +.library-wrapper .library-show h4{ + width:140px; + overflow:hidden; + position:relative; + white-space:nowrap; + font-size:12px; + margin-top:3px; +} + + +.library-wrapper .library-show.screen h4,.library-wrapper .library-show.screen h5,.library-wrapper .library-show.screen h6{ + width:170px; +} + + +.library-wrapper .library-show h4 a{ + color:#000; +} + + +.library-wrapper .library-show h4 a:hover{ + color:#000; + text-decoration:none; +} + +.library-wrapper .library-show h5{ + width:140px; + overflow:hidden; + position:relative; + white-space:nowrap; + margin-top:1px; +} + + +.library-wrapper .library-show h5,.library-wrapper .library-show h5 a{ + font-weight:normal; + font-size:12px; + color:#333; +} + + +.library-wrapper .library-show h5 strong{ + color:#008FBB; +} + + +.library-wrapper .library-show .title{ + display:block; + font-weight:bold; + color:#000; +} + + +.library-wrapper .library-show .plays-truncate{ + width:140px; + overflow:hidden; + position:relative; + white-space:nowrap; +} + + +.library-wrapper .library-show .plays{ + display:block; + color:#666; + font-size:12px; + font-weight:normal; + width:140px; + overflow:hidden; + position:relative; + white-space:nowrap; +} + + +.library-wrapper .library-show .plays a{ + color:#666; +} + + +.library-wrapper .library-show .plays a strong{ + color:#008FBB; +} + + +.library-wrapper .library-show h6{ + color:#999; + font-size:11px; + font-style:italic; + padding-top:5px; + font-weight:normal; + width:140px; + overflow:hidden; + position:relative; + white-space:nowrap; +} + + +.library-wrapper .library-show h6 a{ + font-weight:bold; + color:#999; +} + + +.library-wrapper .library-show .watched-added{ + display:block; + color:#999; + font-size:10px; +} + + +.library-wrapper .library-show.actor .poster{ + overflow:hidden; + height:203px; +} + + +.library-wrapper .library-show.actor img{ + height:auto; +} + +.library-wrapper .library-show:hover .library-info-icons,.episodes-listing-episode:hover .library-info-icons,.shout-list-item .poster:hover .library-info-icons,.screen-wrapper:hover .library-info-icons,.poster-wrapper:hover .library-info-icons{ + opacity:1; +} + + +.library-wrapper .library-show:hover .quick-icons,.episodes-listing-episode:hover .quick-icons,.shout-list-item .poster:hover .quick-icons,.screen-wrapper:hover .quick-icons,.poster-wrapper:hover .quick-icons{ + opacity:1!important; +} + +.quick-icons{ + position:absolute; + z-index:1; + opacity:0; + transition:opacity .5s; + -moz-transition:opacity .5s; + -webkit-transition:opacity .5s; + -o-transition:opacity .5s; +} + + +.quick-icons.general{ + top:169px; + left:6px; + background-color:rgba(0,0,0,0.7); + width:128px; + height:30px; + -moz-border-radius:6px; + border-radius:6px; + text-align:center; +} + + +.episodes-listing-episode .quick-icons.general,.episode-row .screen-wrapper .quick-icons.general{ + top:88px; + left:45px; +} + + +.library-show.screen .quick-icons.general{ + top:60px; + left:21px; +} + + +.shout-list-item .screen .quick-icons.general{ + top:44px; +} + + +.quick-icons span{ + margin:5px 2px 0 2px; + cursor:pointer; + vertical-align:middle; + width:18px; + height:18px; + background-size:contain; + background-position:center center; + background-repeat:no-repeat; + display:inline-block; +} + + +.quick-icons.general span:first-child{ + margin-left:0; +} + + +.quick-icons span.seen{ + background-image:url(https://trakt.us/images/quick-icons/seen.png); + width:21px; +} + + +.quick-icons span.seen:hover,.quick-icons span.seen.current{ + background-image:url(https://trakt.us/images/quick-icons/seen-on.png); +} + + +.quick-icons span.watchlist{ + background-image:url(https://trakt.us/images/quick-icons/watchlist.png); + width:12px; +} + + +.quick-icons span.watchlist:hover,.quick-icons span.watchlist.current{ + background-image:url(https://trakt.us/images/quick-icons/watchlist-on.png); +} + + +.quick-icons span.list{ + background-image:url(https://trakt.us/images/quick-icons/list.png); +} + + +.quick-icons span.list:hover,.quick-icons span.list.current{ + background-image:url(https://trakt.us/images/quick-icons/list-on.png); +} + + +.quick-icons span.collection{ + background-image:url(https://trakt.us/images/quick-icons/collection.png); + width:12px; +} + + +.quick-icons span.collection:hover,.quick-icons span.collection.current{ + background-image:url(https://trakt.us/images/quick-icons/collection-on.png); +} + + +.quick-icons span.add-to-list{ + padding-left:0!important; + background-position:center center!important; +} + + +.quick-icons.rating-pod{ + top:206px; + left:0; + width:155px; + height:30px; + text-align:center; + padding:0; +} + + +.episodes-listing-episode .quick-icons.rating-pod,.episode-row .screen-wrapper .quick-icons.rating-pod{ + top:125px; + width:218px!important; +} + + +.library-show.screen .quick-icons.rating-pod{ + top:98px; + width:170px; +} + + +.shout-list-item .screen .quick-icons.rating-pod{ + top:80px; +} + + +.quick-icons.rating-pod span{ + opacity:0.5; +} + + +.quick-icons.rating-pod span.unhover{ + opacity:0.5!important; +} + + +.quick-icons.rating-pod span:hover,.quick-icons.rating-pod span.current,.quick-icons.rating-pod span.hover{ + opacity:1; +} + + +.quick-icons.rating-pod span.simple.rate-love{ + background-image:url(https://trakt.us/images/quick-icons/heart-love.png); +} + + +.quick-icons.rating-pod span.simple.rate-hate{ + background-image:url(https://trakt.us/images/quick-icons/heart-hate.png); +} + + +.quick-icons.rating-pod span.advanced{ + width:13px; + height:30px; + margin:0!important; + background-color:#333!important; + background-image:url(https://trakt.us/images/quick-icons/heart-love.png); + background-size:12px 12px; + float:left; +} + + +.episodes-listing-episode .quick-icons.rating-pod span.advanced,.episode-row .screen-wrapper .quick-icons.rating-pod span.advanced{ + width:21px; + background-size:18px 18px; +} + + +.library-show.screen .quick-icons.rating-pod span.advanced{ + width:16px; + background-size:14px 14px; +} + + +.quick-icons.rating-pod span.advanced:first-child{ + margin-left:4px!important; +} + + +.rating-pod{ + background-color:#333; + padding:5px 10px 5px 7px; + border-radius:0 0 6px 6px; + overflow:hidden; + margin:1px; + color:#ccc; + position:relative; +} + + +.rating-pod .percent{ + float:left; + font-size:18px; + font-weight:bold; + background-position:100% 50%; + background-repeat:no-repeat; + padding-right:20px; + color:#fff; +} + + +.rating-pod .percent-sign{ + font-weight:normal; + font-size:12px; + vertical-align:top; + padding-left:2px; + line-height:21px; +} + + +.rating-pod .votes{ + float:right; + line-height:21px; + font-size:11px; + font-style:italic; +} + + +.instructions-wrapper{ + color: rgb(255, 255, 255); + text-shadow: 0px -1px 1px rgb(17, 17, 17); + padding: 10px 10px 11px; + font-size: 16px; + border-radius: 4px 4px 0px 0px; + border-top: 1px solid rgb(119, 119, 119); + border-bottom: 1px solid rgb(51, 51, 51); + background-color: rgb(95, 95, 95); + position:relative; +} + +.main-title { + color: rgb(255, 255, 255); + text-shadow: 0px -1px 1px rgb(17, 17, 17); + padding: 10px 10px 11px; + font-size: 16px; + border-radius: 4px 4px 0px 0px; + border-top: 1px solid rgb(119, 119, 119); + border-bottom: 1px solid rgb(51, 51, 51); + background-color: rgb(95, 95, 95); + background-image: -moz-linear-gradient(center top , rgb(102, 102, 102), rgb(85, 85, 85)); +} + +.main-wrapper { + background: none repeat scroll 0% 0% rgb(208, 208, 208); + color: rgb(153, 153, 153); + padding: 9px; +} + + + +h2{ + font-weight:normal; + line-height:22px; + font-size:22px; + position:relative; +} + + +h2{ + font-weight:normal; + line-height:21px; + font-size:17px; + color:#000; +} + + +h2 span{ + font-weight:bold; +} + + +h2 a:hover{ + text-decoration:underline; +} + + +h2 a.show{ + font-weight:bold; +} + + +h2 a.see-more{ + float:right; + font-size:16px; + line-height:22px; + margin-left:20px; + color:#ddd; +} + + +h2 .help-text{ + float:right; + font-weight:normal; + color:#aaa; + font-style:italic; + font-size:14px; + line-height:22px; +} + + +h2 .hide-watched{ + font-size:13px; + padding-top:1px; + padding-bottom:1px; +} + + +h2 .hide-watched:hover{ + text-decoration:none; +} \ No newline at end of file diff --git a/www/templates_shared/styles/style.css b/www/templates_shared/styles/style.css new file mode 100644 index 000000000..b3a19e3d2 --- /dev/null +++ b/www/templates_shared/styles/style.css @@ -0,0 +1,423 @@ +/* Site-wide html styles */ +body { margin: 0 auto; padding: 0; background: #FFF url(../images/menu.gif) repeat-x left top; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12px; color: #515151; } +h1, h2, h3 { margin: 0; font-weight: normal; color: #485459; } +input, select, textarea { font-family: Calibri, Arial, Helvetica, sans-serif; } +textarea { height:100px; width:300px; } +h1 { font-size: 44px; padding-bottom:10px; } +h2 { padding-bottom:5px; font-size: 1.6em; } +h3 { padding:10px 0 5px 0; } +p, ul, ol { margin-top: 0; line-height: 240%; text-align: justify; } +ul, ol { } +blockquote { } +a { color: #108120; text-decoration: none; } +a:hover { text-decoration: underline; } +a img { border: none; } +img.left { float: left; margin: 7px 30px 0 0; } +img.right { float: right; margin: 7px 0 0 30px; } +hr { display: none; } +input[type=text], input[type=password], textarea, select { background: #fff; background: -webkit-gradient(linear, left top, left 25, from(#fff), color-stop(4%, #f0f0f0), to(#fff)); border: 1px solid #ccc; border-bottom-color: #999; border-right-color: #999; margin: 0; padding: 4px; color: #444; font-size: 100%; outline: none; } + + + + + + +/* +page structure +*/ +#header { width: 85%; margin: 0 auto; } +#page { width: 85%; margin: 0 auto; padding: 50px 0px 0px 0px;} + +#logo { width: 85%; margin: 0 auto; height: 65px; padding-left:5px; margin-top:4px; background:url("../images/banner.jpg") no-repeat bottom left; } +#logo h1, #logo p { display:none; margin: 0px; line-height: normal; text-transform: lowercase; font-weight: normal; color: #485459; } +#logo p { margin-top: 2px; font-size: 13px; color: #A8A8A8; } +#logo h1 { padding-top: 10px; font-size: 48px; } +#logo a { color: #A8A8A8; } +#logo .logolink { float:left; } +#logo img { margin-top:15px; } +#logo h1 a { color: #485459; } + +#statusbar { width: 85%; margin: 0 auto; text-align:right; padding:5px 10px 0 0;} +#statusbar a { color: #515151;} + +#content { float: right; width: 85%;} +#content h1 { font-size: 2.3em;} +#content p { margin-bottom:20px;} + +#sidebar { float: left; width: 160px;} +#sidebar ul {margin: 0; padding: 0; line-height: normal; list-style-type: none; text-align: left; } +#sidebar li { margin-bottom: 30px; padding: 0 0 0 0;} +#sidebar li ul { list-style-type: none; list-style-position:inside; margin: 0px 10px; padding: 0; margin-left: 1em;} +#sidebar li li { background-image: url('../images/bullet.jpg'); background-repeat: no-repeat; background-position: 0.7em 1.1em; margin: 0; padding-left: .5em; padding-top: .8em;padding-bottom:10px; border-bottom: 1px solid #E9E8DD;} +#sidebar li li a {padding: 0 0 0 20px; font-weight: normal; color: #808080;} +#sidebar li li a:hover {color: #108120;} +#sidebar li li:hover { cursor:pointer; background-color:#EEE; background-image: url('../images/bullet_hov.jpg');} + +#sidebar p { margin: 0; padding: 0px 14px;} +#sidebar h2 { height: 30px; margin: 0 0 5px 0px; padding: 6px 0 2px 14px; font-size: 18px; font-weight: normal; color: #485459;} +#sidebar p { line-height: 200%;} +#sidebar a { text-align: left; text-decoration: none; font-weight: bold;} + +.w3validator img {margin:10px 0 10px 0;} +.footer { width: 100%; height: 102px; margin: 0 auto; background: #E1E1E1; border-top: 5px solid #656565;} +.footer p { margin: 0; padding: 20px 0px 0px 0px; text-align: center; line-height: normal; font-size: 0.9em; } +.footer a {} + + + + + + +/* +browse by category top menu +*/ +#menu { height:33px; float: left; width: 100%; background-color:#e5e5e5; } +#menu { padding:0 4px 0 4px; margin-right:1px; border:1px #CCC solid; background-color:#e5e5e5; -moz-border-radius: 4px; -webkit-border-radius: 4px;} + +.menupic {padding-left:15px;} + +#menulink { float: left; } +#menulink ul { list-style-type: none; padding: 0; margin: 0; } +#menulink li { float: left; position: relative; z-index: 100; } +#menulink a, #menulink :visited {height:32px; display: block; font-size: 0.9em; width: 70px; padding: 1px 0px 0px 5px; color: #000; background-color: #e5e5e5; text-decoration: none; text-align: left; vertical-align: middle; } +#menulink :hover, #menulink a.selected {color:#fff; background-color: #777; } +#menulink ul ul { visibility: hidden; position: absolute; width: 60px; height: 0; } +#menulink ul li:hover ul, #menulink ul a:hover ul { visibility: visible; } +#menusearchlink { padding-top:5px; float:right; } +#menusearchlink input, #menusearchlink select { font-size: 0.9em; color:#555; } +#menucontainer { width:85%; height:10px; } + +select#headcat {width:120px; float:right; margin-left:5px; height:25px;} +select#headcat option { padding-left: 10px; } +select#headcat option.grouping { padding-left: 5px; font-weight: bold; } +#headsearch{float:right;height:15px;} + +.gobutton {display:inline;float:right;margin-left:5px;} +.gobutton input { background:url('../images/icons/go.png') no-repeat; cursor:pointer; border: none; width:30px; height:25px; } + +/* menu styling for when menu is displayed in top position */ +#logo ul { list-style-type: none; float:right; margin: 0 0 10px 0; padding:0; line-height: normal; text-align: right; } +#logo ul li h2 {display:none;} +#logo ul li ul li {float: left; margin-left: 1em; padding-right:5px; } +#logo ul li a {color:#333;} +#logo ul ul {list-style-type: square;} + + + + + + + + +/* +data tables, most lists. +*/ +#browsetable, #coverstable, #forumtable { margin-top: 10px; clear: both; } +table.data { border-collapse:collapse; } +table.data th { text-align:left; vertical-align:top; background-color:#DDD; border-color: #AAA; border-width: 1px; border-style: solid; padding:3px; font-style:bolder; text-transform:capitalize;} +table.data td { white-space:normal; vertical-align:top; padding:5px; border-color: #AAA; border-width: 1px; border-style: solid; } +table.data td.less { color: #888; font-size: 0.9em; white-space:nowrap; } +table.data td.icons { white-space:nowrap; padding-left:0px; padding-right:0px; width:60px; } +table.data td.check {cursor:pointer;} +table.highlight tr:hover td { background-color: #e8fbe6; } +table tr.alt { background-color: #F6F6F6; } +table tr.new { background-color: #f6f8ff; } +table.data em {font-weight:bolder; color:red;} +table td.item { padding:5px 5px 2px 5px; } +table td.static { background-color: #FFF; } +.left { text-align:left !important;} +.right { text-align:right !important;} +.mid { text-align:center !important;} +.nowrap {white-space:nowrap;} +#detailstable { width: 70%; } +#detailstable th { width: 70px; } + +table.innerdata { border-collapse:collapse;} +table.innerdata td { padding:2px; border-left-width:0; border-bottom-width:0; border-color: #EEE; } +table.innerdata th { padding:2px; border-style: none; background-color:#EEE;} + +table.input th, table.input td { text-align: left; vertical-align:top; } + +/* +form inputs and helpers +*/ +div.hint, div.hint a {font-size:0.9em; font-style:italic; color:#999;} +div.hint { margin-bottom:10px;} +input.long {width:400px; } +input.short { width:40px; } +input.tiny { width: 25px; } +input.date { width:70px; } +fieldset { margin-bottom:20px; border:1px solid #999;} +legend { padding: 0.4em 0.6em; border:1px solid #999; font-weight:bold; text-align:left; } + + + + + + + +/* +pager +*/ +div.pager {display:inline;} +div.pager a {font-weight:bold; background-color:#DDD; padding:0 3px 0px 4px; border:1px #CCC solid;} +div.pager .current {color:#fff; font-weight:bold; background-color:#777; padding:0 4px 0px 4px; border:1px #CCC solid;} + + + + + + + +/* +round buttoning +*/ +.rndbtn { padding:0 4px 0 4px; margin-right:1px; border:1px #CCC solid; background-color:#EEE; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } +table.highlight tr:hover .rndbtn, table tr.alt .rndbtn { background-color: #fff; } +table.highlight tr:hover .rndbtn:hover { background-color: #DDD; } +table.highlight tr:hover td.static { background-color: #FFF; } + + + + + + + +/* +site wide covers and images with dropshadows +*/ +img.shadow {padding: 5px 5px 5px 5px; background: #FFF; border:1px solid #EEE; -moz-box-shadow: 3px 6px 8px -4px #777; -webkit-box-shadow: 3px 6px 8px -4px #777; box-shadow: 3px 6px 8px -4px #777; border-collapse:separate; } + + + + + + + +/* +mainly one-off styles used on individual pages +*/ +#forumtable a.title { font-size: 1.4em; } + +pre#nfo { font-family: "Courier New", "DejaVu Sans Mono", monospace; font-size: 12px; line-height: 13px; } + +div.resextra { padding-top:7px; color: #555; font-size: 0.9em; height:16px; } +div.resextra a { color: #555; text-decoration:none; } +div.resextra div.admin { float:right; } +div.resextra div.btns {float:left; } + +div.movextra { padding-top:5px; color: #888; font-size: 0.9em; } +div.movextra td {border:0; padding:0 0 10px 0} +div.movextra tr.mlextra {display:none;} + +div.movcover { width:140px; } +div.movcover img { margin-bottom:5px;} +div.movcover .rndbtn {display:inline-block; margin-top:2px;} +.mediainfo, .seriesinfo, .preinfo, .prehashinfo {cursor:pointer;} + +a.external { background: url('../images/newwindow.png') center right no-repeat !important; padding-right:13px !important;} + +ol.tracklist li { line-height: 140%; } + +div.tvseriesheading img {float:right; margin:10px 0 10px 10px; max-width:300px;} +div.tvseriesheading p {text-align:left;} + +span.descfull {display:none;} +a.descmore { display: inline; margin: 0px; margin-left:5px;} + + +div.error { padding:20px; padding-left:50px; border:1px solid #BBB; background: #FED0D0 url(../images/icons/warning.png) no-repeat top; background-position: 5px 50%; font-size:1.2em; font-weight:bold; margin-bottom:10px;} +div.info { padding:20px; padding-left:50px; border:1px solid #BBB; background: #5bc0de url(../images/icons/information.png) no-repeat top; background-position: 5px 50%; font-size:1.2em; font-weight:bold; margin-bottom:10px;} +div.comments { padding-top:20px; } + +.invitesuccess {display:none; font-weight:bold; padding-left:10px; color:green;} +.invitefailed {display:none; font-weight:bold; padding-left:10px; color:red;} + +div.nosearchresults {margin-left:25px; padding-top:50px;} +div.nosearchresults ul { line-height: 150%;} + +span.warning { color: red; } + + +/*! Newznab tooltip style */ +.ui-tooltip-tmux .ui-tooltip-titlebar, +.ui-tooltip-tmux .ui-tooltip-content{ + border-color: #90D93F; + color: #3F6219; +} + + .ui-tooltip-tmux .ui-tooltip-content{ + background-color: #CAED9E; + } + + .ui-tooltip-tmux .ui-tooltip-titlebar{ + background-color: #B0DE78; + color:white; + font-size:1.2em; + } + + .ui-tooltip-tmuxb .ui-state-default .ui-tooltip-icon{ + background-position: -42px 0; + } + +table.ui-tooltip-tmux th {vertical-align:top;text-align:right;} +ul.ui-tooltip-tmux li {text-align:left;} + +.rarfilelist {cursor:pointer;} +/*.tooltiphead {background-color:#A9DB66; padding:5px;color:white; font-weight:bold; margin:-5px -10px 5px -10px;}*/ +.ui-tooltip ul {padding:0; margin:0;line-height: 160%;} +.ui-tooltip li {list-style-type:none;} + +.tabs { padding: 0; list-style: none; } +.tabs li { float: left; border: 1px solid #AAA; margin-bottom: -1px; margin-right: 5px; overflow: hidden; background: #F4F4F4; } +.tabs li a { padding: 0 10px 0 10px; } +.tabs li.active { background: #DDD; border-bottom: 1px solid #EEE; } + + +/* +movie, console and music modals with backdrop images. +*/ +#movieinfo { background-position: center center; background-repeat: no-repeat; position: absolute; z-index: 2;} +#movieinfo h1 { font-size: 32px; padding: 10px 10px 0px 20px; color: #fff; text-shadow: 0px 0px 4px #000; } +#movieinfo h2, #movieinfo h3 { padding: 10px 20px 0px 20px; color: #fff; text-shadow: 0px 0px 4px #000; } +#movieinfo a { color: #fff; } +#movieinfo img.cover { margin-right: 20px; -webkit-box-shadow: 0px 0px 4px #000; -moz-box-shadow: 0px 0px 4px #000; box-shadow: 0px 0px 4px #000; border-collapse:separate;} +#backdrop { position: absolute; width: 810px; height: 455px; left: -1px; top: 5px; background-color: #000; overflow: hidden;} +#backdrop img { opacity:0.5; width: 100%; height: 100%;} + +#musicinfo { color:#FFF; min-height:435px; background-color:#7F7F7F; background-image:url('../../covers/music/backdrop.jpg'); background-repeat: repeat-x;} +#musicinfo h1 { font-size: 32px; padding: 10px 10px 0px 20px; color: #fff; } +#musicinfo h2, #musicinfo h3, #musicinfo p { padding: 10px 20px 0px 20px; color: #fff;} +#musicinfo a { color: #fff; } +#musicinfo img.cover { float:right; margin:20px 20px 0 20px; padding: 5px 5px 5px 5px; background: #FFF; border:1px solid #EEE; -moz-box-shadow: 3px 6px 8px -4px #333; -webkit-box-shadow: 3px 6px 8px -4px #333; box-shadow: 3px 6px 8px -4px #333; border-collapse:separate; } +#musicinfo p {text-align: left; line-height: 180%;} + +#moviefull .pic { margin-left: 20px; float: right; } +#moviefull {padding-bottom:20px;} +#moviepreviews {text-align: center;} +#moviepreviews img {max-width:600px;} +#moviepreviews .previewtitle {margin-bottom: 20px;} + +/* +icons and multioperation buttons +*/ +input.nzb_check_all { margin-left:5px; } +#nzb_multi_operations_form { clear: both; } +div.nzb_multi_operations { color:#888; display:inline; float:right; text-align: right; clear: both; } +div.nzb_multi_operations input { color:#888; background-color:#fff; border:1px solid #ddd; } +div.nzb_multi_operations input:hover { color:#000; border:1px solid #000; cursor:pointer; } + +div.icon { width:16px; height:16px; background-repeat:no-repeat; cursor:pointer; position:relative; float:left; margin:2px; } +table.data td.icons div.icon { opacity:.20; } +div.icon_cart { background-image:url('../images/icons/cartup.png'); } +div.icon_cart_clicked { background-image:url('../images/icons/cartdown.png'); } +div.icon_nzb { background-image:url('../images/icons/nzbup.png'); } +div.icon_nzb_clicked { background-image:url('../images/icons/nzbdown.png'); } +div.icon_nzb a { text-decoration:none; padding-bottom:2px; padding-right:12px; } + +div.icon_sab { + background-image: url('../images/icons/queueup.png'); +} + +div.icon_sab_clicked { + background-image: url('../images/icons/queuedown.png'); +} + +div.icon_tvrage { background-image:url('../images/icons/tvrage.png'); } +div.icon_check { background-image:url('../images/icons/check.png'); } +div.icon_nzbvortex { background-image: url('../images/icons/vortex/bigsmile.png'); } +div.icon_nzbvortex_clicked { background-image: url('../images/icons/vortex/bigsmiledown.png'); } + + + + + + +/* + ColorBox Core Style + The following rules are the styles that are consistant between themes. + Avoid changing this area to maintain compatability with future versions of ColorBox. +*/ +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} +#cboxOverlay{position:fixed; width:100%; height:100%;} +#cboxMiddleLeft, #cboxBottomLeft{clear:left;} +#cboxContent{position:relative; overflow:visible;} +#cboxLoadedContent{overflow:auto;} +#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxTitle{margin:0;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} + +#cboxOverlay{background:#fff;} + +#colorbox{} + #cboxTopLeft{width:25px; height:25px; background:url(../images/colorbox/border1.png) 0 0 no-repeat;} + #cboxTopCenter{height:25px; background:url(../images/colorbox/border1.png) 0 -50px repeat-x;} + #cboxTopRight{width:25px; height:25px; background:url(../images/colorbox/border1.png) -25px 0 no-repeat;} + #cboxBottomLeft{width:25px; height:25px; background:url(../images/colorbox/border1.png) 0 -25px no-repeat;} + #cboxBottomCenter{height:25px; background:url(../images/colorbox/border1.png) 0 -75px repeat-x;} + #cboxBottomRight{width:25px; height:25px; background:url(../images/colorbox/border1.png) -25px -25px no-repeat;} + #cboxMiddleLeft{width:25px; background:url(../images/colorbox/border2.png) 0 0 repeat-y;} + #cboxMiddleRight{width:25px; background:url(../images/colorbox/border2.png) -25px 0 repeat-y;} + #cboxContent{background:#fff;} + #cboxLoadedContent{background:#fff; margin-top:32px; padding:1px; } + #cboxLoadingOverlay{background:#fff;} + #cboxTitle{position:absolute; font-size:125%; top:-2px; left:0; color:#000; } + #cboxCurrent{position:absolute; top:-1px; right:205px; text-indent:-9999px;} + #cboxSlideshow, #cboxPrevious, #cboxNext, #cboxClose{text-indent:-9999px; width:20px; height:20px; position:absolute; top:-1px; background:url(../images/colorbox/controls.png) 0 0 no-repeat;} + #cboxPrevious{background-position:0px 0px; right:44px;} + #cboxPrevious.hover{background-position:0px -25px;} + #cboxNext{background-position:-25px 0px; right:22px;} + #cboxNext.hover{background-position:-25px -25px;} + #cboxClose{background-position:-50px 0px; right:0;} + #cboxClose.hover{background-position:-50px -25px;} + .cboxSlideshow_on #cboxPrevious, .cboxSlideshow_off #cboxPrevious{right:66px;} + .cboxSlideshow_on #cboxSlideshow{background-position:-75px -25px; right:44px;} + .cboxSlideshow_on #cboxSlideshow.hover{background-position:-100px -25px;} + .cboxSlideshow_off #cboxSlideshow{background-position:-100px 0px; right:44px;} + .cboxSlideshow_off #cboxSlideshow.hover{background-position:-75px -25px;} + +/* + The following fixes png-transparency for IE6. +*/ +.cboxIE #cboxTopLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/colorbox/internet_explorer/borderTopLeft.png, sizingMethod='scale');} +.cboxIE #cboxTopCenter{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/colorbox/internet_explorer/borderTopCenter.png, sizingMethod='scale');} +.cboxIE #cboxTopRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/colorbox/internet_explorer/borderTopRight.png, sizingMethod='scale');} +.cboxIE #cboxBottomLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/colorbox/internet_explorer/borderBottomLeft.png, sizingMethod='scale');} +.cboxIE #cboxBottomCenter{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/colorbox/internet_explorer/borderBottomCenter.png, sizingMethod='scale');} +.cboxIE #cboxBottomRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/colorbox/internet_explorer/borderBottomRight.png, sizingMethod='scale');} +.cboxIE #cboxMiddleLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/colorbox/internet_explorer/borderMiddleLeft.png, sizingMethod='scale');} +.cboxIE #cboxMiddleRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/colorbox/internet_explorer/borderMiddleRight.png, sizingMethod='scale');} + +/* + Use colorbox example 2 css for movieinfo popups +*/ +.cboxMovie{} + .cboxMovie #cboxContent{margin-top:32px; background: transparent;} + .cboxMovie #cboxTopLeft{display:none;} + .cboxMovie #cboxTopCenter{display:none;} + .cboxMovie #cboxTopRight{display:none;} + .cboxMovie #cboxBottomLeft{display:none;} + .cboxMovie #cboxBottomCenter{display:none;} + .cboxMovie #cboxBottomRight{display:none;} + .cboxMovie #cboxMiddleLeft{display:none;} + .cboxMovie #cboxMiddleRight{display:none;} + .cboxMovie #cboxLoadedContent{margin-top: 5px; background:#888; padding:1px;} + .cboxMovie #cboxLoadingGraphic{background:url(../images/loading.gif) center center no-repeat;} + .cboxMovie #cboxLoadingOverlay{background:#000;} + .cboxMovie #cboxTitle{position:absolute; top:-22px; left:0; color:#000;} + .cboxMovie #cboxCurrent{position:absolute; top:-22px; right:205px; text-indent:-9999px;} + .cboxMovie #cboxSlideshow, .cboxMovie #cboxPrevious, .cboxMovie #cboxNext, .cboxMovie #cboxClose{text-indent:-9999px; width:20px; height:20px; position:absolute; top:-20px; background:url(../images/colorbox/controls2.png) 0 0 no-repeat;} + .cboxMovie #cboxPrevious{background-position:0px 0px; right:44px;} + .cboxMovie #cboxPrevious.hover{background-position:0px -25px;} + .cboxMovie #cboxNext{background-position:-25px 0px; right:22px;} + .cboxMovie #cboxNext.hover{background-position:-25px -25px;} + .cboxMovie #cboxClose{background-position:-50px 0px; right:0;} + .cboxMovie #cboxClose.hover{background-position:-50px -25px;} + .cboxMovie .cboxSlideshow_on #cboxPrevious, .cboxMovie .cboxSlideshow_off #cboxPrevious{right:66px;} + .cboxMovie .cboxSlideshow_on #cboxSlideshow{background-position:-75px -25px; right:44px;} + .cboxMovie .cboxSlideshow_on #cboxSlideshow.hover{background-position:-100px -25px;} + .cboxMovie .cboxSlideshow_off #cboxSlideshow{background-position:-100px 0px; right:44px;} + .cboxMovie .cboxSlideshow_off #cboxSlideshow.hover{background-position:-75px -25px;} + + diff --git a/www/templates/charisma/views/admin/adminmenu.tpl b/www/templates_shared/views/admin/adminmenu.tpl similarity index 100% rename from www/templates/charisma/views/admin/adminmenu.tpl rename to www/templates_shared/views/admin/adminmenu.tpl diff --git a/www/templates/charisma/views/admin/ajax_release-edit.tpl b/www/templates_shared/views/admin/ajax_release-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/ajax_release-edit.tpl rename to www/templates_shared/views/admin/ajax_release-edit.tpl diff --git a/www/templates/charisma/views/admin/anidb-edit.tpl b/www/templates_shared/views/admin/anidb-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/anidb-edit.tpl rename to www/templates_shared/views/admin/anidb-edit.tpl diff --git a/www/templates/charisma/views/admin/anidb-list.tpl b/www/templates_shared/views/admin/anidb-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/anidb-list.tpl rename to www/templates_shared/views/admin/anidb-list.tpl diff --git a/www/templates/charisma/views/admin/anidb-remove.tpl b/www/templates_shared/views/admin/anidb-remove.tpl similarity index 100% rename from www/templates/charisma/views/admin/anidb-remove.tpl rename to www/templates_shared/views/admin/anidb-remove.tpl diff --git a/www/templates/charisma/views/admin/baseadminpage.tpl b/www/templates_shared/views/admin/baseadminpage.tpl similarity index 100% rename from www/templates/charisma/views/admin/baseadminpage.tpl rename to www/templates_shared/views/admin/baseadminpage.tpl diff --git a/www/templates/charisma/views/admin/binaryblacklist-edit.tpl b/www/templates_shared/views/admin/binaryblacklist-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/binaryblacklist-edit.tpl rename to www/templates_shared/views/admin/binaryblacklist-edit.tpl diff --git a/www/templates/charisma/views/admin/binaryblacklist-list.tpl b/www/templates_shared/views/admin/binaryblacklist-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/binaryblacklist-list.tpl rename to www/templates_shared/views/admin/binaryblacklist-list.tpl diff --git a/www/templates/charisma/views/admin/book-edit.tpl b/www/templates_shared/views/admin/book-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/book-edit.tpl rename to www/templates_shared/views/admin/book-edit.tpl diff --git a/www/templates/charisma/views/admin/book-list.tpl b/www/templates_shared/views/admin/book-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/book-list.tpl rename to www/templates_shared/views/admin/book-list.tpl diff --git a/www/templates/charisma/views/admin/category-edit.tpl b/www/templates_shared/views/admin/category-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/category-edit.tpl rename to www/templates_shared/views/admin/category-edit.tpl diff --git a/www/templates/charisma/views/admin/category-list.tpl b/www/templates_shared/views/admin/category-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/category-list.tpl rename to www/templates_shared/views/admin/category-list.tpl diff --git a/www/templates/charisma/views/admin/category_regexes-edit.tpl b/www/templates_shared/views/admin/category_regexes-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/category_regexes-edit.tpl rename to www/templates_shared/views/admin/category_regexes-edit.tpl diff --git a/www/templates/charisma/views/admin/category_regexes-list.tpl b/www/templates_shared/views/admin/category_regexes-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/category_regexes-list.tpl rename to www/templates_shared/views/admin/category_regexes-list.tpl diff --git a/www/templates/charisma/views/admin/collection_regexes-edit.tpl b/www/templates_shared/views/admin/collection_regexes-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/collection_regexes-edit.tpl rename to www/templates_shared/views/admin/collection_regexes-edit.tpl diff --git a/www/templates/charisma/views/admin/collection_regexes-list.tpl b/www/templates_shared/views/admin/collection_regexes-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/collection_regexes-list.tpl rename to www/templates_shared/views/admin/collection_regexes-list.tpl diff --git a/www/templates/charisma/views/admin/collection_regexes-test.tpl b/www/templates_shared/views/admin/collection_regexes-test.tpl similarity index 100% rename from www/templates/charisma/views/admin/collection_regexes-test.tpl rename to www/templates_shared/views/admin/collection_regexes-test.tpl diff --git a/www/templates/charisma/views/admin/comments-list.tpl b/www/templates_shared/views/admin/comments-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/comments-list.tpl rename to www/templates_shared/views/admin/comments-list.tpl diff --git a/www/templates/charisma/views/admin/console-edit.tpl b/www/templates_shared/views/admin/console-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/console-edit.tpl rename to www/templates_shared/views/admin/console-edit.tpl diff --git a/www/templates/charisma/views/admin/console-list.tpl b/www/templates_shared/views/admin/console-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/console-list.tpl rename to www/templates_shared/views/admin/console-list.tpl diff --git a/www/templates/charisma/views/admin/content-add.tpl b/www/templates_shared/views/admin/content-add.tpl similarity index 100% rename from www/templates/charisma/views/admin/content-add.tpl rename to www/templates_shared/views/admin/content-add.tpl diff --git a/www/templates/charisma/views/admin/content-list.tpl b/www/templates_shared/views/admin/content-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/content-list.tpl rename to www/templates_shared/views/admin/content-list.tpl diff --git a/www/templates/charisma/views/admin/db-optimise.tpl b/www/templates_shared/views/admin/db-optimise.tpl similarity index 100% rename from www/templates/charisma/views/admin/db-optimise.tpl rename to www/templates_shared/views/admin/db-optimise.tpl diff --git a/www/templates/charisma/views/admin/game-edit.tpl b/www/templates_shared/views/admin/game-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/game-edit.tpl rename to www/templates_shared/views/admin/game-edit.tpl diff --git a/www/templates/charisma/views/admin/game-list.tpl b/www/templates_shared/views/admin/game-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/game-list.tpl rename to www/templates_shared/views/admin/game-list.tpl diff --git a/www/templates/charisma/views/admin/group-bulk.tpl b/www/templates_shared/views/admin/group-bulk.tpl similarity index 100% rename from www/templates/charisma/views/admin/group-bulk.tpl rename to www/templates_shared/views/admin/group-bulk.tpl diff --git a/www/templates/charisma/views/admin/group-edit.tpl b/www/templates_shared/views/admin/group-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/group-edit.tpl rename to www/templates_shared/views/admin/group-edit.tpl diff --git a/www/templates/charisma/views/admin/group-list.tpl b/www/templates_shared/views/admin/group-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/group-list.tpl rename to www/templates_shared/views/admin/group-list.tpl diff --git a/www/templates/charisma/views/admin/index.tpl b/www/templates_shared/views/admin/index.tpl similarity index 100% rename from www/templates/charisma/views/admin/index.tpl rename to www/templates_shared/views/admin/index.tpl diff --git a/www/templates/charisma/views/admin/menu-edit.tpl b/www/templates_shared/views/admin/menu-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/menu-edit.tpl rename to www/templates_shared/views/admin/menu-edit.tpl diff --git a/www/templates/charisma/views/admin/menu-list.tpl b/www/templates_shared/views/admin/menu-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/menu-list.tpl rename to www/templates_shared/views/admin/menu-list.tpl diff --git a/www/templates/charisma/views/admin/movie-add.tpl b/www/templates_shared/views/admin/movie-add.tpl similarity index 100% rename from www/templates/charisma/views/admin/movie-add.tpl rename to www/templates_shared/views/admin/movie-add.tpl diff --git a/www/templates/charisma/views/admin/movie-edit.tpl b/www/templates_shared/views/admin/movie-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/movie-edit.tpl rename to www/templates_shared/views/admin/movie-edit.tpl diff --git a/www/templates/charisma/views/admin/movie-list.tpl b/www/templates_shared/views/admin/movie-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/movie-list.tpl rename to www/templates_shared/views/admin/movie-list.tpl diff --git a/www/templates/charisma/views/admin/music-edit.tpl b/www/templates_shared/views/admin/music-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/music-edit.tpl rename to www/templates_shared/views/admin/music-edit.tpl diff --git a/www/templates/charisma/views/admin/music-list.tpl b/www/templates_shared/views/admin/music-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/music-list.tpl rename to www/templates_shared/views/admin/music-list.tpl diff --git a/www/templates/charisma/views/admin/nzb-export.tpl b/www/templates_shared/views/admin/nzb-export.tpl similarity index 100% rename from www/templates/charisma/views/admin/nzb-export.tpl rename to www/templates_shared/views/admin/nzb-export.tpl diff --git a/www/templates/charisma/views/admin/nzb-import.tpl b/www/templates_shared/views/admin/nzb-import.tpl similarity index 100% rename from www/templates/charisma/views/admin/nzb-import.tpl rename to www/templates_shared/views/admin/nzb-import.tpl diff --git a/www/templates/charisma/views/admin/preview-list.tpl b/www/templates_shared/views/admin/preview-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/preview-list.tpl rename to www/templates_shared/views/admin/preview-list.tpl diff --git a/www/templates/charisma/views/admin/rage-edit.tpl b/www/templates_shared/views/admin/rage-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/rage-edit.tpl rename to www/templates_shared/views/admin/rage-edit.tpl diff --git a/www/templates/charisma/views/admin/rage-list.tpl b/www/templates_shared/views/admin/rage-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/rage-list.tpl rename to www/templates_shared/views/admin/rage-list.tpl diff --git a/www/templates/charisma/views/admin/rage-remove.tpl b/www/templates_shared/views/admin/rage-remove.tpl similarity index 100% rename from www/templates/charisma/views/admin/rage-remove.tpl rename to www/templates_shared/views/admin/rage-remove.tpl diff --git a/www/templates/charisma/views/admin/regex-edit.tpl b/www/templates_shared/views/admin/regex-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/regex-edit.tpl rename to www/templates_shared/views/admin/regex-edit.tpl diff --git a/www/templates/charisma/views/admin/regex-list.tpl b/www/templates_shared/views/admin/regex-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/regex-list.tpl rename to www/templates_shared/views/admin/regex-list.tpl diff --git a/www/templates/charisma/views/admin/regex-submit.tpl b/www/templates_shared/views/admin/regex-submit.tpl similarity index 100% rename from www/templates/charisma/views/admin/regex-submit.tpl rename to www/templates_shared/views/admin/regex-submit.tpl diff --git a/www/templates/charisma/views/admin/regex-test.tpl b/www/templates_shared/views/admin/regex-test.tpl similarity index 100% rename from www/templates/charisma/views/admin/regex-test.tpl rename to www/templates_shared/views/admin/regex-test.tpl diff --git a/www/templates/charisma/views/admin/release-edit.tpl b/www/templates_shared/views/admin/release-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/release-edit.tpl rename to www/templates_shared/views/admin/release-edit.tpl diff --git a/www/templates/charisma/views/admin/release-files.tpl b/www/templates_shared/views/admin/release-files.tpl similarity index 100% rename from www/templates/charisma/views/admin/release-files.tpl rename to www/templates_shared/views/admin/release-files.tpl diff --git a/www/templates/charisma/views/admin/release-list.tpl b/www/templates_shared/views/admin/release-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/release-list.tpl rename to www/templates_shared/views/admin/release-list.tpl diff --git a/www/templates/charisma/views/admin/release_naming_regexes-edit.tpl b/www/templates_shared/views/admin/release_naming_regexes-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/release_naming_regexes-edit.tpl rename to www/templates_shared/views/admin/release_naming_regexes-edit.tpl diff --git a/www/templates/charisma/views/admin/release_naming_regexes-list.tpl b/www/templates_shared/views/admin/release_naming_regexes-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/release_naming_regexes-list.tpl rename to www/templates_shared/views/admin/release_naming_regexes-list.tpl diff --git a/www/templates/charisma/views/admin/release_naming_regexes-test.tpl b/www/templates_shared/views/admin/release_naming_regexes-test.tpl similarity index 100% rename from www/templates/charisma/views/admin/release_naming_regexes-test.tpl rename to www/templates_shared/views/admin/release_naming_regexes-test.tpl diff --git a/www/templates/charisma/views/admin/role-edit.tpl b/www/templates_shared/views/admin/role-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/role-edit.tpl rename to www/templates_shared/views/admin/role-edit.tpl diff --git a/www/templates/charisma/views/admin/role-list.tpl b/www/templates_shared/views/admin/role-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/role-list.tpl rename to www/templates_shared/views/admin/role-list.tpl diff --git a/www/templates/charisma/views/admin/sharing.tpl b/www/templates_shared/views/admin/sharing.tpl similarity index 100% rename from www/templates/charisma/views/admin/sharing.tpl rename to www/templates_shared/views/admin/sharing.tpl diff --git a/www/templates/charisma/views/admin/site-debug.tpl b/www/templates_shared/views/admin/site-debug.tpl similarity index 100% rename from www/templates/charisma/views/admin/site-debug.tpl rename to www/templates_shared/views/admin/site-debug.tpl diff --git a/www/templates/charisma/views/admin/site-edit.tpl b/www/templates_shared/views/admin/site-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/site-edit.tpl rename to www/templates_shared/views/admin/site-edit.tpl diff --git a/www/templates/charisma/views/admin/site-stats.tpl b/www/templates_shared/views/admin/site-stats.tpl similarity index 100% rename from www/templates/charisma/views/admin/site-stats.tpl rename to www/templates_shared/views/admin/site-stats.tpl diff --git a/www/templates/charisma/views/admin/spotnab-edit.tpl b/www/templates_shared/views/admin/spotnab-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/spotnab-edit.tpl rename to www/templates_shared/views/admin/spotnab-edit.tpl diff --git a/www/templates/charisma/views/admin/spotnab-list.tpl b/www/templates_shared/views/admin/spotnab-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/spotnab-list.tpl rename to www/templates_shared/views/admin/spotnab-list.tpl diff --git a/www/templates/charisma/views/admin/thetvdb-edit.tpl b/www/templates_shared/views/admin/thetvdb-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/thetvdb-edit.tpl rename to www/templates_shared/views/admin/thetvdb-edit.tpl diff --git a/www/templates/charisma/views/admin/thetvdb-list.tpl b/www/templates_shared/views/admin/thetvdb-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/thetvdb-list.tpl rename to www/templates_shared/views/admin/thetvdb-list.tpl diff --git a/www/templates/charisma/views/admin/thetvdb-remove.tpl b/www/templates_shared/views/admin/thetvdb-remove.tpl similarity index 100% rename from www/templates/charisma/views/admin/thetvdb-remove.tpl rename to www/templates_shared/views/admin/thetvdb-remove.tpl diff --git a/www/templates/charisma/views/admin/tmux-edit.tpl b/www/templates_shared/views/admin/tmux-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/tmux-edit.tpl rename to www/templates_shared/views/admin/tmux-edit.tpl diff --git a/www/templates/charisma/views/admin/user-edit.tpl b/www/templates_shared/views/admin/user-edit.tpl similarity index 100% rename from www/templates/charisma/views/admin/user-edit.tpl rename to www/templates_shared/views/admin/user-edit.tpl diff --git a/www/templates/charisma/views/admin/user-list.tpl b/www/templates_shared/views/admin/user-list.tpl similarity index 100% rename from www/templates/charisma/views/admin/user-list.tpl rename to www/templates_shared/views/admin/user-list.tpl diff --git a/www/templates/charisma/views/admin/view-logs.tpl b/www/templates_shared/views/admin/view-logs.tpl similarity index 100% rename from www/templates/charisma/views/admin/view-logs.tpl rename to www/templates_shared/views/admin/view-logs.tpl