Merge lp:~l3on/ubuntu-it-ask/uit-style into lp:~ubuntu-it-ask/ubuntu-it-ask/dev

Proposed by Giuseppe Terrasi
Status: Merged
Merged at revision: 67
Proposed branch: lp:~l3on/ubuntu-it-ask/uit-style
Merge into: lp:~ubuntu-it-ask/ubuntu-it-ask/dev
Diff against target: 36540 lines (+419/-34404)
184 files modified
.bzrignore (+5/-0)
forum/skins/light/media/iepngfix/iepngfix.htc (+0/-198)
forum/skins/light/media/iepngfix/iepngfix_tilebg.js (+0/-173)
forum/skins/light/media/js/ZeroClipboard.js (+0/-311)
forum/skins/light/media/js/accessibility.js (+0/-70)
forum/skins/light/media/js/ask.jquery.header.string.replace.js (+0/-15)
forum/skins/light/media/js/ask.jquery.subscriptions.string.replace.js (+0/-10)
forum/skins/light/media/js/compress.bat (+0/-1)
forum/skins/light/media/js/cookies.js (+0/-66)
forum/skins/light/media/js/effects.core.min.js (+0/-10)
forum/skins/light/media/js/excanvas.min.js (+0/-1)
forum/skins/light/media/js/flot-build.bat (+0/-3)
forum/skins/light/media/js/html_sanitizer.js (+0/-36)
forum/skins/light/media/js/jquery-1.2.6.js (+0/-3549)
forum/skins/light/media/js/jquery-1.2.6.min.js (+0/-32)
forum/skins/light/media/js/jquery.ajaxfileupload.js (+0/-195)
forum/skins/light/media/js/jquery.caret.js (+0/-10)
forum/skins/light/media/js/jquery.flot.js (+0/-2421)
forum/skins/light/media/js/jquery.flot.min.js (+0/-1)
forum/skins/light/media/js/jquery.form.js (+0/-654)
forum/skins/light/media/js/jquery.i18n.js (+0/-133)
forum/skins/light/media/js/jquery.openid.js (+0/-171)
forum/skins/light/media/js/jquery.validate.pack.js (+0/-15)
forum/skins/light/media/js/l18n-it.js (+66/-0)
forum/skins/light/media/js/osqa.admin.js (+0/-83)
forum/skins/light/media/js/osqa.ask.js (+0/-104)
forum/skins/light/media/js/osqa.main.js (+0/-1266)
forum/skins/light/media/js/osqa.main.min.js (+0/-1)
forum/skins/light/media/js/osqa.question.js (+0/-6)
forum/skins/light/media/js/se_hilite.js (+0/-1)
forum/skins/light/media/js/se_hilite_src.js (+0/-273)
forum/skins/light/media/js/ui.core.js (+0/-519)
forum/skins/light/media/js/ui.core.min.js (+0/-10)
forum/skins/light/media/js/ui.datepicker.js (+0/-1636)
forum/skins/light/media/js/ui.datepicker.min.js (+0/-13)
forum/skins/light/media/js/viewbox.css (+0/-137)
forum/skins/light/media/js/viewbox_min.js (+0/-1)
forum/skins/light/media/js/wmd/showdown.js (+0/-1331)
forum/skins/light/media/js/wmd/wmd-test.html (+0/-158)
forum/skins/light/media/js/wmd/wmd.css (+0/-117)
forum/skins/light/media/js/wmd/wmd.js (+0/-2503)
forum/skins/light/media/js/youtube.js (+0/-6)
forum/skins/light/media/style/admin.css (+0/-63)
forum/skins/light/media/style/auth.css (+0/-84)
forum/skins/light/media/style/default.css (+0/-1764)
forum/skins/light/media/style/djstyle_admin.css (+0/-63)
forum/skins/light/media/style/jquery.autocomplete.css (+0/-49)
forum/skins/light/media/style/markdown_help.css (+0/-45)
forum/skins/light/media/style/openid.css (+0/-45)
forum/skins/light/media/style/prettify.css (+0/-27)
forum/skins/light/media/style/style.css (+306/-236)
forum/skins/light/media/style/user.css (+0/-7)
forum/skins/light/templates/401.html (+0/-40)
forum/skins/light/templates/403.html (+0/-52)
forum/skins/light/templates/404.html (+0/-29)
forum/skins/light/templates/500.html (+0/-38)
forum/skins/light/templates/503.html (+0/-22)
forum/skins/light/templates/account_settings.html (+0/-45)
forum/skins/light/templates/answer_edit.html (+0/-116)
forum/skins/light/templates/answer_edit_tips.html (+0/-26)
forum/skins/light/templates/ask.html (+0/-178)
forum/skins/light/templates/auth/auth_settings.html (+0/-39)
forum/skins/light/templates/auth/complete.html (+0/-110)
forum/skins/light/templates/auth/mail_already_validated.html (+0/-17)
forum/skins/light/templates/auth/mail_validation.html (+0/-30)
forum/skins/light/templates/auth/signin.html (+0/-188)
forum/skins/light/templates/auth/temp_login_email.html (+0/-31)
forum/skins/light/templates/auth/temp_login_request.html (+0/-29)
forum/skins/light/templates/auth/welcome_email.html (+0/-46)
forum/skins/light/templates/badge.html (+0/-39)
forum/skins/light/templates/badges.html (+0/-65)
forum/skins/light/templates/base.html (+0/-27)
forum/skins/light/templates/base_content.html (+25/-15)
forum/skins/light/templates/close.html (+0/-37)
forum/skins/light/templates/email_base.html (+0/-47)
forum/skins/light/templates/feedback.html (+0/-72)
forum/skins/light/templates/feeds/rss_answer_title.html (+0/-2)
forum/skins/light/templates/feeds/rss_description.html (+0/-1)
forum/skins/light/templates/feeds/rss_title.html (+0/-1)
forum/skins/light/templates/header.html (+0/-7)
forum/skins/light/templates/index.html (+0/-31)
forum/skins/light/templates/logout.html (+0/-25)
forum/skins/light/templates/markdown_help.html (+0/-250)
forum/skins/light/templates/node/accept_button.html (+0/-22)
forum/skins/light/templates/node/award_points.html (+0/-75)
forum/skins/light/templates/node/comment_skeleton.html (+0/-60)
forum/skins/light/templates/node/comments.html (+0/-56)
forum/skins/light/templates/node/contributors_info.html (+0/-26)
forum/skins/light/templates/node/convert_to_comment.html (+0/-10)
forum/skins/light/templates/node/convert_to_question.html (+0/-4)
forum/skins/light/templates/node/favorite_mark.html (+0/-8)
forum/skins/light/templates/node/flagged_item.html (+0/-6)
forum/skins/light/templates/node/permanent_link.html (+0/-53)
forum/skins/light/templates/node/post_controls.html (+0/-22)
forum/skins/light/templates/node/report.html (+0/-14)
forum/skins/light/templates/node/reviser_info.html (+0/-9)
forum/skins/light/templates/node/revision.html (+0/-11)
forum/skins/light/templates/node/vote_buttons.html (+0/-12)
forum/skins/light/templates/node/wiki_symbol.html (+0/-11)
forum/skins/light/templates/notarobot.html (+0/-16)
forum/skins/light/templates/notifications/answeraccepted.html (+0/-33)
forum/skins/light/templates/notifications/base.html (+0/-35)
forum/skins/light/templates/notifications/base_text.html (+0/-17)
forum/skins/light/templates/notifications/digest.html (+0/-146)
forum/skins/light/templates/notifications/feedback.html (+0/-37)
forum/skins/light/templates/notifications/newanswer.html (+0/-44)
forum/skins/light/templates/notifications/newcomment.html (+0/-46)
forum/skins/light/templates/notifications/newmember.html (+0/-34)
forum/skins/light/templates/notifications/newquestion.html (+0/-47)
forum/skins/light/templates/opensearch.html (+0/-8)
forum/skins/light/templates/osqaadmin/base.html (+0/-58)
forum/skins/light/templates/osqaadmin/createuser.html (+0/-21)
forum/skins/light/templates/osqaadmin/dashboard.html (+0/-81)
forum/skins/light/templates/osqaadmin/djstyle_base.html (+0/-146)
forum/skins/light/templates/osqaadmin/edit_page.html (+0/-37)
forum/skins/light/templates/osqaadmin/flagged_posts.html (+0/-25)
forum/skins/light/templates/osqaadmin/graph.html (+0/-10)
forum/skins/light/templates/osqaadmin/index.html (+0/-80)
forum/skins/light/templates/osqaadmin/mail_test.html (+0/-22)
forum/skins/light/templates/osqaadmin/maintenance.html (+0/-26)
forum/skins/light/templates/osqaadmin/moderation.html (+0/-102)
forum/skins/light/templates/osqaadmin/nodeman.html (+0/-518)
forum/skins/light/templates/osqaadmin/set.html (+0/-28)
forum/skins/light/templates/osqaadmin/static_pages.html (+0/-33)
forum/skins/light/templates/osqaadmin/statistics.html (+0/-33)
forum/skins/light/templates/osqaadmin/test_email_settings.html (+0/-20)
forum/skins/light/templates/page.html (+0/-27)
forum/skins/light/templates/pagesize.html (+0/-27)
forum/skins/light/templates/paginator.html (+0/-38)
forum/skins/light/templates/paginator/page_numbers.html (+0/-25)
forum/skins/light/templates/paginator/page_sizes.html (+0/-13)
forum/skins/light/templates/paginator/sort_tabs.html (+0/-13)
forum/skins/light/templates/privacy.html (+0/-42)
forum/skins/light/templates/question.html (+0/-350)
forum/skins/light/templates/question_edit.html (+0/-168)
forum/skins/light/templates/question_edit_tips.html (+0/-25)
forum/skins/light/templates/question_list/count.html (+0/-23)
forum/skins/light/templates/question_list/item.html (+0/-42)
forum/skins/light/templates/question_list/related_tags.html (+0/-15)
forum/skins/light/templates/question_list/sort_tabs.html (+0/-8)
forum/skins/light/templates/question_list/subscription_item.html (+0/-10)
forum/skins/light/templates/question_list/tag_selector.html (+0/-51)
forum/skins/light/templates/question_list/title.html (+0/-25)
forum/skins/light/templates/question_retag.html (+0/-89)
forum/skins/light/templates/question_summary_list_roll.html (+0/-55)
forum/skins/light/templates/questions.html (+0/-47)
forum/skins/light/templates/reopen.html (+0/-35)
forum/skins/light/templates/revisions.html (+0/-78)
forum/skins/light/templates/search.html (+0/-26)
forum/skins/light/templates/sidebar/markdown_help.html (+0/-35)
forum/skins/light/templates/sidebar/recent_awards.html (+0/-17)
forum/skins/light/templates/sidebar/recent_tags.html (+0/-16)
forum/skins/light/templates/sidebar/user_blocks.html (+0/-9)
forum/skins/light/templates/sitemap_section_index.xml (+0/-6)
forum/skins/light/templates/static.html (+0/-12)
forum/skins/light/templates/subscription_status.html (+0/-43)
forum/skins/light/templates/tags.html (+0/-63)
forum/skins/light/templates/user.html (+0/-38)
forum/skins/light/templates/users/activity.html (+0/-12)
forum/skins/light/templates/users/edit.html (+0/-110)
forum/skins/light/templates/users/info.html (+0/-125)
forum/skins/light/templates/users/karma_bonus.html (+0/-12)
forum/skins/light/templates/users/menu.html (+0/-8)
forum/skins/light/templates/users/online_users.html (+0/-54)
forum/skins/light/templates/users/preferences.html (+0/-30)
forum/skins/light/templates/users/questions.html (+0/-14)
forum/skins/light/templates/users/recent.html (+0/-12)
forum/skins/light/templates/users/reputation.html (+0/-57)
forum/skins/light/templates/users/signature.html (+0/-33)
forum/skins/light/templates/users/stats.html (+0/-151)
forum/skins/light/templates/users/subscriptions.html (+0/-56)
forum/skins/light/templates/users/subscriptions_management.html (+0/-26)
forum/skins/light/templates/users/subscriptions_settings.html (+0/-108)
forum/skins/light/templates/users/suspend_user.html (+0/-49)
forum/skins/light/templates/users/tabs.html (+0/-12)
forum/skins/light/templates/users/users.html (+0/-54)
forum/skins/light/templates/users/votes.html (+0/-28)
forum/skins/light/tests/faq_page.py (+0/-21)
forum/skins/light/tests/registration_login.py (+0/-43)
forum/skins/light/tests/tags_page.py (+0/-27)
forum/skins/light/tests/users_page.py (+0/-33)
locale/it/LC_MESSAGES/django.po (+0/-9399)
locale/it/LC_MESSAGES/it.po (+17/-16)
settings_local.py (+0/-63)
To merge this branch: bzr merge lp:~l3on/ubuntu-it-ask/uit-style
Reviewer Review Type Date Requested Status
Giuseppe Terrasi (community) Approve
Review via email: mp+126069@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Giuseppe Terrasi (giuseppeterrasi-deactivatedaccount) wrote :

Wow!

Leo, qui [¹] mi ero segnato una serie di modifiche che credo siano tutt'ora attuali e che forse è il caso di mantenere (vedo che anche questi file sono stati rimossi). Per chiarire cosa intendo consiglio un diff tra il file presente nella cartella light e in quello presente nella cartella default.

1) forum/skins/light/media/js/wmd/wmd.js: alcune stringhe sono presenti direttamente nei file javascript.
2) forum/skins/light/media/js/osqa.ask.js: stessa cosa
3) forum/skins/light/templates/notifications/digest.html: tradotte stringhe non presenti nel .po.
4) forum/skins/light/templates/auth/signin.html: qui avevo nascosto ciò che adesso è visibile all'url account/signin/ cioè la possibilità di registrarsi inserendo un indirizzo email, costringendo così gli utenti ad usare solo openid.

Non ne sono sicuro ma anche qui c'era qualcosa che può tornare utile per i problemi di internazionalizzazione che abbiamo:

5) forum/skins/light/templates/users/online_users.html
6) forum/skins/light/templates/users/subscriptions.html
7) forum/skins/light/templates/users/users.html
8) forum/templatetags/extra_tags.py

Ciao!

[1] http://bazaar.launchpad.net/~ubuntu-it-ask/ubuntu-it-ask/dev/view/head:/00-FIXME

review: Needs Fixing
lp:~l3on/ubuntu-it-ask/uit-style updated
76. By Leo Iannacone

Locate some string with a local javascript

77. By Leo Iannacone

Do not display temporary account form

Revision history for this message
Leo Iannacone (l3on) wrote :

2012/9/24 Giuseppe Terrasi <email address hidden>:
> Wow!
>
> Leo, qui [¹] mi ero segnato una serie di modifiche che credo siano tutt'ora attuali e che forse è il caso di mantenere (vedo che anche questi file sono stati rimossi). Per chiarire cosa intendo consiglio un diff tra il file presente nella cartella light e in quello presente nella cartella default.
>
> 1) forum/skins/light/media/js/wmd/wmd.js: alcune stringhe sono presenti direttamente nei file javascript.
> 2) forum/skins/light/media/js/osqa.ask.js: stessa cosa

Io opterei per un approccio diverso.. ovvero la creazione di un js
locale per cambiare solo quelle stringhe (invece di mantenere copia
del il file originale).

Vedi il commit 76, funziona bene per il punto 1 e 2.

> 3) forum/skins/light/templates/notifications/digest.html: tradotte stringhe non presenti nel .po.

Qui posso farci poco... ma tanto, detto fra noi: chi legge le email
può anche passarci su... bisognerebbe però aprire un bug e segnalare
il problema.

> 4) forum/skins/light/templates/auth/signin.html: qui avevo nascosto ciò che adesso è visibile all'url account/signin/ cioè la possibilità di registrarsi inserendo un indirizzo email, costringendo così gli utenti ad usare solo openid.

Fatto con CSS, vedi commit 77.

> Non ne sono sicuro ma anche qui c'era qualcosa che può tornare utile per i problemi di internazionalizzazione che abbiamo:
>
> 5) forum/skins/light/templates/users/online_users.html
> 6) forum/skins/light/templates/users/subscriptions.html
> 7) forum/skins/light/templates/users/users.html

Non conosco la storia di questi file, ma sembrano differire di poco
dal tema 'default'. Non è che semplicemente vanno aggiornate le
traduzioni?

> 8) forum/templatetags/extra_tags.py
E qui ci posso fare davvero poco...

Comunque... che ne pensi?

Ciao!

Leo.

--
Ubuntu Member - http://launchpad.net/~l3on
Home Page - http://leoiannacone.com
GPG Key Id - 0xD282FC25

lp:~l3on/ubuntu-it-ask/uit-style updated
78. By Leo Iannacone

More padding to comments

79. By Leo Iannacone

Maybe a better style for tabs

Revision history for this message
Giuseppe Terrasi (giuseppeterrasi-deactivatedaccount) wrote :

Il giorno 25/set/2012 13:52, "Leo Iannacone" <email address hidden> ha scritto:
>
> 2012/9/24 Giuseppe Terrasi <email address hidden>:
> > Wow!
> >
> > Leo, qui [¹] mi ero segnato una serie di modifiche che credo siano
tutt'ora attuali e che forse è il caso di mantenere (vedo che anche questi
file sono stati rimossi). Per chiarire cosa intendo consiglio un diff tra
il file presente nella cartella light e in quello presente nella cartella
default.
> >
> > 1) forum/skins/light/media/js/wmd/wmd.js: alcune stringhe sono presenti
direttamente nei file javascript.
> > 2) forum/skins/light/media/js/osqa.ask.js: stessa cosa
>
> Io opterei per un approccio diverso.. ovvero la creazione di un js
> locale per cambiare solo quelle stringhe (invece di mantenere copia
> del il file originale).
>
> Vedi il commit 76, funziona bene per il punto 1 e 2.

Ottimo. Visto adesso i nuovi commit.

> > 3) forum/skins/light/templates/notifications/digest.html: tradotte
stringhe non presenti nel .po.
>
> Qui posso farci poco... ma tanto, detto fra noi: chi legge le email
> può anche passarci su... bisognerebbe però aprire un bug e segnalare
> il problema.

Su upstream non possiamo contarci. Noi il .po lo abbiamo mandato e bug ne
abbiamo gia' aperti tutto tace... Non me ne preoccupo di questo punto tanto
c'e' lo segnaleranno gli utenti e al quel punto lo traccero' nel bug
tracker e nel caso risolvero' allo stesso modo.

> > 4) forum/skins/light/templates/auth/signin.html: qui avevo nascosto ciò
che adesso è visibile all'url account/signin/ cioè la possibilità di
registrarsi inserendo un indirizzo email, costringendo così gli utenti ad
usare solo openid.
>
> Fatto con CSS, vedi commit 77.

Ottimo anche qui. Era il risultato che mi interessava non che fosse stata
tolta la revisione precedente.

> > Non ne sono sicuro ma anche qui c'era qualcosa che può tornare utile
per i problemi di internazionalizzazione che abbiamo:
> >
> > 5) forum/skins/light/templates/users/online_users.html
> > 6) forum/skins/light/templates/users/subscriptions.html
> > 7) forum/skins/light/templates/users/users.html
>
> Non conosco la storia di questi file, ma sembrano differire di poco
> dal tema 'default'. Non è che semplicemente vanno aggiornate le
> traduzioni?

Qui mi propongo di riguardarci per verificare a cosa servissero.

> > 8) forum/templatetags/extra_tags.py
> E qui ci posso fare davvero poco...

Come prima. Ma se serve a patchare qualosa sono per rimetterlo.
L'ultimo lavoro dovrebbe essere poi quello di riaggiornare il file FIXME.

>
>
> Comunque... che ne pensi?
>
> Ciao!
>
> Leo.

Ne penso benissimo!
A tra poco.
Giuseppe

Revision history for this message
Giuseppe Terrasi (giuseppeterrasi-deactivatedaccount) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file '.bzrignore'
2--- .bzrignore 1970-01-01 00:00:00 +0000
3+++ .bzrignore 2012-09-25 15:02:22 +0000
4@@ -0,0 +1,5 @@
5+locale/it/LC_MESSAGES/django.mo
6+locale/it/LC_MESSAGES/django.po
7+settings_local.py
8+osqa.wsgi
9+log/django.osqa.log
10
11=== removed directory 'forum/skins/light/media/iepngfix'
12=== removed file 'forum/skins/light/media/iepngfix/blank.gif'
13Binary files forum/skins/light/media/iepngfix/blank.gif 2012-07-02 19:36:31 +0000 and forum/skins/light/media/iepngfix/blank.gif 1970-01-01 00:00:00 +0000 differ
14=== removed file 'forum/skins/light/media/iepngfix/iepngfix.htc'
15--- forum/skins/light/media/iepngfix/iepngfix.htc 2012-07-02 19:36:31 +0000
16+++ forum/skins/light/media/iepngfix/iepngfix.htc 1970-01-01 00:00:00 +0000
17@@ -1,198 +0,0 @@
18-<public:component>
19-<script type="text/javascript">
20-
21-// IE5.5+ PNG Alpha Fix v2.0 Alpha
22-// (c) 2004-2009 Angus Turnbull http://www.twinhelix.com
23-
24-// This is licensed under the GNU LGPL, version 2.1 or later.
25-// For details, see: http://creativecommons.org/licenses/LGPL/2.1/
26-
27-var IEPNGFix = window.IEPNGFix || {};
28-IEPNGFix.data = IEPNGFix.data || {};
29-
30-
31-// CONFIG: blankImg is the path to blank.gif, *relative to the HTML document*.
32-// Try either:
33-// * An absolute path like: '/images/blank.gif'
34-// * A path relative to this HTC file like: thisFolder + 'blank.gif'
35-var thisFolder = document.URL.replace(/(\\|\/)[^\\\/]*$/, '/');
36-IEPNGFix.blankImg = thisFolder + 'blank.gif';
37-
38-
39-IEPNGFix.fix = function(elm, src, t) {
40- // Applies an image 'src' to an element 'elm' using the DirectX filter.
41- // If 'src' is null, filter is disabled.
42- // Disables the 'hook' to prevent infinite recursion on setting BG/src.
43- // 't' = type, where background tile = 0, background = 1, IMG SRC = 2.
44-
45- var h = this.hook.enabled;
46- this.hook.enabled = 0;
47-
48- var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
49- src = (src || '').replace(/\(/g, '%28').replace(/\)/g, '%29');
50-
51- if (
52- src && !(/IMG|INPUT/.test(elm.nodeName) && (t != 2)) &&
53- elm.currentStyle.width == 'auto' && elm.currentStyle.height == 'auto'
54- ) {
55- if (elm.offsetWidth) {
56- elm.style.width = elm.offsetWidth + 'px';
57- }
58- if (elm.clientHeight) {
59- elm.style.height = elm.clientHeight + 'px';
60- }
61- if (elm.currentStyle.display == 'inline') {
62- elm.style.display = 'inline-block';
63- }
64- }
65-
66- if (t == 1) {
67- elm.style.backgroundImage = 'url("' + this.blankImg + '")';
68- }
69- if (t == 2) {
70- elm.src = this.blankImg;
71- }
72-
73- if (elm.filters[f]) {
74- elm.filters[f].enabled = src ? true : false;
75- if (src) {
76- elm.filters[f].src = src;
77- }
78- } else if (src) {
79- elm.style.filter = 'progid:' + f + '(src="' + src +
80- '",sizingMethod="' + (t == 2 ? 'scale' : 'crop') + '")';
81- }
82-
83- this.hook.enabled = h;
84-};
85-
86-
87-IEPNGFix.process = function(elm, init) {
88- // Checks the onpropertychange event (on first 'init' run, a fake event)
89- // and calls the filter-applying-functions.
90-
91- if (
92- !/MSIE (5\.5|6)/.test(navigator.userAgent) ||
93- typeof elm.filters == 'unknown'
94- ) {
95- return;
96- }
97- if (!this.data[elm.uniqueID]) {
98- this.data[elm.uniqueID] = {
99- className: ''
100- };
101- }
102- var data = this.data[elm.uniqueID],
103- evt = init ? { propertyName: 'src,backgroundImage' } : event,
104- isSrc = /src/.test(evt.propertyName),
105- isBg = /backgroundImage/.test(evt.propertyName),
106- isPos = /width|height|background(Pos|Rep)/.test(evt.propertyName),
107- isClass = !init && ((elm.className != data.className) &&
108- (elm.className || data.className));
109- if (!(isSrc || isBg || isPos || isClass)) {
110- return;
111- }
112- data.className = elm.className;
113- var blank = this.blankImg.match(/([^\/]+)$/)[1],
114- eS = elm.style,
115- eCS = elm.currentStyle;
116-
117- // Required for Whatever:hover - erase set BG if className changes.
118- if (
119- isClass && (eS.backgroundImage.indexOf('url(') == -1 ||
120- eS.backgroundImage.indexOf(blank) > -1)
121- ) {
122- return setTimeout(function() {
123- eS.backgroundImage = '';
124- }, 0);
125- }
126-
127- // Foregrounds.
128- if (isSrc && elm.src && { IMG: 1, INPUT: 1 }[elm.nodeName]) {
129- if ((/\.png/i).test(elm.src)) {
130- if (!elm.oSrc) {
131- // MM rollover compat
132- elm.oSrc = elm.src;
133- }
134- this.fix(elm, elm.src, 2);
135- } else if (elm.src.indexOf(blank) == -1) {
136- this.fix(elm, '');
137- }
138- }
139-
140- // Backgrounds.
141- var bgSrc = eCS.backgroundImage || eS.backgroundImage;
142- if ((bgSrc + elm.src).indexOf(blank) == -1) {
143- var bgPNG = bgSrc.match(/url[("']+(.*\.png[^\)"']*)[\)"']/i);
144- if (bgPNG) {
145- if (this.tileBG && !{ IMG: 1, INPUT: 1 }[elm.nodeName]) {
146- this.tileBG(elm, bgPNG[1]);
147- this.fix(elm, '', 1);
148- } else {
149- if (data.tiles && data.tiles.src) {
150- this.tileBG(elm, '');
151- }
152- this.fix(elm, bgPNG[1], 1);
153- this.childFix(elm);
154- }
155- } else {
156- if (data.tiles && data.tiles.src) {
157- this.tileBG(elm, '');
158- }
159- this.fix(elm, '');
160- }
161- } else if ((isPos || isClass) && data.tiles && data.tiles.src) {
162- this.tileBG(elm, data.tiles.src);
163- }
164-
165- if (init) {
166- this.hook.enabled = 1;
167- elm.attachEvent('onpropertychange', this.hook);
168- }
169-};
170-
171-
172-IEPNGFix.childFix = function(elm) {
173- // "hasLayout" fix for unclickable children inside PNG backgrounds.
174- var tags = [
175- 'a',
176- 'input',
177- 'select',
178- 'textarea',
179- 'button',
180- 'iframe',
181- 'object'
182- ],
183- t = tags.length,
184- tFix = [];
185- while (t--) {
186- var pFix = elm.all.tags(tags[t]),
187- e = pFix.length;
188- while (e--) {
189- tFix.push(pFix[e]);
190- }
191- }
192- t = tFix.length;
193- if (t && (/relative|absolute/i).test(elm.currentStyle.position)) {
194- alert('IEPNGFix: Unclickable children of element:' +
195- '\n\n<' + elm.nodeName + (elm.id && ' id=' + elm.id) + '>');
196- }
197- while (t--) {
198- if (!(/relative|absolute/i).test(tFix[t].currentStyle.position)) {
199- tFix[t].style.position = 'relative';
200- }
201- }
202-};
203-
204-
205-IEPNGFix.hook = function() {
206- if (IEPNGFix.hook.enabled) {
207- IEPNGFix.process(element, 0);
208- }
209-};
210-
211-
212-IEPNGFix.process(element, 1);
213-
214-</script>
215-</public:component>
216
217=== removed file 'forum/skins/light/media/iepngfix/iepngfix_tilebg.js'
218--- forum/skins/light/media/iepngfix/iepngfix_tilebg.js 2012-07-02 19:36:31 +0000
219+++ forum/skins/light/media/iepngfix/iepngfix_tilebg.js 1970-01-01 00:00:00 +0000
220@@ -1,173 +0,0 @@
221-// IE5.5+ PNG Alpha Fix v2.0 Alpha: Background Tiling Support
222-// (c) 2008-2009 Angus Turnbull http://www.twinhelix.com
223-
224-// This is licensed under the GNU LGPL, version 2.1 or later.
225-// For details, see: http://creativecommons.org/licenses/LGPL/2.1/
226-
227-var IEPNGFix = window.IEPNGFix || {};
228-
229-IEPNGFix.tileBG = function(elm, pngSrc, ready) {
230- // Params: A reference to a DOM element, the PNG src file pathname, and a
231- // hidden "ready-to-run" passed when called back after image preloading.
232-
233- var data = this.data[elm.uniqueID],
234- elmW = Math.max(elm.clientWidth, elm.scrollWidth),
235- elmH = Math.max(elm.clientHeight, elm.scrollHeight),
236- bgX = elm.currentStyle.backgroundPositionX,
237- bgY = elm.currentStyle.backgroundPositionY,
238- bgR = elm.currentStyle.backgroundRepeat;
239-
240- // Cache of DIVs created per element, and image preloader/data.
241- if (!data.tiles) {
242- data.tiles = {
243- elm: elm,
244- src: '',
245- cache: [],
246- img: new Image(),
247- old: {}
248- };
249- }
250- var tiles = data.tiles,
251- pngW = tiles.img.width,
252- pngH = tiles.img.height;
253-
254- if (pngSrc) {
255- if (!ready && pngSrc != tiles.src) {
256- // New image? Preload it with a callback to detect dimensions.
257- tiles.img.onload = function() {
258- this.onload = null;
259- IEPNGFix.tileBG(elm, pngSrc, 1);
260- };
261- return tiles.img.src = pngSrc;
262- }
263- } else {
264- // No image?
265- if (tiles.src) ready = 1;
266- pngW = pngH = 0;
267- }
268- tiles.src = pngSrc;
269-
270- if (!ready && elmW == tiles.old.w && elmH == tiles.old.h &&
271- bgX == tiles.old.x && bgY == tiles.old.y && bgR == tiles.old.r) {
272- return;
273- }
274-
275- // Convert English and percentage positions to pixels.
276- var pos = {
277- top: '0%',
278- left: '0%',
279- center: '50%',
280- bottom: '100%',
281- right: '100%'
282- },
283- x,
284- y,
285- pc;
286- x = pos[bgX] || bgX;
287- y = pos[bgY] || bgY;
288- if (pc = x.match(/(\d+)%/)) {
289- x = Math.round((elmW - pngW) * (parseInt(pc[1]) / 100));
290- }
291- if (pc = y.match(/(\d+)%/)) {
292- y = Math.round((elmH - pngH) * (parseInt(pc[1]) / 100));
293- }
294- x = parseInt(x);
295- y = parseInt(y);
296-
297- // Handle backgroundRepeat.
298- var repeatX = { 'repeat': 1, 'repeat-x': 1 }[bgR],
299- repeatY = { 'repeat': 1, 'repeat-y': 1 }[bgR];
300- if (repeatX) {
301- x %= pngW;
302- if (x > 0) x -= pngW;
303- }
304- if (repeatY) {
305- y %= pngH;
306- if (y > 0) y -= pngH;
307- }
308-
309- // Go!
310- this.hook.enabled = 0;
311- if (!({ relative: 1, absolute: 1 }[elm.currentStyle.position])) {
312- elm.style.position = 'relative';
313- }
314- var count = 0,
315- xPos,
316- maxX = repeatX ? elmW : x + 0.1,
317- yPos,
318- maxY = repeatY ? elmH : y + 0.1,
319- d,
320- s,
321- isNew;
322- if (pngW && pngH) {
323- for (xPos = x; xPos < maxX; xPos += pngW) {
324- for (yPos = y; yPos < maxY; yPos += pngH) {
325- isNew = 0;
326- if (!tiles.cache[count]) {
327- tiles.cache[count] = document.createElement('div');
328- isNew = 1;
329- }
330- var clipR = Math.max(0, xPos + pngW > elmW ? elmW - xPos : pngW),
331- clipB = Math.max(0, yPos + pngH > elmH ? elmH - yPos : pngH);
332- d = tiles.cache[count];
333- s = d.style;
334- s.behavior = 'none';
335- s.left = (xPos - parseInt(elm.currentStyle.paddingLeft)) + 'px';
336- s.top = yPos + 'px';
337- s.width = clipR + 'px';
338- s.height = clipB + 'px';
339- s.clip = 'rect(' +
340- (yPos < 0 ? 0 - yPos : 0) + 'px,' +
341- clipR + 'px,' +
342- clipB + 'px,' +
343- (xPos < 0 ? 0 - xPos : 0) + 'px)';
344- s.display = 'block';
345- if (isNew) {
346- s.position = 'absolute';
347- s.zIndex = -999;
348- if (elm.firstChild) {
349- elm.insertBefore(d, elm.firstChild);
350- } else {
351- elm.appendChild(d);
352- }
353- }
354- this.fix(d, pngSrc, 0);
355- count++;
356- }
357- }
358- }
359- while (count < tiles.cache.length) {
360- this.fix(tiles.cache[count], '', 0);
361- tiles.cache[count++].style.display = 'none';
362- }
363-
364- this.hook.enabled = 1;
365-
366- // Cache so updates are infrequent.
367- tiles.old = {
368- w: elmW,
369- h: elmH,
370- x: bgX,
371- y: bgY,
372- r: bgR
373- };
374-};
375-
376-
377-IEPNGFix.update = function() {
378- // Update all PNG backgrounds.
379- for (var i in IEPNGFix.data) {
380- var t = IEPNGFix.data[i].tiles;
381- if (t && t.elm && t.src) {
382- IEPNGFix.tileBG(t.elm, t.src);
383- }
384- }
385-};
386-IEPNGFix.update.timer = 0;
387-
388-if (window.attachEvent && !window.opera) {
389- window.attachEvent('onresize', function() {
390- clearTimeout(IEPNGFix.update.timer);
391- IEPNGFix.update.timer = setTimeout(IEPNGFix.update, 100);
392- });
393-}
394
395=== added file 'forum/skins/light/media/images/badges.png'
396Binary files forum/skins/light/media/images/badges.png 1970-01-01 00:00:00 +0000 and forum/skins/light/media/images/badges.png 2012-09-25 15:02:22 +0000 differ
397=== modified file 'forum/skins/light/media/images/light/answered-accepted.png'
398Binary files forum/skins/light/media/images/light/answered-accepted.png 2012-07-12 09:08:07 +0000 and forum/skins/light/media/images/light/answered-accepted.png 2012-09-25 15:02:22 +0000 differ
399=== modified file 'forum/skins/light/media/images/light/answered.png'
400Binary files forum/skins/light/media/images/light/answered.png 2012-07-12 09:08:07 +0000 and forum/skins/light/media/images/light/answered.png 2012-09-25 15:02:22 +0000 differ
401=== added file 'forum/skins/light/media/images/light/box-bottom-top.png'
402Binary files forum/skins/light/media/images/light/box-bottom-top.png 1970-01-01 00:00:00 +0000 and forum/skins/light/media/images/light/box-bottom-top.png 2012-09-25 15:02:22 +0000 differ
403=== added file 'forum/skins/light/media/images/light/box-content.png'
404Binary files forum/skins/light/media/images/light/box-content.png 1970-01-01 00:00:00 +0000 and forum/skins/light/media/images/light/box-content.png 2012-09-25 15:02:22 +0000 differ
405=== added file 'forum/skins/light/media/images/light/cta-background.png'
406Binary files forum/skins/light/media/images/light/cta-background.png 1970-01-01 00:00:00 +0000 and forum/skins/light/media/images/light/cta-background.png 2012-09-25 15:02:22 +0000 differ
407=== added file 'forum/skins/light/media/images/light/delete.png'
408Binary files forum/skins/light/media/images/light/delete.png 1970-01-01 00:00:00 +0000 and forum/skins/light/media/images/light/delete.png 2012-09-25 15:02:22 +0000 differ
409=== removed file 'forum/skins/light/media/images/light/pictogram-delete-white.png'
410Binary files forum/skins/light/media/images/light/pictogram-delete-white.png 2012-07-21 10:25:18 +0000 and forum/skins/light/media/images/light/pictogram-delete-white.png 1970-01-01 00:00:00 +0000 differ
411=== modified file 'forum/skins/light/media/images/light/unanswered.png'
412Binary files forum/skins/light/media/images/light/unanswered.png 2012-07-12 09:08:07 +0000 and forum/skins/light/media/images/light/unanswered.png 2012-09-25 15:02:22 +0000 differ
413=== added file 'forum/skins/light/media/images/menu-dropdown.png'
414Binary files forum/skins/light/media/images/menu-dropdown.png 1970-01-01 00:00:00 +0000 and forum/skins/light/media/images/menu-dropdown.png 2012-09-25 15:02:22 +0000 differ
415=== added file 'forum/skins/light/media/images/tag.png'
416Binary files forum/skins/light/media/images/tag.png 1970-01-01 00:00:00 +0000 and forum/skins/light/media/images/tag.png 2012-09-25 15:02:22 +0000 differ
417=== added directory 'forum/skins/light/media/js'
418=== removed directory 'forum/skins/light/media/js'
419=== removed file 'forum/skins/light/media/js/ZeroClipboard.js'
420--- forum/skins/light/media/js/ZeroClipboard.js 2012-07-02 19:36:31 +0000
421+++ forum/skins/light/media/js/ZeroClipboard.js 1970-01-01 00:00:00 +0000
422@@ -1,311 +0,0 @@
423-// Simple Set Clipboard System
424-// Author: Joseph Huckaby
425-
426-var ZeroClipboard = {
427-
428- version: "1.0.7",
429- clients: {}, // registered upload clients on page, indexed by id
430- moviePath: 'ZeroClipboard.swf', // URL to movie
431- nextId: 1, // ID of next movie
432-
433- $: function(thingy) {
434- // simple DOM lookup utility function
435- if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
436- if (!thingy.addClass) {
437- // extend element with a few useful methods
438- thingy.hide = function() { this.style.display = 'none'; };
439- thingy.show = function() { this.style.display = ''; };
440- thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
441- thingy.removeClass = function(name) {
442- var classes = this.className.split(/\s+/);
443- var idx = -1;
444- for (var k = 0; k < classes.length; k++) {
445- if (classes[k] == name) { idx = k; k = classes.length; }
446- }
447- if (idx > -1) {
448- classes.splice( idx, 1 );
449- this.className = classes.join(' ');
450- }
451- return this;
452- };
453- thingy.hasClass = function(name) {
454- return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
455- };
456- }
457- return thingy;
458- },
459-
460- setMoviePath: function(path) {
461- // set path to ZeroClipboard.swf
462- this.moviePath = path;
463- },
464-
465- dispatch: function(id, eventName, args) {
466- // receive event from flash movie, send to client
467- var client = this.clients[id];
468- if (client) {
469- client.receiveEvent(eventName, args);
470- }
471- },
472-
473- register: function(id, client) {
474- // register new client to receive events
475- this.clients[id] = client;
476- },
477-
478- getDOMObjectPosition: function(obj, stopObj) {
479- // get absolute coordinates for dom element
480- var info = {
481- left: 0,
482- top: 0,
483- width: obj.width ? obj.width : obj.offsetWidth,
484- height: obj.height ? obj.height : obj.offsetHeight
485- };
486-
487- while (obj && (obj != stopObj)) {
488- info.left += obj.offsetLeft;
489- info.top += obj.offsetTop;
490- obj = obj.offsetParent;
491- }
492-
493- return info;
494- },
495-
496- Client: function(elem) {
497- // constructor for new simple upload client
498- this.handlers = {};
499-
500- // unique ID
501- this.id = ZeroClipboard.nextId++;
502- this.movieId = 'ZeroClipboardMovie_' + this.id;
503-
504- // register client with singleton to receive flash events
505- ZeroClipboard.register(this.id, this);
506-
507- // create movie
508- if (elem) this.glue(elem);
509- }
510-};
511-
512-ZeroClipboard.Client.prototype = {
513-
514- id: 0, // unique ID for us
515- ready: false, // whether movie is ready to receive events or not
516- movie: null, // reference to movie object
517- clipText: '', // text to copy to clipboard
518- handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
519- cssEffects: true, // enable CSS mouse effects on dom container
520- handlers: null, // user event handlers
521-
522- glue: function(elem, appendElem, stylesToAdd) {
523- // glue to DOM element
524- // elem can be ID or actual DOM element object
525- this.domElement = ZeroClipboard.$(elem);
526-
527- // float just above object, or zIndex 99 if dom element isn't set
528- var zIndex = 99;
529- if (this.domElement.style.zIndex) {
530- zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
531- }
532-
533- if (typeof(appendElem) == 'string') {
534- appendElem = ZeroClipboard.$(appendElem);
535- }
536- else if (typeof(appendElem) == 'undefined') {
537- appendElem = document.getElementsByTagName('body')[0];
538- }
539-
540- // find X/Y position of domElement
541- var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
542-
543- // create floating DIV above element
544- this.div = document.createElement('div');
545- var style = this.div.style;
546- style.position = 'absolute';
547- style.left = '' + box.left + 'px';
548- style.top = '' + box.top + 'px';
549- style.width = '' + box.width + 'px';
550- style.height = '' + box.height + 'px';
551- style.zIndex = zIndex;
552-
553- if (typeof(stylesToAdd) == 'object') {
554- for (addedStyle in stylesToAdd) {
555- style[addedStyle] = stylesToAdd[addedStyle];
556- }
557- }
558-
559- // style.backgroundColor = '#f00'; // debug
560-
561- appendElem.appendChild(this.div);
562-
563- this.div.innerHTML = this.getHTML( box.width, box.height );
564- },
565-
566- getHTML: function(width, height) {
567- // return HTML for movie
568- var html = '';
569- var flashvars = 'id=' + this.id +
570- '&width=' + width +
571- '&height=' + height;
572-
573- if (navigator.userAgent.match(/MSIE/)) {
574- // IE gets an OBJECT tag
575- var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
576- html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
577- }
578- else {
579- // all other browsers get an EMBED tag
580- html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
581- }
582- return html;
583- },
584-
585- hide: function() {
586- // temporarily hide floater offscreen
587- if (this.div) {
588- this.div.style.left = '-2000px';
589- }
590- },
591-
592- show: function() {
593- // show ourselves after a call to hide()
594- this.reposition();
595- },
596-
597- destroy: function() {
598- // destroy control and floater
599- if (this.domElement && this.div) {
600- this.hide();
601- this.div.innerHTML = '';
602-
603- var body = document.getElementsByTagName('body')[0];
604- try { body.removeChild( this.div ); } catch(e) {;}
605-
606- this.domElement = null;
607- this.div = null;
608- }
609- },
610-
611- reposition: function(elem) {
612- // reposition our floating div, optionally to new container
613- // warning: container CANNOT change size, only position
614- if (elem) {
615- this.domElement = ZeroClipboard.$(elem);
616- if (!this.domElement) this.hide();
617- }
618-
619- if (this.domElement && this.div) {
620- var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
621- var style = this.div.style;
622- style.left = '' + box.left + 'px';
623- style.top = '' + box.top + 'px';
624- }
625- },
626-
627- setText: function(newText) {
628- // set text to be copied to clipboard
629- this.clipText = newText;
630- if (this.ready) this.movie.setText(newText);
631- },
632-
633- addEventListener: function(eventName, func) {
634- // add user event listener for event
635- // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
636- eventName = eventName.toString().toLowerCase().replace(/^on/, '');
637- if (!this.handlers[eventName]) this.handlers[eventName] = [];
638- this.handlers[eventName].push(func);
639- },
640-
641- setHandCursor: function(enabled) {
642- // enable hand cursor (true), or default arrow cursor (false)
643- this.handCursorEnabled = enabled;
644- if (this.ready) this.movie.setHandCursor(enabled);
645- },
646-
647- setCSSEffects: function(enabled) {
648- // enable or disable CSS effects on DOM container
649- this.cssEffects = !!enabled;
650- },
651-
652- receiveEvent: function(eventName, args) {
653- // receive event from flash
654- eventName = eventName.toString().toLowerCase().replace(/^on/, '');
655-
656- // special behavior for certain events
657- switch (eventName) {
658- case 'load':
659- // movie claims it is ready, but in IE this isn't always the case...
660- // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
661- this.movie = document.getElementById(this.movieId);
662- if (!this.movie) {
663- var self = this;
664- setTimeout( function() { self.receiveEvent('load', null); }, 1 );
665- return;
666- }
667-
668- // firefox on pc needs a "kick" in order to set these in certain cases
669- if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
670- var self = this;
671- setTimeout( function() { self.receiveEvent('load', null); }, 100 );
672- this.ready = true;
673- return;
674- }
675-
676- this.ready = true;
677- this.movie.setText( this.clipText );
678- this.movie.setHandCursor( this.handCursorEnabled );
679- break;
680-
681- case 'mouseover':
682- if (this.domElement && this.cssEffects) {
683- this.domElement.addClass('hover');
684- if (this.recoverActive) this.domElement.addClass('active');
685- }
686- break;
687-
688- case 'mouseout':
689- if (this.domElement && this.cssEffects) {
690- this.recoverActive = false;
691- if (this.domElement.hasClass('active')) {
692- this.domElement.removeClass('active');
693- this.recoverActive = true;
694- }
695- this.domElement.removeClass('hover');
696- }
697- break;
698-
699- case 'mousedown':
700- if (this.domElement && this.cssEffects) {
701- this.domElement.addClass('active');
702- }
703- break;
704-
705- case 'mouseup':
706- if (this.domElement && this.cssEffects) {
707- this.domElement.removeClass('active');
708- this.recoverActive = false;
709- }
710- break;
711- } // switch eventName
712-
713- if (this.handlers[eventName]) {
714- for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
715- var func = this.handlers[eventName][idx];
716-
717- if (typeof(func) == 'function') {
718- // actual function reference
719- func(this, args);
720- }
721- else if ((typeof(func) == 'object') && (func.length == 2)) {
722- // PHP style object + method, i.e. [myObject, 'myMethod']
723- func[0][ func[1] ](this, args);
724- }
725- else if (typeof(func) == 'string') {
726- // name of function
727- window[func](this, args);
728- }
729- } // foreach event handler defined
730- } // user defined handler for event
731- }
732-
733-};
734
735=== removed file 'forum/skins/light/media/js/ZeroClipboard.swf'
736Binary files forum/skins/light/media/js/ZeroClipboard.swf 2012-07-02 19:36:31 +0000 and forum/skins/light/media/js/ZeroClipboard.swf 1970-01-01 00:00:00 +0000 differ
737=== removed file 'forum/skins/light/media/js/accessibility.js'
738--- forum/skins/light/media/js/accessibility.js 2012-07-04 18:02:11 +0000
739+++ forum/skins/light/media/js/accessibility.js 1970-01-01 00:00:00 +0000
740@@ -1,70 +0,0 @@
741-/*
742-** This file contains function to enable and
743-** disable Accessibility stylesheet in ubuntu-it
744-*/
745-
746-//ACCESSIBILITY_CSS_THEME_DIR = 'light-drupal-theme/styles';
747-//ACCESSIBILITY_CSS_FILE_NAME = 'accessibility.css' ;
748-ACCESSIBILITY_CSS_ABSPATH = ['http://ubuntu-it.org/sites/all/themes/light-drupal-theme/styles/accessibility.css'];
749-ACCESSIBILITY_COOKIE_VALUE_ON = 'on';
750-ACCESSIBILITY_COOKIE_VALUE_OFF = 'off';
751-
752-// This function adds the accessibility css into the Head section
753-// and set the cookie value ON
754-function accessibility_set_on () {
755-
756- head = document.getElementsByTagName('head')[0];
757-
758- for (i = 0; i < ACCESSIBILITY_CSS_ABSPATH.length ; i++) {
759- link = document.createElement('link');
760- link.setAttribute('type','text/css');
761- link.setAttribute('rel', 'stylesheet');
762- link.setAttribute('media', 'screen');
763- link.setAttribute('href', ACCESSIBILITY_CSS_ABSPATH[i]);
764- head.appendChild(link);
765- }
766- set_cookie_accessibility( ACCESSIBILITY_COOKIE_VALUE_ON );
767-}
768-
769-// This function removes the accessibility css from the Head section
770-// and set the cookie value OFF
771-function accessibility_set_off() {
772- head = document.getElementsByTagName('head')[0];
773- links = head.getElementsByTagName('link');
774- links_to_remove = []
775- for (i = 0 ; i < links.length ; i++) {
776- link = links[i];
777- if (link.getAttribute('type') == 'text/css') {
778- for (j = 0 ; j < ACCESSIBILITY_CSS_ABSPATH.length ; j++) {
779- if (link.getAttribute('href').indexOf(ACCESSIBILITY_CSS_ABSPATH[j]) >= 0 ) {
780- links_to_remove.push(link);
781- }
782- }
783- }
784- }
785- for (i = 0; i < links_to_remove.length; i++) {
786- head.removeChild(links_to_remove[i]);
787- }
788- set_cookie_accessibility( ACCESSIBILITY_COOKIE_VALUE_OFF );
789-}
790-
791-
792-function accessibility_toggle () {
793- value = get_cookie_accessibility();
794-
795- // If accessibility is ON, remove the css stylesheet
796- if (value == ACCESSIBILITY_COOKIE_VALUE_ON)
797- accessibility_set_off();
798- else
799- accessibility_set_on();
800-}
801-
802-// The main function
803-function accessibility () {
804- value = get_cookie_accessibility();
805-
806- // If accessibility is ON, add the css stylesheet
807- if (value == ACCESSIBILITY_COOKIE_VALUE_ON)
808- accessibility_set_on();
809-}
810-
811
812=== removed file 'forum/skins/light/media/js/ask.jquery.header.string.replace.js'
813--- forum/skins/light/media/js/ask.jquery.header.string.replace.js 2012-08-04 06:25:40 +0000
814+++ forum/skins/light/media/js/ask.jquery.header.string.replace.js 1970-01-01 00:00:00 +0000
815@@ -1,15 +0,0 @@
816-/*
817- * Title: jQuery header string replace
818- * Description: customize header link in order to capitalize first letter using jquery replaceWith method.
819- *
820- * Copyright (c) 2012 Ubuntu-it Ask Team - https://launchpad.net/~ubuntu-it-ask
821- * GNU GPL 3 LICENSE
822- */
823-
824-$('#header li #nav_index').replaceWith('<a id="nav_index" href="/">Home</a>');
825-$('#header li #nav_questions').replaceWith('<a id="nav_questions" href="/questions/">Domande</a>');
826-$('#header li #nav_tags').replaceWith('<a id="nav_tag" href="/tags/">Tag</a>');
827-$('#header li #nav_users').replaceWith('<a id="nav_users" href="/users/">Utenti</a>');
828-$('#header li #nav_badges').replaceWith('<a id="nav_badges" href="/badges/">Badge</a>');
829-$('#header li #nav_unanswered').replaceWith('<a id="nav_unanswered" href="/questions/unanswered/">Senza risposta</a>');
830-$('#header li #nav_ask').replaceWith('<a id="nav_ask" class="special" href="/questions/ask/">Chiedi</a>');
831
832=== removed file 'forum/skins/light/media/js/ask.jquery.subscriptions.string.replace.js'
833--- forum/skins/light/media/js/ask.jquery.subscriptions.string.replace.js 2012-08-04 06:30:11 +0000
834+++ forum/skins/light/media/js/ask.jquery.subscriptions.string.replace.js 1970-01-01 00:00:00 +0000
835@@ -1,10 +0,0 @@
836-/*
837- * Title: jQuery subscriptions string replace
838- * Description: remove capitalization in "impostazioni" word using javascript.
839- *
840- * Copyright (c) 2012 Ubuntu-it Ask Team - https://launchpad.net/~ubuntu-it-ask
841- * GNU GPL 3 LICENSE
842- */
843-
844-var subscriptionDiv = $('#navBar a#subscriptions_settings_button');
845-subscriptionDiv.text('impostazioni');
846
847=== removed file 'forum/skins/light/media/js/compress.bat'
848--- forum/skins/light/media/js/compress.bat 2012-07-02 19:36:31 +0000
849+++ forum/skins/light/media/js/compress.bat 1970-01-01 00:00:00 +0000
850@@ -1,1 +0,0 @@
851-java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 osqa.main.js -o osqa.main.min.js
852
853=== removed file 'forum/skins/light/media/js/cookies.js'
854--- forum/skins/light/media/js/cookies.js 2012-07-04 18:02:11 +0000
855+++ forum/skins/light/media/js/cookies.js 1970-01-01 00:00:00 +0000
856@@ -1,66 +0,0 @@
857-// Common variabiles
858-COOKIE_DOMAIN = "ubuntu-it.org";
859-COOKIE_PREFIX = "ubuntu-it_custom_";
860-COOKIE_ACCESIBILITY_NAME = "accessibility";
861-
862-
863-// Start Cookie in browser functions
864-function set_cookie ( name, value, expires, path, domain, secure )
865-{
866- name = COOKIE_PREFIX + name;
867- var cookie_string = name + "=" + escape ( value );
868-
869- if ( expires ) {
870- cookie_string += "; expires=" + expires.toGMTString();
871- }
872- else {
873- var expires = new Date ( 2100, 1, 1); // never expires
874- cookie_string += "; expires=" + expires.toGMTString();
875- }
876-
877- if ( path )
878- cookie_string += "; path=" + escape ( path );
879- else
880- cookie_string += "; path=" + escape ("/")
881-
882- if ( domain )
883- cookie_string += "; domain=" + escape ( domain );
884- else
885-// cookie_string += "; domain=" + escape (location.host)
886- cookie_string += "; domain=" + escape (COOKIE_DOMAIN);
887-
888- if ( secure )
889- cookie_string += "; secure";
890- document.cookie = cookie_string;
891-}
892-
893-function delete_cookie ( cookie_name ) {
894- cookie_name = COOKIE_PREFIX + cookie_name;
895- var cookie_date = new Date ( ); // current date & time
896- cookie_date.setTime ( cookie_date.getTime() - 1 );
897- document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
898-}
899-
900-function get_cookie ( cookie_name ) {
901- cookie_name = COOKIE_PREFIX + cookie_name;
902- var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
903- if ( results )
904- return ( unescape ( results[2] ) );
905- else
906- return null;
907-}
908-// End Cookie in browser functions
909-
910-
911-
912-// Accessibility
913-function set_cookie_accessibility (cookie_value) {
914- cookie_name = COOKIE_ACCESIBILITY_NAME;
915- set_cookie (cookie_name, cookie_value);
916-}
917-
918-function get_cookie_accessibility () {
919- cookie_name = COOKIE_ACCESIBILITY_NAME;
920- return get_cookie (cookie_name);
921-}
922-
923
924=== removed file 'forum/skins/light/media/js/effects.core.min.js'
925--- forum/skins/light/media/js/effects.core.min.js 2012-07-02 19:36:31 +0000
926+++ forum/skins/light/media/js/effects.core.min.js 1970-01-01 00:00:00 +0000
927@@ -1,10 +0,0 @@
928-/*
929- * jQuery UI Effects 1.7.2
930- *
931- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
932- * Dual licensed under the MIT (MIT-LICENSE.txt)
933- * and GPL (GPL-LICENSE.txt) licenses.
934- *
935- * http://docs.jquery.com/UI/Effects/
936- */
937-jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.data("ec.storage."+h[f],g[0].style[h[f]])}}},restore:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.css(h[f],g.data("ec.storage."+h[f]))}}},setMode:function(f,g){if(g=="toggle"){g=f.is(":hidden")?"show":"hide"}return g},getBaseline:function(g,h){var i,f;switch(g[0]){case"top":i=0;break;case"middle":i=0.5;break;case"bottom":i=1;break;default:i=g[0]/h.height}switch(g[1]){case"left":f=0;break;case"center":f=0.5;break;case"right":f=1;break;default:f=g[1]/h.width}return{x:f,y:i}},createWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent()}var g={width:f.outerWidth(true),height:f.outerHeight(true),"float":f.css("float")};f.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(d.isFunction(arguments[0])||typeof arguments[0]=="boolean")){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return -(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f},easeOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return h*Math.pow(2,-10*i)*Math.sin((i*l-j)*(2*Math.PI)/k)+m+f},easeInOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l/2)==2){return f+m}if(!k){k=l*(0.3*1.5)}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}if(i<1){return -0.5*(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f}return h*Math.pow(2,-10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k)*0.5+m+f},easeInBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*(h/=j)*h*((i+1)*h-i)+f},easeOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*((h=h/j-1)*h*((i+1)*h+i)+1)+f},easeInOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}if((h/=j/2)<1){return k/2*(h*h*(((i*=(1.525))+1)*h-i))+f}return k/2*((h-=2)*h*(((i*=(1.525))+1)*h+i)+2)+f},easeInBounce:function(g,h,f,j,i){return j-d.easing.easeOutBounce(g,i-h,0,j,i)+f},easeOutBounce:function(g,h,f,j,i){if((h/=i)<(1/2.75)){return j*(7.5625*h*h)+f}else{if(h<(2/2.75)){return j*(7.5625*(h-=(1.5/2.75))*h+0.75)+f}else{if(h<(2.5/2.75)){return j*(7.5625*(h-=(2.25/2.75))*h+0.9375)+f}else{return j*(7.5625*(h-=(2.625/2.75))*h+0.984375)+f}}}},easeInOutBounce:function(g,h,f,j,i){if(h<i/2){return d.easing.easeInBounce(g,h*2,0,j,i)*0.5+f}return d.easing.easeOutBounce(g,h*2-i,0,j,i)*0.5+j*0.5+f}})})(jQuery);
938\ No newline at end of file
939
940=== removed file 'forum/skins/light/media/js/excanvas.min.js'
941--- forum/skins/light/media/js/excanvas.min.js 2012-07-02 19:36:31 +0000
942+++ forum/skins/light/media/js/excanvas.min.js 1970-01-01 00:00:00 +0000
943@@ -1,1 +0,0 @@
944-if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};
945\ No newline at end of file
946
947=== removed file 'forum/skins/light/media/js/flot-build.bat'
948--- forum/skins/light/media/js/flot-build.bat 2012-07-02 19:36:31 +0000
949+++ forum/skins/light/media/js/flot-build.bat 1970-01-01 00:00:00 +0000
950@@ -1,3 +0,0 @@
951-java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 jquery.flot.js -o jquery.flot.pack.js
952-
953-pause
954
955=== removed file 'forum/skins/light/media/js/html_sanitizer.js'
956--- forum/skins/light/media/js/html_sanitizer.js 2012-07-02 19:36:31 +0000
957+++ forum/skins/light/media/js/html_sanitizer.js 1970-01-01 00:00:00 +0000
958@@ -1,36 +0,0 @@
959-{var html4={},html,html_sanitize;html4.atype={'NONE':0,'URI':1,'URI_FRAGMENT':11,'SCRIPT':2,'STYLE':3,'ID':4,'IDREF':5,'IDREFS':6,'GLOBAL_NAME':7,'LOCAL_NAME':8,'CLASSES':9,'FRAME_TARGET':10},html4.ATTRIBS={'*::class':9,'*::dir':0,'*::id':4,'*::lang':0,'*::onclick':2,'*::ondblclick':2,'*::onkeydown':2,'*::onkeypress':2,'*::onkeyup':2,'*::onload':2,'*::onmousedown':2,'*::onmousemove':2,'*::onmouseout':2,'*::onmouseover':2,'*::onmouseup':2,'*::style':3,'*::title':0,'a::accesskey':0,'a::coords':0,'a::href':1,'a::hreflang':0,'a::name':7,'a::onblur':2,'a::onfocus':2,'a::rel':0,'a::rev':0,'a::shape':0,'a::tabindex':0,'a::target':10,'a::type':0,'area::accesskey':0,'area::alt':0,'area::coords':0,'area::href':1,'area::nohref':0,'area::onblur':2,'area::onfocus':2,'area::shape':0,'area::tabindex':0,'area::target':10,'bdo::dir':0,'blockquote::cite':1,'br::clear':0,'button::accesskey':0,'button::disabled':0,'button::name':8,'button::onblur':2,'button::onfocus':2,'button::tabindex':0,'button::type':0,'button::value':0,'canvas::height':0,'canvas::width':0,'caption::align':0,'col::align':0,'col::char':0,'col::charoff':0,'col::span':0,'col::valign':0,'col::width':0,'colgroup::align':0,'colgroup::char':0,'colgroup::charoff':0,'colgroup::span':0,'colgroup::valign':0,'colgroup::width':0,'del::cite':1,'del::datetime':0,'dir::compact':0,'div::align':0,'dl::compact':0,'font::color':0,'font::face':0,'font::size':0,'form::accept':0,'form::action':1,'form::autocomplete':0,'form::enctype':0,'form::method':0,'form::name':7,'form::onreset':2,'form::onsubmit':2,'form::target':10,'h1::align':0,'h2::align':0,'h3::align':0,'h4::align':0,'h5::align':0,'h6::align':0,'hr::align':0,'hr::noshade':0,'hr::size':0,'hr::width':0,'iframe::align':0,'iframe::frameborder':0,'iframe::height':0,'iframe::marginheight':0,'iframe::marginwidth':0,'iframe::width':0,'img::align':0,'img::alt':0,'img::border':0,'img::height':0,'img::hspace':0,'img::ismap':0,'img::name':7,'img::src':1,'img::usemap':11,'img::vspace':0,'img::width':0,'input::accept':0,'input::accesskey':0,'input::align':0,'input::alt':0,'input::autocomplete':0,'input::checked':0,'input::disabled':0,'input::ismap':0,'input::maxlength':0,'input::name':8,'input::onblur':2,'input::onchange':2,'input::onfocus':2,'input::onselect':2,'input::readonly':0,'input::size':0,'input::src':1,'input::tabindex':0,'input::type':0,'input::usemap':11,'input::value':0,'ins::cite':1,'ins::datetime':0,'label::accesskey':0,'label::for':5,'label::onblur':2,'label::onfocus':2,'legend::accesskey':0,'legend::align':0,'li::type':0,'li::value':0,'map::name':7,'menu::compact':0,'ol::compact':0,'ol::start':0,'ol::type':0,'optgroup::disabled':0,'optgroup::label':0,'option::disabled':0,'option::label':0,'option::selected':0,'option::value':0,'p::align':0,'pre::width':0,'q::cite':1,'select::disabled':0,'select::multiple':0,'select::name':8,'select::onblur':2,'select::onchange':2,'select::onfocus':2,'select::size':0,'select::tabindex':0,'table::align':0,'table::bgcolor':0,'table::border':0,'table::cellpadding':0,'table::cellspacing':0,'table::frame':0,'table::rules':0,'table::summary':0,'table::width':0,'tbody::align':0,'tbody::char':0,'tbody::charoff':0,'tbody::valign':0,'td::abbr':0,'td::align':0,'td::axis':0,'td::bgcolor':0,'td::char':0,'td::charoff':0,'td::colspan':0,'td::headers':6,'td::height':0,'td::nowrap':0,'td::rowspan':0,'td::scope':0,'td::valign':0,'td::width':0,'textarea::accesskey':0,'textarea::cols':0,'textarea::disabled':0,'textarea::name':8,'textarea::onblur':2,'textarea::onchange':2,'textarea::onfocus':2,'textarea::onselect':2,'textarea::readonly':0,'textarea::rows':0,'textarea::tabindex':0,'tfoot::align':0,'tfoot::char':0,'tfoot::charoff':0,'tfoot::valign':0,'th::abbr':0,'th::align':0,'th::axis':0,'th::bgcolor':0,'th::char':0,'th::charoff':0,'th::colspan':0,'th::headers':6,'th::height':0,'th::nowrap':0,'th::rowspan':0,'th::scope':0,'th::valign':0,'th::width':0,'thead::align':0,'thead::char':0,'thead::charoff':0,'thead::valign':0,'tr::align':0,'tr::bgcolor':0,'tr::char':0,'tr::charoff':0,'tr::valign':0,'ul::compact':0,'ul::type':0},html4.eflags={'OPTIONAL_ENDTAG':1,'EMPTY':2,'CDATA':4,'RCDATA':8,'UNSAFE':16,'FOLDABLE':32,'SCRIPT':64,'STYLE':128},html4.ELEMENTS={'a':0,'abbr':0,'acronym':0,'address':0,'applet':16,'area':2,'b':0,'base':18,'basefont':18,'bdo':0,'big':0,'blockquote':0,'body':49,'br':2,'button':0,'canvas':0,'caption':0,'center':0,'cite':0,'code':0,'col':2,'colgroup':1,'dd':1,'del':0,'dfn':0,'dir':0,'div':0,'dl':0,'dt':1,'em':0,'fieldset':0,'font':0,'form':0,'frame':18,'frameset':16,'h1':0,'h2':0,'h3':0,'h4':0,'h5':0,'h6':0,'head':49,'hr':2,'html':49,'i':0,'iframe':4,'img':2,'input':2,'ins':0,'isindex':18,'kbd':0,'label':0,'legend':0,'li':1,'link':18,'map':0,'menu':0,'meta':18,'nav':0,'nobr':0,'noembed':4,'noframes':20,'noscript':20,'object':16,'ol':0,'optgroup':0,'option':1,'p':1,'param':18,'pre':0,'q':0,'s':0,'samp':0,'script':84,'select':0,'small':0,'span':0,'strike':0,'strong':0,'style':148,'sub':0,'sup':0,'table':0,'tbody':1,'td':1,'textarea':8,'tfoot':1,'th':1,'thead':1,'title':24,'tr':1,'tt':0,'u':0,'ul':0,'var':0},html4.ueffects={'NOT_LOADED':0,'SAME_DOCUMENT':1,'NEW_DOCUMENT':2},html4.URIEFFECTS={'a::href':2,'area::href':2,'blockquote::cite':0,'body::background':1,'del::cite':0,'form::action':2,'img::src':1,'input::src':1,'ins::cite':0,'q::cite':0},html4.ltypes={'UNSANDBOXED':2,'SANDBOXED':1,'DATA':0},html4.LOADERTYPES={'a::href':2,'area::href':2,'blockquote::cite':2,'body::background':1,'del::cite':2,'form::action':2,'img::src':1,'input::src':1,'ins::cite':2,'q::cite':2},html=(function(html4){var
960- ENTITIES,INSIDE_TAG_TOKEN,OUTSIDE_TAG_TOKEN,URI_SCHEME_RE,WHITELISTED_SCHEMES,ampRe,decimalEscapeRe,entityRe,gtRe,hexEscapeRe,lcase,looseAmpRe,ltRe,nulRe,quotRe;'script'==='SCRIPT'.toLowerCase()?(lcase=function(s){return s.toLowerCase()}):(lcase=function(s){return s.replace(/[A-Z]/g,function(ch){return String.fromCharCode(ch.charCodeAt(0)|32)})}),ENTITIES={'lt':'<','gt':'>','amp':'&','nbsp':'\xa0','quot':'\"','apos':'\''},WHITELISTED_SCHEMES=/^(?:https?|mailto)$/i,decimalEscapeRe=/^#(\d+)$/,hexEscapeRe=/^#x([0-9A-Fa-f]+)$/;function
961- lookupEntity(name){var m;return name=lcase(name),ENTITIES.hasOwnProperty(name)?ENTITIES[name]:(m=name.match(decimalEscapeRe),m?String.fromCharCode(parseInt(m[1],10)):(m=name.match(hexEscapeRe))?String.fromCharCode(parseInt(m[1],16)):'')}function
962- decodeOneEntity(_,name){return lookupEntity(name)}nulRe=/\0/g;function stripNULs(s){return s.replace(nulRe,'')}entityRe=/&(#\d+|#x[0-9A-Fa-f]+|\w+);/g;function
963- unescapeEntities(s){return s.replace(entityRe,decodeOneEntity)}ampRe=/&/g,looseAmpRe=/&([^a-z#]|#(?:[^0-9x]|x(?:[^0-9a-f]|$)|$)|$)/gi,ltRe=/</g,gtRe=/>/g,quotRe=/\"/g;function
964- escapeAttrib(s){return(''+s).replace(ampRe,'&amp;').replace(ltRe,'&lt;').replace(gtRe,'&gt;').replace(quotRe,'&#34;')}function
965- normalizeRCData(rcdata){return rcdata.replace(looseAmpRe,'&amp;$1').replace(ltRe,'&lt;').replace(gtRe,'&gt;')}INSIDE_TAG_TOKEN=new
966- RegExp('^\\s*(?:(?:([a-z][a-z-]*)(\\s*=\\s*(\"[^\"]*\"|\'[^\']*\'|(?=[a-z][a-z-]*\\s*=)|[^>\"\'\\s]*))?)|(/?>)|[\\s\\S][^a-z\\s>]*)','i'),OUTSIDE_TAG_TOKEN=new
967- RegExp('^(?:&(\\#[0-9]+|\\#[x][0-9a-f]+|\\w+);|<!--[\\s\\S]*?-->|<!\\w[^>]*>|<\\?[^>*]*>|<(/)?([a-z][a-z0-9]*)|([^<&>]+)|([<&>]))','i');function
968- makeSaxParser(handler){return function parse(htmlText,param){var attribName,attribs,dataEnd,decodedValue,eflags,encodedValue,htmlLower,inTag,m,openTag,tagName;htmlText=String(htmlText),htmlLower=null,inTag=false,attribs=[],tagName=void
969- 0,eflags=void 0,openTag=void 0,handler.startDoc&&handler.startDoc(param);while(htmlText){m=htmlText.match(inTag?INSIDE_TAG_TOKEN:OUTSIDE_TAG_TOKEN),htmlText=htmlText.substring(m[0].length);if(inTag){if(m[1]){attribName=lcase(m[1]);if(m[2]){encodedValue=m[3];switch(encodedValue.charCodeAt(0)){case
970-34:case 39:encodedValue=encodedValue.substring(1,encodedValue.length-1)}decodedValue=unescapeEntities(stripNULs(encodedValue))}else
971- decodedValue=attribName;attribs.push(attribName,decodedValue)}else if(m[4])eflags!==void
972- 0&&(openTag?handler.startTag&&handler.startTag(tagName,attribs,param):handler.endTag&&handler.endTag(tagName,param)),openTag&&eflags&(html4.eflags.CDATA|html4.eflags.RCDATA)&&(htmlLower===null?(htmlLower=lcase(htmlText)):(htmlLower=htmlLower.substring(htmlLower.length-htmlText.length)),dataEnd=htmlLower.indexOf('</'+tagName),dataEnd<0&&(dataEnd=htmlText.length),dataEnd&&(eflags&html4.eflags.CDATA?handler.cdata&&handler.cdata(htmlText.substring(0,dataEnd),param):handler.rcdata&&handler.rcdata(normalizeRCData(htmlText.substring(0,dataEnd)),param),htmlText=htmlText.substring(dataEnd))),tagName=eflags=openTag=void
973- 0,attribs.length=0,inTag=false}else if(m[1])handler.pcdata&&handler.pcdata(m[0],param);else
974-if(m[3])openTag=!m[2],inTag=true,tagName=lcase(m[3]),eflags=html4.ELEMENTS.hasOwnProperty(tagName)?html4.ELEMENTS[tagName]:void
975- 0;else if(m[4])handler.pcdata&&handler.pcdata(m[4],param);else if(m[5]){if(handler.pcdata)switch(m[5]){case'<':handler.pcdata('&lt;',param);break;case'>':handler.pcdata('&gt;',param);break;case'&':handler.pcdata('&amp;',param)}}}handler.endDoc&&handler.endDoc(param)}}function
976- makeHtmlSanitizer(tagPolicy){var ignoring,stack;return makeSaxParser({'startDoc':function(_){stack=[],ignoring=false},'startTag':function(tagName,attribs,out){var
977- attribName,eflags,i,n,value;if(ignoring)return;if(!html4.ELEMENTS.hasOwnProperty(tagName))return;eflags=html4.ELEMENTS[tagName];if(eflags&html4.eflags.FOLDABLE)return;attribs=tagPolicy(tagName,attribs);if(!attribs)return ignoring=!(eflags&html4.eflags.EMPTY),void
978- 0;eflags&html4.eflags.EMPTY||stack.push(tagName),out.push('<',tagName);for(i=0,n=attribs.length;i<n;i+=2)attribName=attribs[i],value=attribs[i+1],value!==null&&value!==void
979- 0&&out.push(' ',attribName,'=\"',escapeAttrib(value),'\"');out.push('>')},'endTag':function(tagName,out){var
980- eflags,i,index,stackEl;if(ignoring)return ignoring=false,void 0;if(!html4.ELEMENTS.hasOwnProperty(tagName))return;eflags=html4.ELEMENTS[tagName];if(!(eflags&(html4.eflags.EMPTY|html4.eflags.FOLDABLE))){if(eflags&html4.eflags.OPTIONAL_ENDTAG)for(index=stack.length;--index>=0;){stackEl=stack[index];if(stackEl===tagName)break;if(!(html4.ELEMENTS[stackEl]&html4.eflags.OPTIONAL_ENDTAG))return}else
981- for(index=stack.length;--index>=0;)if(stack[index]===tagName)break;if(index<0)return;for(i=stack.length;--i>index;)stackEl=stack[i],html4.ELEMENTS[stackEl]&html4.eflags.OPTIONAL_ENDTAG||out.push('</',stackEl,'>');stack.length=index,out.push('</',tagName,'>')}},'pcdata':function(text,out){ignoring||out.push(text)},'rcdata':function(text,out){ignoring||out.push(text)},'cdata':function(text,out){ignoring||out.push(text)},'endDoc':function(out){var
982- i;for(i=stack.length;--i>=0;)out.push('</',stack[i],'>');stack.length=0}})}URI_SCHEME_RE=new
983- RegExp('^(?:([^:/?#]+):)?');function sanitizeAttribs(tagName,attribs,opt_uriPolicy,opt_nmTokenPolicy){var
984- attribKey,attribName,atype,i,parsedUri,value;for(i=0;i<attribs.length;i+=2){attribName=attribs[i],value=attribs[i+1],atype=null,((attribKey=tagName+'::'+attribName,html4.ATTRIBS.hasOwnProperty(attribKey))||(attribKey='*::'+attribName,html4.ATTRIBS.hasOwnProperty(attribKey)))&&(atype=html4.ATTRIBS[attribKey]);if(atype!==null)switch(atype){case
985-html4.atype.NONE:break;case html4.atype.SCRIPT:case html4.atype.STYLE:value=null;break;case
986-html4.atype.ID:case html4.atype.IDREF:case html4.atype.IDREFS:case html4.atype.GLOBAL_NAME:case
987-html4.atype.LOCAL_NAME:case html4.atype.CLASSES:value=opt_nmTokenPolicy?opt_nmTokenPolicy(value):value;break;case
988-html4.atype.URI:parsedUri=(''+value).match(URI_SCHEME_RE),parsedUri?!parsedUri[1]||WHITELISTED_SCHEMES.test(parsedUri[1])?(value=opt_uriPolicy?opt_uriPolicy(value):null):(value=null):(value=null);break;case
989-html4.atype.URI_FRAGMENT:value&&'#'===value.charAt(0)?(value=value.substring(1),value=opt_nmTokenPolicy?opt_nmTokenPolicy(value):value,value!==null&&value!==void
990- 0&&(value='#'+value)):(value=null);break;default:value=null}else value=null;attribs[i+1]=value}return attribs}function
991- makeTagPolicy(opt_uriPolicy,opt_nmTokenPolicy){return function(tagName,attribs){if(!(html4.ELEMENTS[tagName]&html4.eflags.UNSAFE))return sanitizeAttribs(tagName,attribs,opt_uriPolicy,opt_nmTokenPolicy)}}function
992- sanitizeWithPolicy(inputHtml,tagPolicy){var outputArray=[];return makeHtmlSanitizer(tagPolicy)(inputHtml,outputArray),outputArray.join('')}function
993- sanitize(inputHtml,opt_uriPolicy,opt_nmTokenPolicy){var tagPolicy=makeTagPolicy(opt_uriPolicy,opt_nmTokenPolicy);return sanitizeWithPolicy(inputHtml,tagPolicy)}return{'escapeAttrib':escapeAttrib,'makeHtmlSanitizer':makeHtmlSanitizer,'makeSaxParser':makeSaxParser,'makeTagPolicy':makeTagPolicy,'normalizeRCData':normalizeRCData,'sanitize':sanitize,'sanitizeAttribs':sanitizeAttribs,'sanitizeWithPolicy':sanitizeWithPolicy,'unescapeEntities':unescapeEntities}})(html4),html_sanitize=html.sanitize,typeof
994- window!=='undefined'&&(window.html=html,window.html_sanitize=html_sanitize)}
995\ No newline at end of file
996
997=== removed file 'forum/skins/light/media/js/jquery-1.2.6.js'
998--- forum/skins/light/media/js/jquery-1.2.6.js 2012-07-02 19:36:31 +0000
999+++ forum/skins/light/media/js/jquery-1.2.6.js 1970-01-01 00:00:00 +0000
1000@@ -1,3549 +0,0 @@
1001-(function(){
1002-/*
1003- * jQuery 1.2.6 - New Wave Javascript
1004- *
1005- * Copyright (c) 2008 John Resig (jquery.com)
1006- * Dual licensed under the MIT (MIT-LICENSE.txt)
1007- * and GPL (GPL-LICENSE.txt) licenses.
1008- *
1009- * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
1010- * $Rev: 5685 $
1011- */
1012-
1013-// Map over jQuery in case of overwrite
1014-var _jQuery = window.jQuery,
1015-// Map over the $ in case of overwrite
1016- _$ = window.$;
1017-
1018-var jQuery = window.jQuery = window.$ = function( selector, context ) {
1019- // The jQuery object is actually just the init constructor 'enhanced'
1020- return new jQuery.fn.init( selector, context );
1021-};
1022-
1023-// A simple way to check for HTML strings or ID strings
1024-// (both of which we optimize for)
1025-var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,
1026-
1027-// Is it a simple selector
1028- isSimple = /^.[^:#\[\.]*$/,
1029-
1030-// Will speed up references to undefined, and allows munging its name.
1031- undefined;
1032-
1033-jQuery.fn = jQuery.prototype = {
1034- init: function( selector, context ) {
1035- // Make sure that a selection was provided
1036- selector = selector || document;
1037-
1038- // Handle $(DOMElement)
1039- if ( selector.nodeType ) {
1040- this[0] = selector;
1041- this.length = 1;
1042- return this;
1043- }
1044- // Handle HTML strings
1045- if ( typeof selector == "string" ) {
1046- // Are we dealing with HTML string or an ID?
1047- var match = quickExpr.exec( selector );
1048-
1049- // Verify a match, and that no context was specified for #id
1050- if ( match && (match[1] || !context) ) {
1051-
1052- // HANDLE: $(html) -> $(array)
1053- if ( match[1] )
1054- selector = jQuery.clean( [ match[1] ], context );
1055-
1056- // HANDLE: $("#id")
1057- else {
1058- var elem = document.getElementById( match[3] );
1059-
1060- // Make sure an element was located
1061- if ( elem ){
1062- // Handle the case where IE and Opera return items
1063- // by name instead of ID
1064- if ( elem.id != match[3] )
1065- return jQuery().find( selector );
1066-
1067- // Otherwise, we inject the element directly into the jQuery object
1068- return jQuery( elem );
1069- }
1070- selector = [];
1071- }
1072-
1073- // HANDLE: $(expr, [context])
1074- // (which is just equivalent to: $(content).find(expr)
1075- } else
1076- return jQuery( context ).find( selector );
1077-
1078- // HANDLE: $(function)
1079- // Shortcut for document ready
1080- } else if ( jQuery.isFunction( selector ) )
1081- return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );
1082-
1083- return this.setArray(jQuery.makeArray(selector));
1084- },
1085-
1086- // The current version of jQuery being used
1087- jquery: "1.2.6",
1088-
1089- // The number of elements contained in the matched element set
1090- size: function() {
1091- return this.length;
1092- },
1093-
1094- // The number of elements contained in the matched element set
1095- length: 0,
1096-
1097- // Get the Nth element in the matched element set OR
1098- // Get the whole matched element set as a clean array
1099- get: function( num ) {
1100- return num == undefined ?
1101-
1102- // Return a 'clean' array
1103- jQuery.makeArray( this ) :
1104-
1105- // Return just the object
1106- this[ num ];
1107- },
1108-
1109- // Take an array of elements and push it onto the stack
1110- // (returning the new matched element set)
1111- pushStack: function( elems ) {
1112- // Build a new jQuery matched element set
1113- var ret = jQuery( elems );
1114-
1115- // Add the old object onto the stack (as a reference)
1116- ret.prevObject = this;
1117-
1118- // Return the newly-formed element set
1119- return ret;
1120- },
1121-
1122- // Force the current matched set of elements to become
1123- // the specified array of elements (destroying the stack in the process)
1124- // You should use pushStack() in order to do this, but maintain the stack
1125- setArray: function( elems ) {
1126- // Resetting the length to 0, then using the native Array push
1127- // is a super-fast way to populate an object with array-like properties
1128- this.length = 0;
1129- Array.prototype.push.apply( this, elems );
1130-
1131- return this;
1132- },
1133-
1134- // Execute a callback for every element in the matched set.
1135- // (You can seed the arguments with an array of args, but this is
1136- // only used internally.)
1137- each: function( callback, args ) {
1138- return jQuery.each( this, callback, args );
1139- },
1140-
1141- // Determine the position of an element within
1142- // the matched set of elements
1143- index: function( elem ) {
1144- var ret = -1;
1145-
1146- // Locate the position of the desired element
1147- return jQuery.inArray(
1148- // If it receives a jQuery object, the first element is used
1149- elem && elem.jquery ? elem[0] : elem
1150- , this );
1151- },
1152-
1153- attr: function( name, value, type ) {
1154- var options = name;
1155-
1156- // Look for the case where we're accessing a style value
1157- if ( name.constructor == String )
1158- if ( value === undefined )
1159- return this[0] && jQuery[ type || "attr" ]( this[0], name );
1160-
1161- else {
1162- options = {};
1163- options[ name ] = value;
1164- }
1165-
1166- // Check to see if we're setting style values
1167- return this.each(function(i){
1168- // Set all the styles
1169- for ( name in options )
1170- jQuery.attr(
1171- type ?
1172- this.style :
1173- this,
1174- name, jQuery.prop( this, options[ name ], type, i, name )
1175- );
1176- });
1177- },
1178-
1179- css: function( key, value ) {
1180- // ignore negative width and height values
1181- if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
1182- value = undefined;
1183- return this.attr( key, value, "curCSS" );
1184- },
1185-
1186- text: function( text ) {
1187- if ( typeof text != "object" && text != null )
1188- return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
1189-
1190- var ret = "";
1191-
1192- jQuery.each( text || this, function(){
1193- jQuery.each( this.childNodes, function(){
1194- if ( this.nodeType != 8 )
1195- ret += this.nodeType != 1 ?
1196- this.nodeValue :
1197- jQuery.fn.text( [ this ] );
1198- });
1199- });
1200-
1201- return ret;
1202- },
1203-
1204- wrapAll: function( html ) {
1205- if ( this[0] )
1206- // The elements to wrap the target around
1207- jQuery( html, this[0].ownerDocument )
1208- .clone()
1209- .insertBefore( this[0] )
1210- .map(function(){
1211- var elem = this;
1212-
1213- while ( elem.firstChild )
1214- elem = elem.firstChild;
1215-
1216- return elem;
1217- })
1218- .append(this);
1219-
1220- return this;
1221- },
1222-
1223- wrapInner: function( html ) {
1224- return this.each(function(){
1225- jQuery( this ).contents().wrapAll( html );
1226- });
1227- },
1228-
1229- wrap: function( html ) {
1230- return this.each(function(){
1231- jQuery( this ).wrapAll( html );
1232- });
1233- },
1234-
1235- append: function() {
1236- return this.domManip(arguments, true, false, function(elem){
1237- if (this.nodeType == 1)
1238- this.appendChild( elem );
1239- });
1240- },
1241-
1242- prepend: function() {
1243- return this.domManip(arguments, true, true, function(elem){
1244- if (this.nodeType == 1)
1245- this.insertBefore( elem, this.firstChild );
1246- });
1247- },
1248-
1249- before: function() {
1250- return this.domManip(arguments, false, false, function(elem){
1251- this.parentNode.insertBefore( elem, this );
1252- });
1253- },
1254-
1255- after: function() {
1256- return this.domManip(arguments, false, true, function(elem){
1257- this.parentNode.insertBefore( elem, this.nextSibling );
1258- });
1259- },
1260-
1261- end: function() {
1262- return this.prevObject || jQuery( [] );
1263- },
1264-
1265- find: function( selector ) {
1266- var elems = jQuery.map(this, function(elem){
1267- return jQuery.find( selector, elem );
1268- });
1269-
1270- return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ?
1271- jQuery.unique( elems ) :
1272- elems );
1273- },
1274-
1275- clone: function( events ) {
1276- // Do the clone
1277- var ret = this.map(function(){
1278- if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) {
1279- // IE copies events bound via attachEvent when
1280- // using cloneNode. Calling detachEvent on the
1281- // clone will also remove the events from the orignal
1282- // In order to get around this, we use innerHTML.
1283- // Unfortunately, this means some modifications to
1284- // attributes in IE that are actually only stored
1285- // as properties will not be copied (such as the
1286- // the name attribute on an input).
1287- var clone = this.cloneNode(true),
1288- container = document.createElement("div");
1289- container.appendChild(clone);
1290- return jQuery.clean([container.innerHTML])[0];
1291- } else
1292- return this.cloneNode(true);
1293- });
1294-
1295- // Need to set the expando to null on the cloned set if it exists
1296- // removeData doesn't work here, IE removes it from the original as well
1297- // this is primarily for IE but the data expando shouldn't be copied over in any browser
1298- var clone = ret.find("*").andSelf().each(function(){
1299- if ( this[ expando ] != undefined )
1300- this[ expando ] = null;
1301- });
1302-
1303- // Copy the events from the original to the clone
1304- if ( events === true )
1305- this.find("*").andSelf().each(function(i){
1306- if (this.nodeType == 3)
1307- return;
1308- var events = jQuery.data( this, "events" );
1309-
1310- for ( var type in events )
1311- for ( var handler in events[ type ] )
1312- jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
1313- });
1314-
1315- // Return the cloned set
1316- return ret;
1317- },
1318-
1319- filter: function( selector ) {
1320- return this.pushStack(
1321- jQuery.isFunction( selector ) &&
1322- jQuery.grep(this, function(elem, i){
1323- return selector.call( elem, i );
1324- }) ||
1325-
1326- jQuery.multiFilter( selector, this ) );
1327- },
1328-
1329- not: function( selector ) {
1330- if ( selector.constructor == String )
1331- // test special case where just one selector is passed in
1332- if ( isSimple.test( selector ) )
1333- return this.pushStack( jQuery.multiFilter( selector, this, true ) );
1334- else
1335- selector = jQuery.multiFilter( selector, this );
1336-
1337- var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
1338- return this.filter(function() {
1339- return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
1340- });
1341- },
1342-
1343- add: function( selector ) {
1344- return this.pushStack( jQuery.unique( jQuery.merge(
1345- this.get(),
1346- typeof selector == 'string' ?
1347- jQuery( selector ) :
1348- jQuery.makeArray( selector )
1349- )));
1350- },
1351-
1352- is: function( selector ) {
1353- return !!selector && jQuery.multiFilter( selector, this ).length > 0;
1354- },
1355-
1356- hasClass: function( selector ) {
1357- return this.is( "." + selector );
1358- },
1359-
1360- val: function( value ) {
1361- if ( value == undefined ) {
1362-
1363- if ( this.length ) {
1364- var elem = this[0];
1365-
1366- // We need to handle select boxes special
1367- if ( jQuery.nodeName( elem, "select" ) ) {
1368- var index = elem.selectedIndex,
1369- values = [],
1370- options = elem.options,
1371- one = elem.type == "select-one";
1372-
1373- // Nothing was selected
1374- if ( index < 0 )
1375- return null;
1376-
1377- // Loop through all the selected options
1378- for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
1379- var option = options[ i ];
1380-
1381- if ( option.selected ) {
1382- // Get the specifc value for the option
1383- value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;
1384-
1385- // We don't need an array for one selects
1386- if ( one )
1387- return value;
1388-
1389- // Multi-Selects return an array
1390- values.push( value );
1391- }
1392- }
1393-
1394- return values;
1395-
1396- // Everything else, we just grab the value
1397- } else
1398- return (this[0].value || "").replace(/\r/g, "");
1399-
1400- }
1401-
1402- return undefined;
1403- }
1404-
1405- if( value.constructor == Number )
1406- value += '';
1407-
1408- return this.each(function(){
1409- if ( this.nodeType != 1 )
1410- return;
1411-
1412- if ( value.constructor == Array && /radio|checkbox/.test( this.type ) )
1413- this.checked = (jQuery.inArray(this.value, value) >= 0 ||
1414- jQuery.inArray(this.name, value) >= 0);
1415-
1416- else if ( jQuery.nodeName( this, "select" ) ) {
1417- var values = jQuery.makeArray(value);
1418-
1419- jQuery( "option", this ).each(function(){
1420- this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
1421- jQuery.inArray( this.text, values ) >= 0);
1422- });
1423-
1424- if ( !values.length )
1425- this.selectedIndex = -1;
1426-
1427- } else
1428- this.value = value;
1429- });
1430- },
1431-
1432- html: function( value ) {
1433- return value == undefined ?
1434- (this[0] ?
1435- this[0].innerHTML :
1436- null) :
1437- this.empty().append( value );
1438- },
1439-
1440- replaceWith: function( value ) {
1441- return this.after( value ).remove();
1442- },
1443-
1444- eq: function( i ) {
1445- return this.slice( i, i + 1 );
1446- },
1447-
1448- slice: function() {
1449- return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
1450- },
1451-
1452- map: function( callback ) {
1453- return this.pushStack( jQuery.map(this, function(elem, i){
1454- return callback.call( elem, i, elem );
1455- }));
1456- },
1457-
1458- andSelf: function() {
1459- return this.add( this.prevObject );
1460- },
1461-
1462- data: function( key, value ){
1463- var parts = key.split(".");
1464- parts[1] = parts[1] ? "." + parts[1] : "";
1465-
1466- if ( value === undefined ) {
1467- var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
1468-
1469- if ( data === undefined && this.length )
1470- data = jQuery.data( this[0], key );
1471-
1472- return data === undefined && parts[1] ?
1473- this.data( parts[0] ) :
1474- data;
1475- } else
1476- return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
1477- jQuery.data( this, key, value );
1478- });
1479- },
1480-
1481- removeData: function( key ){
1482- return this.each(function(){
1483- jQuery.removeData( this, key );
1484- });
1485- },
1486-
1487- domManip: function( args, table, reverse, callback ) {
1488- var clone = this.length > 1, elems;
1489-
1490- return this.each(function(){
1491- if ( !elems ) {
1492- elems = jQuery.clean( args, this.ownerDocument );
1493-
1494- if ( reverse )
1495- elems.reverse();
1496- }
1497-
1498- var obj = this;
1499-
1500- if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) )
1501- obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );
1502-
1503- var scripts = jQuery( [] );
1504-
1505- jQuery.each(elems, function(){
1506- var elem = clone ?
1507- jQuery( this ).clone( true )[0] :
1508- this;
1509-
1510- // execute all scripts after the elements have been injected
1511- if ( jQuery.nodeName( elem, "script" ) )
1512- scripts = scripts.add( elem );
1513- else {
1514- // Remove any inner scripts for later evaluation
1515- if ( elem.nodeType == 1 )
1516- scripts = scripts.add( jQuery( "script", elem ).remove() );
1517-
1518- // Inject the elements into the document
1519- callback.call( obj, elem );
1520- }
1521- });
1522-
1523- scripts.each( evalScript );
1524- });
1525- }
1526-};
1527-
1528-// Give the init function the jQuery prototype for later instantiation
1529-jQuery.fn.init.prototype = jQuery.fn;
1530-
1531-function evalScript( i, elem ) {
1532- if ( elem.src )
1533- jQuery.ajax({
1534- url: elem.src,
1535- async: false,
1536- dataType: "script"
1537- });
1538-
1539- else
1540- jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
1541-
1542- if ( elem.parentNode )
1543- elem.parentNode.removeChild( elem );
1544-}
1545-
1546-function now(){
1547- return +new Date;
1548-}
1549-
1550-jQuery.extend = jQuery.fn.extend = function() {
1551- // copy reference to target object
1552- var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
1553-
1554- // Handle a deep copy situation
1555- if ( target.constructor == Boolean ) {
1556- deep = target;
1557- target = arguments[1] || {};
1558- // skip the boolean and the target
1559- i = 2;
1560- }
1561-
1562- // Handle case when target is a string or something (possible in deep copy)
1563- if ( typeof target != "object" && typeof target != "function" )
1564- target = {};
1565-
1566- // extend jQuery itself if only one argument is passed
1567- if ( length == i ) {
1568- target = this;
1569- --i;
1570- }
1571-
1572- for ( ; i < length; i++ )
1573- // Only deal with non-null/undefined values
1574- if ( (options = arguments[ i ]) != null )
1575- // Extend the base object
1576- for ( var name in options ) {
1577- var src = target[ name ], copy = options[ name ];
1578-
1579- // Prevent never-ending loop
1580- if ( target === copy )
1581- continue;
1582-
1583- // Recurse if we're merging object values
1584- if ( deep && copy && typeof copy == "object" && !copy.nodeType )
1585- target[ name ] = jQuery.extend( deep,
1586- // Never move original objects, clone them
1587- src || ( copy.length != null ? [ ] : { } )
1588- , copy );
1589-
1590- // Don't bring in undefined values
1591- else if ( copy !== undefined )
1592- target[ name ] = copy;
1593-
1594- }
1595-
1596- // Return the modified object
1597- return target;
1598-};
1599-
1600-var expando = "jQuery" + now(), uuid = 0, windowData = {},
1601- // exclude the following css properties to add px
1602- exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
1603- // cache defaultView
1604- defaultView = document.defaultView || {};
1605-
1606-jQuery.extend({
1607- noConflict: function( deep ) {
1608- window.$ = _$;
1609-
1610- if ( deep )
1611- window.jQuery = _jQuery;
1612-
1613- return jQuery;
1614- },
1615-
1616- // See test/unit/core.js for details concerning this function.
1617- isFunction: function( fn ) {
1618- return !!fn && typeof fn != "string" && !fn.nodeName &&
1619- fn.constructor != Array && /^[\s[]?function/.test( fn + "" );
1620- },
1621-
1622- // check if an element is in a (or is an) XML document
1623- isXMLDoc: function( elem ) {
1624- return elem.documentElement && !elem.body ||
1625- elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
1626- },
1627-
1628- // Evalulates a script in a global context
1629- globalEval: function( data ) {
1630- data = jQuery.trim( data );
1631-
1632- if ( data ) {
1633- // Inspired by code by Andrea Giammarchi
1634- // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
1635- var head = document.getElementsByTagName("head")[0] || document.documentElement,
1636- script = document.createElement("script");
1637-
1638- script.type = "text/javascript";
1639- if ( jQuery.browser.msie )
1640- script.text = data;
1641- else
1642- script.appendChild( document.createTextNode( data ) );
1643-
1644- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
1645- // This arises when a base node is used (#2709).
1646- head.insertBefore( script, head.firstChild );
1647- head.removeChild( script );
1648- }
1649- },
1650-
1651- nodeName: function( elem, name ) {
1652- return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
1653- },
1654-
1655- cache: {},
1656-
1657- data: function( elem, name, data ) {
1658- elem = elem == window ?
1659- windowData :
1660- elem;
1661-
1662- var id = elem[ expando ];
1663-
1664- // Compute a unique ID for the element
1665- if ( !id )
1666- id = elem[ expando ] = ++uuid;
1667-
1668- // Only generate the data cache if we're
1669- // trying to access or manipulate it
1670- if ( name && !jQuery.cache[ id ] )
1671- jQuery.cache[ id ] = {};
1672-
1673- // Prevent overriding the named cache with undefined values
1674- if ( data !== undefined )
1675- jQuery.cache[ id ][ name ] = data;
1676-
1677- // Return the named cache data, or the ID for the element
1678- return name ?
1679- jQuery.cache[ id ][ name ] :
1680- id;
1681- },
1682-
1683- removeData: function( elem, name ) {
1684- elem = elem == window ?
1685- windowData :
1686- elem;
1687-
1688- var id = elem[ expando ];
1689-
1690- // If we want to remove a specific section of the element's data
1691- if ( name ) {
1692- if ( jQuery.cache[ id ] ) {
1693- // Remove the section of cache data
1694- delete jQuery.cache[ id ][ name ];
1695-
1696- // If we've removed all the data, remove the element's cache
1697- name = "";
1698-
1699- for ( name in jQuery.cache[ id ] )
1700- break;
1701-
1702- if ( !name )
1703- jQuery.removeData( elem );
1704- }
1705-
1706- // Otherwise, we want to remove all of the element's data
1707- } else {
1708- // Clean up the element expando
1709- try {
1710- delete elem[ expando ];
1711- } catch(e){
1712- // IE has trouble directly removing the expando
1713- // but it's ok with using removeAttribute
1714- if ( elem.removeAttribute )
1715- elem.removeAttribute( expando );
1716- }
1717-
1718- // Completely remove the data cache
1719- delete jQuery.cache[ id ];
1720- }
1721- },
1722-
1723- // args is for internal usage only
1724- each: function( object, callback, args ) {
1725- var name, i = 0, length = object.length;
1726-
1727- if ( args ) {
1728- if ( length == undefined ) {
1729- for ( name in object )
1730- if ( callback.apply( object[ name ], args ) === false )
1731- break;
1732- } else
1733- for ( ; i < length; )
1734- if ( callback.apply( object[ i++ ], args ) === false )
1735- break;
1736-
1737- // A special, fast, case for the most common use of each
1738- } else {
1739- if ( length == undefined ) {
1740- for ( name in object )
1741- if ( callback.call( object[ name ], name, object[ name ] ) === false )
1742- break;
1743- } else
1744- for ( var value = object[0];
1745- i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
1746- }
1747-
1748- return object;
1749- },
1750-
1751- prop: function( elem, value, type, i, name ) {
1752- // Handle executable functions
1753- if ( jQuery.isFunction( value ) )
1754- value = value.call( elem, i );
1755-
1756- // Handle passing in a number to a CSS property
1757- return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ?
1758- value + "px" :
1759- value;
1760- },
1761-
1762- className: {
1763- // internal only, use addClass("class")
1764- add: function( elem, classNames ) {
1765- jQuery.each((classNames || "").split(/\s+/), function(i, className){
1766- if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
1767- elem.className += (elem.className ? " " : "") + className;
1768- });
1769- },
1770-
1771- // internal only, use removeClass("class")
1772- remove: function( elem, classNames ) {
1773- if (elem.nodeType == 1)
1774- elem.className = classNames != undefined ?
1775- jQuery.grep(elem.className.split(/\s+/), function(className){
1776- return !jQuery.className.has( classNames, className );
1777- }).join(" ") :
1778- "";
1779- },
1780-
1781- // internal only, use hasClass("class")
1782- has: function( elem, className ) {
1783- return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
1784- }
1785- },
1786-
1787- // A method for quickly swapping in/out CSS properties to get correct calculations
1788- swap: function( elem, options, callback ) {
1789- var old = {};
1790- // Remember the old values, and insert the new ones
1791- for ( var name in options ) {
1792- old[ name ] = elem.style[ name ];
1793- elem.style[ name ] = options[ name ];
1794- }
1795-
1796- callback.call( elem );
1797-
1798- // Revert the old values
1799- for ( var name in options )
1800- elem.style[ name ] = old[ name ];
1801- },
1802-
1803- css: function( elem, name, force ) {
1804- if ( name == "width" || name == "height" ) {
1805- var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
1806-
1807- function getWH() {
1808- val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
1809- var padding = 0, border = 0;
1810- jQuery.each( which, function() {
1811- padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
1812- border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
1813- });
1814- val -= Math.round(padding + border);
1815- }
1816-
1817- if ( jQuery(elem).is(":visible") )
1818- getWH();
1819- else
1820- jQuery.swap( elem, props, getWH );
1821-
1822- return Math.max(0, val);
1823- }
1824-
1825- return jQuery.curCSS( elem, name, force );
1826- },
1827-
1828- curCSS: function( elem, name, force ) {
1829- var ret, style = elem.style;
1830-
1831- // A helper method for determining if an element's values are broken
1832- function color( elem ) {
1833- if ( !jQuery.browser.safari )
1834- return false;
1835-
1836- // defaultView is cached
1837- var ret = defaultView.getComputedStyle( elem, null );
1838- return !ret || ret.getPropertyValue("color") == "";
1839- }
1840-
1841- // We need to handle opacity special in IE
1842- if ( name == "opacity" && jQuery.browser.msie ) {
1843- ret = jQuery.attr( style, "opacity" );
1844-
1845- return ret == "" ?
1846- "1" :
1847- ret;
1848- }
1849- // Opera sometimes will give the wrong display answer, this fixes it, see #2037
1850- if ( jQuery.browser.opera && name == "display" ) {
1851- var save = style.outline;
1852- style.outline = "0 solid black";
1853- style.outline = save;
1854- }
1855-
1856- // Make sure we're using the right name for getting the float value
1857- if ( name.match( /float/i ) )
1858- name = styleFloat;
1859-
1860- if ( !force && style && style[ name ] )
1861- ret = style[ name ];
1862-
1863- else if ( defaultView.getComputedStyle ) {
1864-
1865- // Only "float" is needed here
1866- if ( name.match( /float/i ) )
1867- name = "float";
1868-
1869- name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
1870-
1871- var computedStyle = defaultView.getComputedStyle( elem, null );
1872-
1873- if ( computedStyle && !color( elem ) )
1874- ret = computedStyle.getPropertyValue( name );
1875-
1876- // If the element isn't reporting its values properly in Safari
1877- // then some display: none elements are involved
1878- else {
1879- var swap = [], stack = [], a = elem, i = 0;
1880-
1881- // Locate all of the parent display: none elements
1882- for ( ; a && color(a); a = a.parentNode )
1883- stack.unshift(a);
1884-
1885- // Go through and make them visible, but in reverse
1886- // (It would be better if we knew the exact display type that they had)
1887- for ( ; i < stack.length; i++ )
1888- if ( color( stack[ i ] ) ) {
1889- swap[ i ] = stack[ i ].style.display;
1890- stack[ i ].style.display = "block";
1891- }
1892-
1893- // Since we flip the display style, we have to handle that
1894- // one special, otherwise get the value
1895- ret = name == "display" && swap[ stack.length - 1 ] != null ?
1896- "none" :
1897- ( computedStyle && computedStyle.getPropertyValue( name ) ) || "";
1898-
1899- // Finally, revert the display styles back
1900- for ( i = 0; i < swap.length; i++ )
1901- if ( swap[ i ] != null )
1902- stack[ i ].style.display = swap[ i ];
1903- }
1904-
1905- // We should always get a number back from opacity
1906- if ( name == "opacity" && ret == "" )
1907- ret = "1";
1908-
1909- } else if ( elem.currentStyle ) {
1910- var camelCase = name.replace(/\-(\w)/g, function(all, letter){
1911- return letter.toUpperCase();
1912- });
1913-
1914- ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
1915-
1916- // From the awesome hack by Dean Edwards
1917- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
1918-
1919- // If we're not dealing with a regular pixel number
1920- // but a number that has a weird ending, we need to convert it to pixels
1921- if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
1922- // Remember the original values
1923- var left = style.left, rsLeft = elem.runtimeStyle.left;
1924-
1925- // Put in the new values to get a computed value out
1926- elem.runtimeStyle.left = elem.currentStyle.left;
1927- style.left = ret || 0;
1928- ret = style.pixelLeft + "px";
1929-
1930- // Revert the changed values
1931- style.left = left;
1932- elem.runtimeStyle.left = rsLeft;
1933- }
1934- }
1935-
1936- return ret;
1937- },
1938-
1939- clean: function( elems, context ) {
1940- var ret = [];
1941- context = context || document;
1942- // !context.createElement fails in IE with an error but returns typeof 'object'
1943- if (typeof context.createElement == 'undefined')
1944- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
1945-
1946- jQuery.each(elems, function(i, elem){
1947- if ( !elem )
1948- return;
1949-
1950- if ( elem.constructor == Number )
1951- elem += '';
1952-
1953- // Convert html string into DOM nodes
1954- if ( typeof elem == "string" ) {
1955- // Fix "XHTML"-style tags in all browsers
1956- elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
1957- return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
1958- all :
1959- front + "></" + tag + ">";
1960- });
1961-
1962- // Trim whitespace, otherwise indexOf won't work as expected
1963- var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div");
1964-
1965- var wrap =
1966- // option or optgroup
1967- !tags.indexOf("<opt") &&
1968- [ 1, "<select multiple='multiple'>", "</select>" ] ||
1969-
1970- !tags.indexOf("<leg") &&
1971- [ 1, "<fieldset>", "</fieldset>" ] ||
1972-
1973- tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
1974- [ 1, "<table>", "</table>" ] ||
1975-
1976- !tags.indexOf("<tr") &&
1977- [ 2, "<table><tbody>", "</tbody></table>" ] ||
1978-
1979- // <thead> matched above
1980- (!tags.indexOf("<td") || !tags.indexOf("<th")) &&
1981- [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
1982-
1983- !tags.indexOf("<col") &&
1984- [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
1985-
1986- // IE can't serialize <link> and <script> tags normally
1987- jQuery.browser.msie &&
1988- [ 1, "div<div>", "</div>" ] ||
1989-
1990- [ 0, "", "" ];
1991-
1992- // Go to html and back, then peel off extra wrappers
1993- div.innerHTML = wrap[1] + elem + wrap[2];
1994-
1995- // Move to the right depth
1996- while ( wrap[0]-- )
1997- div = div.lastChild;
1998-
1999- // Remove IE's autoinserted <tbody> from table fragments
2000- if ( jQuery.browser.msie ) {
2001-
2002- // String was a <table>, *may* have spurious <tbody>
2003- var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
2004- div.firstChild && div.firstChild.childNodes :
2005-
2006- // String was a bare <thead> or <tfoot>
2007- wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ?
2008- div.childNodes :
2009- [];
2010-
2011- for ( var j = tbody.length - 1; j >= 0 ; --j )
2012- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
2013- tbody[ j ].parentNode.removeChild( tbody[ j ] );
2014-
2015- // IE completely kills leading whitespace when innerHTML is used
2016- if ( /^\s/.test( elem ) )
2017- div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
2018-
2019- }
2020-
2021- elem = jQuery.makeArray( div.childNodes );
2022- }
2023-
2024- if ( elem.length === 0 && (!jQuery.nodeName( elem, "form" ) && !jQuery.nodeName( elem, "select" )) )
2025- return;
2026-
2027- if ( elem[0] == undefined || jQuery.nodeName( elem, "form" ) || elem.options )
2028- ret.push( elem );
2029-
2030- else
2031- ret = jQuery.merge( ret, elem );
2032-
2033- });
2034-
2035- return ret;
2036- },
2037-
2038- attr: function( elem, name, value ) {
2039- // don't set attributes on text and comment nodes
2040- if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
2041- return undefined;
2042-
2043- var notxml = !jQuery.isXMLDoc( elem ),
2044- // Whether we are setting (or getting)
2045- set = value !== undefined,
2046- msie = jQuery.browser.msie;
2047-
2048- // Try to normalize/fix the name
2049- name = notxml && jQuery.props[ name ] || name;
2050-
2051- // Only do all the following if this is a node (faster for style)
2052- // IE elem.getAttribute passes even for style
2053- if ( elem.tagName ) {
2054-
2055- // These attributes require special treatment
2056- var special = /href|src|style/.test( name );
2057-
2058- // Safari mis-reports the default selected property of a hidden option
2059- // Accessing the parent's selectedIndex property fixes it
2060- if ( name == "selected" && jQuery.browser.safari )
2061- elem.parentNode.selectedIndex;
2062-
2063- // If applicable, access the attribute via the DOM 0 way
2064- if ( name in elem && notxml && !special ) {
2065- if ( set ){
2066- // We can't allow the type property to be changed (since it causes problems in IE)
2067- if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
2068- throw "type property can't be changed";
2069-
2070- elem[ name ] = value;
2071- }
2072-
2073- // browsers index elements by id/name on forms, give priority to attributes.
2074- if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
2075- return elem.getAttributeNode( name ).nodeValue;
2076-
2077- return elem[ name ];
2078- }
2079-
2080- if ( msie && notxml && name == "style" )
2081- return jQuery.attr( elem.style, "cssText", value );
2082-
2083- if ( set )
2084- // convert the value to a string (all browsers do this but IE) see #1070
2085- elem.setAttribute( name, "" + value );
2086-
2087- var attr = msie && notxml && special
2088- // Some attributes require a special call on IE
2089- ? elem.getAttribute( name, 2 )
2090- : elem.getAttribute( name );
2091-
2092- // Non-existent attributes return null, we normalize to undefined
2093- return attr === null ? undefined : attr;
2094- }
2095-
2096- // elem is actually elem.style ... set the style
2097-
2098- // IE uses filters for opacity
2099- if ( msie && name == "opacity" ) {
2100- if ( set ) {
2101- // IE has trouble with opacity if it does not have layout
2102- // Force it by setting the zoom level
2103- elem.zoom = 1;
2104-
2105- // Set the alpha filter to set the opacity
2106- elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
2107- (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
2108- }
2109-
2110- return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
2111- (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
2112- "";
2113- }
2114-
2115- name = name.replace(/-([a-z])/ig, function(all, letter){
2116- return letter.toUpperCase();
2117- });
2118-
2119- if ( set )
2120- elem[ name ] = value;
2121-
2122- return elem[ name ];
2123- },
2124-
2125- trim: function( text ) {
2126- return (text || "").replace( /^\s+|\s+$/g, "" );
2127- },
2128-
2129- makeArray: function( array ) {
2130- var ret = [];
2131-
2132- if( array != null ){
2133- var i = array.length;
2134- //the window, strings and functions also have 'length'
2135- if( i == null || array.split || array.setInterval || array.call )
2136- ret[0] = array;
2137- else
2138- while( i )
2139- ret[--i] = array[i];
2140- }
2141-
2142- return ret;
2143- },
2144-
2145- inArray: function( elem, array ) {
2146- for ( var i = 0, length = array.length; i < length; i++ )
2147- // Use === because on IE, window == document
2148- if ( array[ i ] === elem )
2149- return i;
2150-
2151- return -1;
2152- },
2153-
2154- merge: function( first, second ) {
2155- // We have to loop this way because IE & Opera overwrite the length
2156- // expando of getElementsByTagName
2157- var i = 0, elem, pos = first.length;
2158- // Also, we need to make sure that the correct elements are being returned
2159- // (IE returns comment nodes in a '*' query)
2160- if ( jQuery.browser.msie ) {
2161- while ( elem = second[ i++ ] )
2162- if ( elem.nodeType != 8 )
2163- first[ pos++ ] = elem;
2164-
2165- } else
2166- while ( elem = second[ i++ ] )
2167- first[ pos++ ] = elem;
2168-
2169- return first;
2170- },
2171-
2172- unique: function( array ) {
2173- var ret = [], done = {};
2174-
2175- try {
2176-
2177- for ( var i = 0, length = array.length; i < length; i++ ) {
2178- var id = jQuery.data( array[ i ] );
2179-
2180- if ( !done[ id ] ) {
2181- done[ id ] = true;
2182- ret.push( array[ i ] );
2183- }
2184- }
2185-
2186- } catch( e ) {
2187- ret = array;
2188- }
2189-
2190- return ret;
2191- },
2192-
2193- grep: function( elems, callback, inv ) {
2194- var ret = [];
2195-
2196- // Go through the array, only saving the items
2197- // that pass the validator function
2198- for ( var i = 0, length = elems.length; i < length; i++ )
2199- if ( !inv != !callback( elems[ i ], i ) )
2200- ret.push( elems[ i ] );
2201-
2202- return ret;
2203- },
2204-
2205- map: function( elems, callback ) {
2206- var ret = [];
2207-
2208- // Go through the array, translating each of the items to their
2209- // new value (or values).
2210- for ( var i = 0, length = elems.length; i < length; i++ ) {
2211- var value = callback( elems[ i ], i );
2212-
2213- if ( value != null )
2214- ret[ ret.length ] = value;
2215- }
2216-
2217- return ret.concat.apply( [], ret );
2218- }
2219-});
2220-
2221-var userAgent = navigator.userAgent.toLowerCase();
2222-
2223-// Figure out what browser is being used
2224-jQuery.browser = {
2225- version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
2226- safari: /webkit/.test( userAgent ),
2227- opera: /opera/.test( userAgent ),
2228- msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
2229- mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
2230-};
2231-
2232-var styleFloat = jQuery.browser.msie ?
2233- "styleFloat" :
2234- "cssFloat";
2235-
2236-jQuery.extend({
2237- // Check to see if the W3C box model is being used
2238- boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat",
2239-
2240- props: {
2241- "for": "htmlFor",
2242- "class": "className",
2243- "float": styleFloat,
2244- cssFloat: styleFloat,
2245- styleFloat: styleFloat,
2246- readonly: "readOnly",
2247- maxlength: "maxLength",
2248- cellspacing: "cellSpacing"
2249- }
2250-});
2251-
2252-jQuery.each({
2253- parent: function(elem){return elem.parentNode;},
2254- parents: function(elem){return jQuery.dir(elem,"parentNode");},
2255- next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
2256- prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
2257- nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
2258- prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
2259- siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
2260- children: function(elem){return jQuery.sibling(elem.firstChild);},
2261- contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
2262-}, function(name, fn){
2263- jQuery.fn[ name ] = function( selector ) {
2264- var ret = jQuery.map( this, fn );
2265-
2266- if ( selector && typeof selector == "string" )
2267- ret = jQuery.multiFilter( selector, ret );
2268-
2269- return this.pushStack( jQuery.unique( ret ) );
2270- };
2271-});
2272-
2273-jQuery.each({
2274- appendTo: "append",
2275- prependTo: "prepend",
2276- insertBefore: "before",
2277- insertAfter: "after",
2278- replaceAll: "replaceWith"
2279-}, function(name, original){
2280- jQuery.fn[ name ] = function() {
2281- var args = arguments;
2282-
2283- return this.each(function(){
2284- for ( var i = 0, length = args.length; i < length; i++ )
2285- jQuery( args[ i ] )[ original ]( this );
2286- });
2287- };
2288-});
2289-
2290-jQuery.each({
2291- removeAttr: function( name ) {
2292- jQuery.attr( this, name, "" );
2293- if (this.nodeType == 1)
2294- this.removeAttribute( name );
2295- },
2296-
2297- addClass: function( classNames ) {
2298- jQuery.className.add( this, classNames );
2299- },
2300-
2301- removeClass: function( classNames ) {
2302- jQuery.className.remove( this, classNames );
2303- },
2304-
2305- toggleClass: function( classNames ) {
2306- jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames );
2307- },
2308-
2309- remove: function( selector ) {
2310- if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) {
2311- // Prevent memory leaks
2312- jQuery( "*", this ).add(this).each(function(){
2313- jQuery.event.remove(this);
2314- jQuery.removeData(this);
2315- });
2316- if (this.parentNode)
2317- this.parentNode.removeChild( this );
2318- }
2319- },
2320-
2321- empty: function() {
2322- // Remove element nodes and prevent memory leaks
2323- jQuery( ">*", this ).remove();
2324-
2325- // Remove any remaining nodes
2326- while ( this.firstChild )
2327- this.removeChild( this.firstChild );
2328- }
2329-}, function(name, fn){
2330- jQuery.fn[ name ] = function(){
2331- return this.each( fn, arguments );
2332- };
2333-});
2334-
2335-jQuery.each([ "Height", "Width" ], function(i, name){
2336- var type = name.toLowerCase();
2337-
2338- jQuery.fn[ type ] = function( size ) {
2339- // Get window width or height
2340- return this[0] == window ?
2341- // Opera reports document.body.client[Width/Height] properly in both quirks and standards
2342- jQuery.browser.opera && document.body[ "client" + name ] ||
2343-
2344- // Safari reports inner[Width/Height] just fine (Mozilla and Opera include scroll bar widths)
2345- jQuery.browser.safari && window[ "inner" + name ] ||
2346-
2347- // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
2348- document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
2349-
2350- // Get document width or height
2351- this[0] == document ?
2352- // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
2353- Math.max(
2354- Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]),
2355- Math.max(document.body["offset" + name], document.documentElement["offset" + name])
2356- ) :
2357-
2358- // Get or set width or height on the element
2359- size == undefined ?
2360- // Get width or height on the element
2361- (this.length ? jQuery.css( this[0], type ) : null) :
2362-
2363- // Set the width or height on the element (default to pixels if value is unitless)
2364- this.css( type, size.constructor == String ? size : size + "px" );
2365- };
2366-});
2367-
2368-// Helper function used by the dimensions and offset modules
2369-function num(elem, prop) {
2370- return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
2371-}var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
2372- "(?:[\\w*_-]|\\\\.)" :
2373- "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
2374- quickChild = new RegExp("^>\\s*(" + chars + "+)"),
2375- quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
2376- quickClass = new RegExp("^([#.]?)(" + chars + "*)");
2377-
2378-jQuery.extend({
2379- expr: {
2380- "": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
2381- "#": function(a,i,m){return a.getAttribute("id")==m[2];},
2382- ":": {
2383- // Position Checks
2384- lt: function(a,i,m){return i<m[3]-0;},
2385- gt: function(a,i,m){return i>m[3]-0;},
2386- nth: function(a,i,m){return m[3]-0==i;},
2387- eq: function(a,i,m){return m[3]-0==i;},
2388- first: function(a,i){return i==0;},
2389- last: function(a,i,m,r){return i==r.length-1;},
2390- even: function(a,i){return i%2==0;},
2391- odd: function(a,i){return i%2;},
2392-
2393- // Child Checks
2394- "first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},
2395- "last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},
2396- "only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},
2397-
2398- // Parent Checks
2399- parent: function(a){return a.firstChild;},
2400- empty: function(a){return !a.firstChild;},
2401-
2402- // Text Check
2403- contains: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},
2404-
2405- // Visibility
2406- visible: function(a){return "hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},
2407- hidden: function(a){return "hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},
2408-
2409- // Form attributes
2410- enabled: function(a){return !a.disabled;},
2411- disabled: function(a){return a.disabled;},
2412- checked: function(a){return a.checked;},
2413- selected: function(a){return a.selected||jQuery.attr(a,"selected");},
2414-
2415- // Form elements
2416- text: function(a){return "text"==a.type;},
2417- radio: function(a){return "radio"==a.type;},
2418- checkbox: function(a){return "checkbox"==a.type;},
2419- file: function(a){return "file"==a.type;},
2420- password: function(a){return "password"==a.type;},
2421- submit: function(a){return "submit"==a.type;},
2422- image: function(a){return "image"==a.type;},
2423- reset: function(a){return "reset"==a.type;},
2424- button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");},
2425- input: function(a){return /input|select|textarea|button/i.test(a.nodeName);},
2426-
2427- // :has()
2428- has: function(a,i,m){return jQuery.find(m[3],a).length;},
2429-
2430- // :header
2431- header: function(a){return /h\d/i.test(a.nodeName);},
2432-
2433- // :animated
2434- animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}
2435- }
2436- },
2437-
2438- // The regular expressions that power the parsing engine
2439- parse: [
2440- // Match: [@value='test'], [@foo]
2441- /^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,
2442-
2443- // Match: :contains('foo')
2444- /^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,
2445-
2446- // Match: :even, :last-child, #id, .class
2447- new RegExp("^([:.#]*)(" + chars + "+)")
2448- ],
2449-
2450- multiFilter: function( expr, elems, not ) {
2451- var old, cur = [];
2452-
2453- while ( expr && expr != old ) {
2454- old = expr;
2455- var f = jQuery.filter( expr, elems, not );
2456- expr = f.t.replace(/^\s*,\s*/, "" );
2457- cur = not ? elems = f.r : jQuery.merge( cur, f.r );
2458- }
2459-
2460- return cur;
2461- },
2462-
2463- find: function( t, context ) {
2464- // Quickly handle non-string expressions
2465- if ( typeof t != "string" )
2466- return [ t ];
2467-
2468- // check to make sure context is a DOM element or a document
2469- if ( context && context.nodeType != 1 && context.nodeType != 9)
2470- return [ ];
2471-
2472- // Set the correct context (if none is provided)
2473- context = context || document;
2474-
2475- // Initialize the search
2476- var ret = [context], done = [], last, nodeName;
2477-
2478- // Continue while a selector expression exists, and while
2479- // we're no longer looping upon ourselves
2480- while ( t && last != t ) {
2481- var r = [];
2482- last = t;
2483-
2484- t = jQuery.trim(t);
2485-
2486- var foundToken = false,
2487-
2488- // An attempt at speeding up child selectors that
2489- // point to a specific element tag
2490- re = quickChild,
2491-
2492- m = re.exec(t);
2493-
2494- if ( m ) {
2495- nodeName = m[1].toUpperCase();
2496-
2497- // Perform our own iteration and filter
2498- for ( var i = 0; ret[i]; i++ )
2499- for ( var c = ret[i].firstChild; c; c = c.nextSibling )
2500- if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) )
2501- r.push( c );
2502-
2503- ret = r;
2504- t = t.replace( re, "" );
2505- if ( t.indexOf(" ") == 0 ) continue;
2506- foundToken = true;
2507- } else {
2508- re = /^([>+~])\s*(\w*)/i;
2509-
2510- if ( (m = re.exec(t)) != null ) {
2511- r = [];
2512-
2513- var merge = {};
2514- nodeName = m[2].toUpperCase();
2515- m = m[1];
2516-
2517- for ( var j = 0, rl = ret.length; j < rl; j++ ) {
2518- var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild;
2519- for ( ; n; n = n.nextSibling )
2520- if ( n.nodeType == 1 ) {
2521- var id = jQuery.data(n);
2522-
2523- if ( m == "~" && merge[id] ) break;
2524-
2525- if (!nodeName || n.nodeName.toUpperCase() == nodeName ) {
2526- if ( m == "~" ) merge[id] = true;
2527- r.push( n );
2528- }
2529-
2530- if ( m == "+" ) break;
2531- }
2532- }
2533-
2534- ret = r;
2535-
2536- // And remove the token
2537- t = jQuery.trim( t.replace( re, "" ) );
2538- foundToken = true;
2539- }
2540- }
2541-
2542- // See if there's still an expression, and that we haven't already
2543- // matched a token
2544- if ( t && !foundToken ) {
2545- // Handle multiple expressions
2546- if ( !t.indexOf(",") ) {
2547- // Clean the result set
2548- if ( context == ret[0] ) ret.shift();
2549-
2550- // Merge the result sets
2551- done = jQuery.merge( done, ret );
2552-
2553- // Reset the context
2554- r = ret = [context];
2555-
2556- // Touch up the selector string
2557- t = " " + t.substr(1,t.length);
2558-
2559- } else {
2560- // Optimize for the case nodeName#idName
2561- var re2 = quickID;
2562- var m = re2.exec(t);
2563-
2564- // Re-organize the results, so that they're consistent
2565- if ( m ) {
2566- m = [ 0, m[2], m[3], m[1] ];
2567-
2568- } else {
2569- // Otherwise, do a traditional filter check for
2570- // ID, class, and element selectors
2571- re2 = quickClass;
2572- m = re2.exec(t);
2573- }
2574-
2575- m[2] = m[2].replace(/\\/g, "");
2576-
2577- var elem = ret[ret.length-1];
2578-
2579- // Try to do a global search by ID, where we can
2580- if ( m[1] == "#" && elem && elem.getElementById && !jQuery.isXMLDoc(elem) ) {
2581- // Optimization for HTML document case
2582- var oid = elem.getElementById(m[2]);
2583-
2584- // Do a quick check for the existence of the actual ID attribute
2585- // to avoid selecting by the name attribute in IE
2586- // also check to insure id is a string to avoid selecting an element with the name of 'id' inside a form
2587- if ( (jQuery.browser.msie||jQuery.browser.opera) && oid && typeof oid.id == "string" && oid.id != m[2] )
2588- oid = jQuery('[@id="'+m[2]+'"]', elem)[0];
2589-
2590- // Do a quick check for node name (where applicable) so
2591- // that div#foo searches will be really fast
2592- ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
2593- } else {
2594- // We need to find all descendant elements
2595- for ( var i = 0; ret[i]; i++ ) {
2596- // Grab the tag name being searched for
2597- var tag = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];
2598-
2599- // Handle IE7 being really dumb about <object>s
2600- if ( tag == "*" && ret[i].nodeName.toLowerCase() == "object" )
2601- tag = "param";
2602-
2603- r = jQuery.merge( r, ret[i].getElementsByTagName( tag ));
2604- }
2605-
2606- // It's faster to filter by class and be done with it
2607- if ( m[1] == "." )
2608- r = jQuery.classFilter( r, m[2] );
2609-
2610- // Same with ID filtering
2611- if ( m[1] == "#" ) {
2612- var tmp = [];
2613-
2614- // Try to find the element with the ID
2615- for ( var i = 0; r[i]; i++ )
2616- if ( r[i].getAttribute("id") == m[2] ) {
2617- tmp = [ r[i] ];
2618- break;
2619- }
2620-
2621- r = tmp;
2622- }
2623-
2624- ret = r;
2625- }
2626-
2627- t = t.replace( re2, "" );
2628- }
2629-
2630- }
2631-
2632- // If a selector string still exists
2633- if ( t ) {
2634- // Attempt to filter it
2635- var val = jQuery.filter(t,r);
2636- ret = r = val.r;
2637- t = jQuery.trim(val.t);
2638- }
2639- }
2640-
2641- // An error occurred with the selector;
2642- // just return an empty set instead
2643- if ( t )
2644- ret = [];
2645-
2646- // Remove the root context
2647- if ( ret && context == ret[0] )
2648- ret.shift();
2649-
2650- // And combine the results
2651- done = jQuery.merge( done, ret );
2652-
2653- return done;
2654- },
2655-
2656- classFilter: function(r,m,not){
2657- m = " " + m + " ";
2658- var tmp = [];
2659- for ( var i = 0; r[i]; i++ ) {
2660- var pass = (" " + r[i].className + " ").indexOf( m ) >= 0;
2661- if ( !not && pass || not && !pass )
2662- tmp.push( r[i] );
2663- }
2664- return tmp;
2665- },
2666-
2667- filter: function(t,r,not) {
2668- var last;
2669-
2670- // Look for common filter expressions
2671- while ( t && t != last ) {
2672- last = t;
2673-
2674- var p = jQuery.parse, m;
2675-
2676- for ( var i = 0; p[i]; i++ ) {
2677- m = p[i].exec( t );
2678-
2679- if ( m ) {
2680- // Remove what we just matched
2681- t = t.substring( m[0].length );
2682-
2683- m[2] = m[2].replace(/\\/g, "");
2684- break;
2685- }
2686- }
2687-
2688- if ( !m )
2689- break;
2690-
2691- // :not() is a special case that can be optimized by
2692- // keeping it out of the expression list
2693- if ( m[1] == ":" && m[2] == "not" )
2694- // optimize if only one selector found (most common case)
2695- r = isSimple.test( m[3] ) ?
2696- jQuery.filter(m[3], r, true).r :
2697- jQuery( r ).not( m[3] );
2698-
2699- // We can get a big speed boost by filtering by class here
2700- else if ( m[1] == "." )
2701- r = jQuery.classFilter(r, m[2], not);
2702-
2703- else if ( m[1] == "[" ) {
2704- var tmp = [], type = m[3];
2705-
2706- for ( var i = 0, rl = r.length; i < rl; i++ ) {
2707- var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];
2708-
2709- if ( z == null || /href|src|selected/.test(m[2]) )
2710- z = jQuery.attr(a,m[2]) || '';
2711-
2712- if ( (type == "" && !!z ||
2713- type == "=" && z == m[5] ||
2714- type == "!=" && z != m[5] ||
2715- type == "^=" && z && !z.indexOf(m[5]) ||
2716- type == "$=" && z.substr(z.length - m[5].length) == m[5] ||
2717- (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not )
2718- tmp.push( a );
2719- }
2720-
2721- r = tmp;
2722-
2723- // We can get a speed boost by handling nth-child here
2724- } else if ( m[1] == ":" && m[2] == "nth-child" ) {
2725- var merge = {}, tmp = [],
2726- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
2727- test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
2728- m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||
2729- !/\D/.test(m[3]) && "0n+" + m[3] || m[3]),
2730- // calculate the numbers (first)n+(last) including if they are negative
2731- first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
2732-
2733- // loop through all the elements left in the jQuery object
2734- for ( var i = 0, rl = r.length; i < rl; i++ ) {
2735- var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);
2736-
2737- if ( !merge[id] ) {
2738- var c = 1;
2739-
2740- for ( var n = parentNode.firstChild; n; n = n.nextSibling )
2741- if ( n.nodeType == 1 )
2742- n.nodeIndex = c++;
2743-
2744- merge[id] = true;
2745- }
2746-
2747- var add = false;
2748-
2749- if ( first == 0 ) {
2750- if ( node.nodeIndex == last )
2751- add = true;
2752- } else if ( (node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0 )
2753- add = true;
2754-
2755- if ( add ^ not )
2756- tmp.push( node );
2757- }
2758-
2759- r = tmp;
2760-
2761- // Otherwise, find the expression to execute
2762- } else {
2763- var fn = jQuery.expr[ m[1] ];
2764- if ( typeof fn == "object" )
2765- fn = fn[ m[2] ];
2766-
2767- if ( typeof fn == "string" )
2768- fn = eval("false||function(a,i){return " + fn + ";}");
2769-
2770- // Execute it against the current filter
2771- r = jQuery.grep( r, function(elem, i){
2772- return fn(elem, i, m, r);
2773- }, not );
2774- }
2775- }
2776-
2777- // Return an array of filtered elements (r)
2778- // and the modified expression string (t)
2779- return { r: r, t: t };
2780- },
2781-
2782- dir: function( elem, dir ){
2783- var matched = [],
2784- cur = elem[dir];
2785- while ( cur && cur != document ) {
2786- if ( cur.nodeType == 1 )
2787- matched.push( cur );
2788- cur = cur[dir];
2789- }
2790- return matched;
2791- },
2792-
2793- nth: function(cur,result,dir,elem){
2794- result = result || 1;
2795- var num = 0;
2796-
2797- for ( ; cur; cur = cur[dir] )
2798- if ( cur.nodeType == 1 && ++num == result )
2799- break;
2800-
2801- return cur;
2802- },
2803-
2804- sibling: function( n, elem ) {
2805- var r = [];
2806-
2807- for ( ; n; n = n.nextSibling ) {
2808- if ( n.nodeType == 1 && n != elem )
2809- r.push( n );
2810- }
2811-
2812- return r;
2813- }
2814-});
2815-/*
2816- * A number of helper functions used for managing events.
2817- * Many of the ideas behind this code orignated from
2818- * Dean Edwards' addEvent library.
2819- */
2820-jQuery.event = {
2821-
2822- // Bind an event to an element
2823- // Original by Dean Edwards
2824- add: function(elem, types, handler, data) {
2825- if ( elem.nodeType == 3 || elem.nodeType == 8 )
2826- return;
2827-
2828- // For whatever reason, IE has trouble passing the window object
2829- // around, causing it to be cloned in the process
2830- if ( jQuery.browser.msie && elem.setInterval )
2831- elem = window;
2832-
2833- // Make sure that the function being executed has a unique ID
2834- if ( !handler.guid )
2835- handler.guid = this.guid++;
2836-
2837- // if data is passed, bind to handler
2838- if( data != undefined ) {
2839- // Create temporary function pointer to original handler
2840- var fn = handler;
2841-
2842- // Create unique handler function, wrapped around original handler
2843- handler = this.proxy( fn, function() {
2844- // Pass arguments and context to original handler
2845- return fn.apply(this, arguments);
2846- });
2847-
2848- // Store data in unique handler
2849- handler.data = data;
2850- }
2851-
2852- // Init the element's event structure
2853- var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
2854- handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
2855- // Handle the second event of a trigger and when
2856- // an event is called after a page has unloaded
2857- if ( typeof jQuery != "undefined" && !jQuery.event.triggered )
2858- return jQuery.event.handle.apply(arguments.callee.elem, arguments);
2859- });
2860- // Add elem as a property of the handle function
2861- // This is to prevent a memory leak with non-native
2862- // event in IE.
2863- handle.elem = elem;
2864-
2865- // Handle multiple events separated by a space
2866- // jQuery(...).bind("mouseover mouseout", fn);
2867- jQuery.each(types.split(/\s+/), function(index, type) {
2868- // Namespaced event handlers
2869- var parts = type.split(".");
2870- type = parts[0];
2871- handler.type = parts[1];
2872-
2873- // Get the current list of functions bound to this event
2874- var handlers = events[type];
2875-
2876- // Init the event handler queue
2877- if (!handlers) {
2878- handlers = events[type] = {};
2879-
2880- // Check for a special event handler
2881- // Only use addEventListener/attachEvent if the special
2882- // events handler returns false
2883- if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) {
2884- // Bind the global event handler to the element
2885- if (elem.addEventListener)
2886- elem.addEventListener(type, handle, false);
2887- else if (elem.attachEvent)
2888- elem.attachEvent("on" + type, handle);
2889- }
2890- }
2891-
2892- // Add the function to the element's handler list
2893- handlers[handler.guid] = handler;
2894-
2895- // Keep track of which events have been used, for global triggering
2896- jQuery.event.global[type] = true;
2897- });
2898-
2899- // Nullify elem to prevent memory leaks in IE
2900- elem = null;
2901- },
2902-
2903- guid: 1,
2904- global: {},
2905-
2906- // Detach an event or set of events from an element
2907- remove: function(elem, types, handler) {
2908- // don't do events on text and comment nodes
2909- if ( elem.nodeType == 3 || elem.nodeType == 8 )
2910- return;
2911-
2912- var events = jQuery.data(elem, "events"), ret, index;
2913-
2914- if ( events ) {
2915- // Unbind all events for the element
2916- if ( types == undefined || (typeof types == "string" && types.charAt(0) == ".") )
2917- for ( var type in events )
2918- this.remove( elem, type + (types || "") );
2919- else {
2920- // types is actually an event object here
2921- if ( types.type ) {
2922- handler = types.handler;
2923- types = types.type;
2924- }
2925-
2926- // Handle multiple events seperated by a space
2927- // jQuery(...).unbind("mouseover mouseout", fn);
2928- jQuery.each(types.split(/\s+/), function(index, type){
2929- // Namespaced event handlers
2930- var parts = type.split(".");
2931- type = parts[0];
2932-
2933- if ( events[type] ) {
2934- // remove the given handler for the given type
2935- if ( handler )
2936- delete events[type][handler.guid];
2937-
2938- // remove all handlers for the given type
2939- else
2940- for ( handler in events[type] )
2941- // Handle the removal of namespaced events
2942- if ( !parts[1] || events[type][handler].type == parts[1] )
2943- delete events[type][handler];
2944-
2945- // remove generic event handler if no more handlers exist
2946- for ( ret in events[type] ) break;
2947- if ( !ret ) {
2948- if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) {
2949- if (elem.removeEventListener)
2950- elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
2951- else if (elem.detachEvent)
2952- elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
2953- }
2954- ret = null;
2955- delete events[type];
2956- }
2957- }
2958- });
2959- }
2960-
2961- // Remove the expando if it's no longer used
2962- for ( ret in events ) break;
2963- if ( !ret ) {
2964- var handle = jQuery.data( elem, "handle" );
2965- if ( handle ) handle.elem = null;
2966- jQuery.removeData( elem, "events" );
2967- jQuery.removeData( elem, "handle" );
2968- }
2969- }
2970- },
2971-
2972- trigger: function(type, data, elem, donative, extra) {
2973- // Clone the incoming data, if any
2974- data = jQuery.makeArray(data);
2975-
2976- if ( type.indexOf("!") >= 0 ) {
2977- type = type.slice(0, -1);
2978- var exclusive = true;
2979- }
2980-
2981- // Handle a global trigger
2982- if ( !elem ) {
2983- // Only trigger if we've ever bound an event for it
2984- if ( this.global[type] )
2985- jQuery("*").add([window, document]).trigger(type, data);
2986-
2987- // Handle triggering a single element
2988- } else {
2989- // don't do events on text and comment nodes
2990- if ( elem.nodeType == 3 || elem.nodeType == 8 )
2991- return undefined;
2992-
2993- var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
2994- // Check to see if we need to provide a fake event, or not
2995- event = !data[0] || !data[0].preventDefault;
2996-
2997- // Pass along a fake event
2998- if ( event ) {
2999- data.unshift({
3000- type: type,
3001- target: elem,
3002- preventDefault: function(){},
3003- stopPropagation: function(){},
3004- timeStamp: now()
3005- });
3006- data[0][expando] = true; // no need to fix fake event
3007- }
3008-
3009- // Enforce the right trigger type
3010- data[0].type = type;
3011- if ( exclusive )
3012- data[0].exclusive = true;
3013-
3014- // Trigger the event, it is assumed that "handle" is a function
3015- var handle = jQuery.data(elem, "handle");
3016- if ( handle )
3017- val = handle.apply( elem, data );
3018-
3019- // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
3020- if ( (!fn || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
3021- val = false;
3022-
3023- // Extra functions don't get the custom event object
3024- if ( event )
3025- data.shift();
3026-
3027- // Handle triggering of extra function
3028- if ( extra && jQuery.isFunction( extra ) ) {
3029- // call the extra function and tack the current return value on the end for possible inspection
3030- ret = extra.apply( elem, val == null ? data : data.concat( val ) );
3031- // if anything is returned, give it precedence and have it overwrite the previous value
3032- if (ret !== undefined)
3033- val = ret;
3034- }
3035-
3036- // Trigger the native events (except for clicks on links)
3037- if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
3038- this.triggered = true;
3039- try {
3040- elem[ type ]();
3041- // prevent IE from throwing an error for some hidden elements
3042- } catch (e) {}
3043- }
3044-
3045- this.triggered = false;
3046- }
3047-
3048- return val;
3049- },
3050-
3051- handle: function(event) {
3052- // returned undefined or false
3053- var val, ret, namespace, all, handlers;
3054-
3055- event = arguments[0] = jQuery.event.fix( event || window.event );
3056-
3057- // Namespaced event handlers
3058- namespace = event.type.split(".");
3059- event.type = namespace[0];
3060- namespace = namespace[1];
3061- // Cache this now, all = true means, any handler
3062- all = !namespace && !event.exclusive;
3063-
3064- handlers = ( jQuery.data(this, "events") || {} )[event.type];
3065-
3066- for ( var j in handlers ) {
3067- var handler = handlers[j];
3068-
3069- // Filter the functions by class
3070- if ( all || handler.type == namespace ) {
3071- // Pass in a reference to the handler function itself
3072- // So that we can later remove it
3073- event.handler = handler;
3074- event.data = handler.data;
3075-
3076- ret = handler.apply( this, arguments );
3077-
3078- if ( val !== false )
3079- val = ret;
3080-
3081- if ( ret === false ) {
3082- event.preventDefault();
3083- event.stopPropagation();
3084- }
3085- }
3086- }
3087-
3088- return val;
3089- },
3090-
3091- fix: function(event) {
3092- if ( event[expando] == true )
3093- return event;
3094-
3095- // store a copy of the original event object
3096- // and "clone" to set read-only properties
3097- var originalEvent = event;
3098- event = { originalEvent: originalEvent };
3099- var props = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");
3100- for ( var i=props.length; i; i-- )
3101- event[ props[i] ] = originalEvent[ props[i] ];
3102-
3103- // Mark it as fixed
3104- event[expando] = true;
3105-
3106- // add preventDefault and stopPropagation since
3107- // they will not work on the clone
3108- event.preventDefault = function() {
3109- // if preventDefault exists run it on the original event
3110- if (originalEvent.preventDefault)
3111- originalEvent.preventDefault();
3112- // otherwise set the returnValue property of the original event to false (IE)
3113- originalEvent.returnValue = false;
3114- };
3115- event.stopPropagation = function() {
3116- // if stopPropagation exists run it on the original event
3117- if (originalEvent.stopPropagation)
3118- originalEvent.stopPropagation();
3119- // otherwise set the cancelBubble property of the original event to true (IE)
3120- originalEvent.cancelBubble = true;
3121- };
3122-
3123- // Fix timeStamp
3124- event.timeStamp = event.timeStamp || now();
3125-
3126- // Fix target property, if necessary
3127- if ( !event.target )
3128- event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
3129-
3130- // check if target is a textnode (safari)
3131- if ( event.target.nodeType == 3 )
3132- event.target = event.target.parentNode;
3133-
3134- // Add relatedTarget, if necessary
3135- if ( !event.relatedTarget && event.fromElement )
3136- event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
3137-
3138- // Calculate pageX/Y if missing and clientX/Y available
3139- if ( event.pageX == null && event.clientX != null ) {
3140- var doc = document.documentElement, body = document.body;
3141- event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
3142- event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
3143- }
3144-
3145- // Add which for key events
3146- if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
3147- event.which = event.charCode || event.keyCode;
3148-
3149- // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
3150- if ( !event.metaKey && event.ctrlKey )
3151- event.metaKey = event.ctrlKey;
3152-
3153- // Add which for click: 1 == left; 2 == middle; 3 == right
3154- // Note: button is not normalized, so don't use it
3155- if ( !event.which && event.button )
3156- event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
3157-
3158- return event;
3159- },
3160-
3161- proxy: function( fn, proxy ){
3162- // Set the guid of unique handler to the same of original handler, so it can be removed
3163- proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
3164- // So proxy can be declared as an argument
3165- return proxy;
3166- },
3167-
3168- special: {
3169- ready: {
3170- setup: function() {
3171- // Make sure the ready event is setup
3172- bindReady();
3173- return;
3174- },
3175-
3176- teardown: function() { return; }
3177- },
3178-
3179- mouseenter: {
3180- setup: function() {
3181- if ( jQuery.browser.msie ) return false;
3182- jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler);
3183- return true;
3184- },
3185-
3186- teardown: function() {
3187- if ( jQuery.browser.msie ) return false;
3188- jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler);
3189- return true;
3190- },
3191-
3192- handler: function(event) {
3193- // If we actually just moused on to a sub-element, ignore it
3194- if ( withinElement(event, this) ) return true;
3195- // Execute the right handlers by setting the event type to mouseenter
3196- event.type = "mouseenter";
3197- return jQuery.event.handle.apply(this, arguments);
3198- }
3199- },
3200-
3201- mouseleave: {
3202- setup: function() {
3203- if ( jQuery.browser.msie ) return false;
3204- jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler);
3205- return true;
3206- },
3207-
3208- teardown: function() {
3209- if ( jQuery.browser.msie ) return false;
3210- jQuery(this).unbind("mouseout", jQuery.event.special.mouseleave.handler);
3211- return true;
3212- },
3213-
3214- handler: function(event) {
3215- // If we actually just moused on to a sub-element, ignore it
3216- if ( withinElement(event, this) ) return true;
3217- // Execute the right handlers by setting the event type to mouseleave
3218- event.type = "mouseleave";
3219- return jQuery.event.handle.apply(this, arguments);
3220- }
3221- }
3222- }
3223-};
3224-
3225-jQuery.fn.extend({
3226- bind: function( type, data, fn ) {
3227- return type == "unload" ? this.one(type, data, fn) : this.each(function(){
3228- jQuery.event.add( this, type, fn || data, fn && data );
3229- });
3230- },
3231-
3232- one: function( type, data, fn ) {
3233- var one = jQuery.event.proxy( fn || data, function(event) {
3234- jQuery(this).unbind(event, one);
3235- return (fn || data).apply( this, arguments );
3236- });
3237- return this.each(function(){
3238- jQuery.event.add( this, type, one, fn && data);
3239- });
3240- },
3241-
3242- unbind: function( type, fn ) {
3243- return this.each(function(){
3244- jQuery.event.remove( this, type, fn );
3245- });
3246- },
3247-
3248- trigger: function( type, data, fn ) {
3249- return this.each(function(){
3250- jQuery.event.trigger( type, data, this, true, fn );
3251- });
3252- },
3253-
3254- triggerHandler: function( type, data, fn ) {
3255- return this[0] && jQuery.event.trigger( type, data, this[0], false, fn );
3256- },
3257-
3258- toggle: function( fn ) {
3259- // Save reference to arguments for access in closure
3260- var args = arguments, i = 1;
3261-
3262- // link all the functions, so any of them can unbind this click handler
3263- while( i < args.length )
3264- jQuery.event.proxy( fn, args[i++] );
3265-
3266- return this.click( jQuery.event.proxy( fn, function(event) {
3267- // Figure out which function to execute
3268- this.lastToggle = ( this.lastToggle || 0 ) % i;
3269-
3270- // Make sure that clicks stop
3271- event.preventDefault();
3272-
3273- // and execute the function
3274- return args[ this.lastToggle++ ].apply( this, arguments ) || false;
3275- }));
3276- },
3277-
3278- hover: function(fnOver, fnOut) {
3279- return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);
3280- },
3281-
3282- ready: function(fn) {
3283- // Attach the listeners
3284- bindReady();
3285-
3286- // If the DOM is already ready
3287- if ( jQuery.isReady )
3288- // Execute the function immediately
3289- fn.call( document, jQuery );
3290-
3291- // Otherwise, remember the function for later
3292- else
3293- // Add the function to the wait list
3294- jQuery.readyList.push( function() { return fn.call(this, jQuery); } );
3295-
3296- return this;
3297- }
3298-});
3299-
3300-jQuery.extend({
3301- isReady: false,
3302- readyList: [],
3303- // Handle when the DOM is ready
3304- ready: function() {
3305- // Make sure that the DOM is not already loaded
3306- if ( !jQuery.isReady ) {
3307- // Remember that the DOM is ready
3308- jQuery.isReady = true;
3309-
3310- // If there are functions bound, to execute
3311- if ( jQuery.readyList ) {
3312- // Execute all of them
3313- jQuery.each( jQuery.readyList, function(){
3314- this.call( document );
3315- });
3316-
3317- // Reset the list of functions
3318- jQuery.readyList = null;
3319- }
3320-
3321- // Trigger any bound ready events
3322- jQuery(document).triggerHandler("ready");
3323- }
3324- }
3325-});
3326-
3327-var readyBound = false;
3328-
3329-function bindReady(){
3330- if ( readyBound ) return;
3331- readyBound = true;
3332-
3333- // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
3334- if ( document.addEventListener && !jQuery.browser.opera)
3335- // Use the handy event callback
3336- document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
3337-
3338- // If IE is used and is not in a frame
3339- // Continually check to see if the document is ready
3340- if ( jQuery.browser.msie && window == top ) (function(){
3341- if (jQuery.isReady) return;
3342- try {
3343- // If IE is used, use the trick by Diego Perini
3344- // http://javascript.nwbox.com/IEContentLoaded/
3345- document.documentElement.doScroll("left");
3346- } catch( error ) {
3347- setTimeout( arguments.callee, 0 );
3348- return;
3349- }
3350- // and execute any waiting functions
3351- jQuery.ready();
3352- })();
3353-
3354- if ( jQuery.browser.opera )
3355- document.addEventListener( "DOMContentLoaded", function () {
3356- if (jQuery.isReady) return;
3357- for (var i = 0; i < document.styleSheets.length; i++)
3358- if (document.styleSheets[i].disabled) {
3359- setTimeout( arguments.callee, 0 );
3360- return;
3361- }
3362- // and execute any waiting functions
3363- jQuery.ready();
3364- }, false);
3365-
3366- if ( jQuery.browser.safari ) {
3367- var numStyles;
3368- (function(){
3369- if (jQuery.isReady) return;
3370- if ( document.readyState != "loaded" && document.readyState != "complete" ) {
3371- setTimeout( arguments.callee, 0 );
3372- return;
3373- }
3374- if ( numStyles === undefined )
3375- numStyles = jQuery("style, link[rel=stylesheet]").length;
3376- if ( document.styleSheets.length != numStyles ) {
3377- setTimeout( arguments.callee, 0 );
3378- return;
3379- }
3380- // and execute any waiting functions
3381- jQuery.ready();
3382- })();
3383- }
3384-
3385- // A fallback to window.onload, that will always work
3386- jQuery.event.add( window, "load", jQuery.ready );
3387-}
3388-
3389-jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
3390- "mousedown,mouseup,mousemove,mouseover,mouseout,change,select," +
3391- "submit,keydown,keypress,keyup,error").split(","), function(i, name){
3392-
3393- // Handle event binding
3394- jQuery.fn[name] = function(fn){
3395- return fn ? this.bind(name, fn) : this.trigger(name);
3396- };
3397-});
3398-
3399-// Checks if an event happened on an element within another element
3400-// Used in jQuery.event.special.mouseenter and mouseleave handlers
3401-var withinElement = function(event, elem) {
3402- // Check if mouse(over|out) are still within the same parent element
3403- var parent = event.relatedTarget;
3404- // Traverse up the tree
3405- while ( parent && parent != elem ) try { parent = parent.parentNode; } catch(error) { parent = elem; }
3406- // Return true if we actually just moused on to a sub-element
3407- return parent == elem;
3408-};
3409-
3410-// Prevent memory leaks in IE
3411-// And prevent errors on refresh with events like mouseover in other browsers
3412-// Window isn't included so as not to unbind existing unload events
3413-jQuery(window).bind("unload", function() {
3414- jQuery("*").add(document).unbind();
3415-});
3416-jQuery.fn.extend({
3417- // Keep a copy of the old load
3418- _load: jQuery.fn.load,
3419-
3420- load: function( url, params, callback ) {
3421- if ( typeof url != 'string' )
3422- return this._load( url );
3423-
3424- var off = url.indexOf(" ");
3425- if ( off >= 0 ) {
3426- var selector = url.slice(off, url.length);
3427- url = url.slice(0, off);
3428- }
3429-
3430- callback = callback || function(){};
3431-
3432- // Default to a GET request
3433- var type = "GET";
3434-
3435- // If the second parameter was provided
3436- if ( params )
3437- // If it's a function
3438- if ( jQuery.isFunction( params ) ) {
3439- // We assume that it's the callback
3440- callback = params;
3441- params = null;
3442-
3443- // Otherwise, build a param string
3444- } else {
3445- params = jQuery.param( params );
3446- type = "POST";
3447- }
3448-
3449- var self = this;
3450-
3451- // Request the remote document
3452- jQuery.ajax({
3453- url: url,
3454- type: type,
3455- dataType: "html",
3456- data: params,
3457- complete: function(res, status){
3458- // If successful, inject the HTML into all the matched elements
3459- if ( status == "success" || status == "notmodified" )
3460- // See if a selector was specified
3461- self.html( selector ?
3462- // Create a dummy div to hold the results
3463- jQuery("<div/>")
3464- // inject the contents of the document in, removing the scripts
3465- // to avoid any 'Permission Denied' errors in IE
3466- .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
3467-
3468- // Locate the specified elements
3469- .find(selector) :
3470-
3471- // If not, just inject the full result
3472- res.responseText );
3473-
3474- self.each( callback, [res.responseText, status, res] );
3475- }
3476- });
3477- return this;
3478- },
3479-
3480- serialize: function() {
3481- return jQuery.param(this.serializeArray());
3482- },
3483- serializeArray: function() {
3484- return this.map(function(){
3485- return jQuery.nodeName(this, "form") ?
3486- jQuery.makeArray(this.elements) : this;
3487- })
3488- .filter(function(){
3489- return this.name && !this.disabled &&
3490- (this.checked || /select|textarea/i.test(this.nodeName) ||
3491- /text|hidden|password/i.test(this.type));
3492- })
3493- .map(function(i, elem){
3494- var val = jQuery(this).val();
3495- return val == null ? null :
3496- val.constructor == Array ?
3497- jQuery.map( val, function(val, i){
3498- return {name: elem.name, value: val};
3499- }) :
3500- {name: elem.name, value: val};
3501- }).get();
3502- }
3503-});
3504-
3505-// Attach a bunch of functions for handling common AJAX events
3506-jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
3507- jQuery.fn[o] = function(f){
3508- return this.bind(o, f);
3509- };
3510-});
3511-
3512-var jsc = now();
3513-
3514-jQuery.extend({
3515- get: function( url, data, callback, type ) {
3516- // shift arguments if data argument was ommited
3517- if ( jQuery.isFunction( data ) ) {
3518- callback = data;
3519- data = null;
3520- }
3521-
3522- return jQuery.ajax({
3523- type: "GET",
3524- url: url,
3525- data: data,
3526- success: callback,
3527- dataType: type
3528- });
3529- },
3530-
3531- getScript: function( url, callback ) {
3532- return jQuery.get(url, null, callback, "script");
3533- },
3534-
3535- getJSON: function( url, data, callback ) {
3536- return jQuery.get(url, data, callback, "json");
3537- },
3538-
3539- post: function( url, data, callback, type ) {
3540- if ( jQuery.isFunction( data ) ) {
3541- callback = data;
3542- data = {};
3543- }
3544-
3545- return jQuery.ajax({
3546- type: "POST",
3547- url: url,
3548- data: data,
3549- success: callback,
3550- dataType: type
3551- });
3552- },
3553-
3554- ajaxSetup: function( settings ) {
3555- jQuery.extend( jQuery.ajaxSettings, settings );
3556- },
3557-
3558- ajaxSettings: {
3559- url: location.href,
3560- global: true,
3561- type: "GET",
3562- timeout: 0,
3563- contentType: "application/x-www-form-urlencoded",
3564- processData: true,
3565- async: true,
3566- data: null,
3567- username: null,
3568- password: null,
3569- accepts: {
3570- xml: "application/xml, text/xml",
3571- html: "text/html",
3572- script: "text/javascript, application/javascript",
3573- json: "application/json, text/javascript",
3574- text: "text/plain",
3575- _default: "*/*"
3576- }
3577- },
3578-
3579- // Last-Modified header cache for next request
3580- lastModified: {},
3581-
3582- ajax: function( s ) {
3583- // Extend the settings, but re-extend 's' so that it can be
3584- // checked again later (in the test suite, specifically)
3585- s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
3586-
3587- var jsonp, jsre = /=\?(&|$)/g, status, data,
3588- type = s.type.toUpperCase();
3589-
3590- // convert data if not already a string
3591- if ( s.data && s.processData && typeof s.data != "string" )
3592- s.data = jQuery.param(s.data);
3593-
3594- // Handle JSONP Parameter Callbacks
3595- if ( s.dataType == "jsonp" ) {
3596- if ( type == "GET" ) {
3597- if ( !s.url.match(jsre) )
3598- s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
3599- } else if ( !s.data || !s.data.match(jsre) )
3600- s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
3601- s.dataType = "json";
3602- }
3603-
3604- // Build temporary JSONP function
3605- if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
3606- jsonp = "jsonp" + jsc++;
3607-
3608- // Replace the =? sequence both in the query string and the data
3609- if ( s.data )
3610- s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
3611- s.url = s.url.replace(jsre, "=" + jsonp + "$1");
3612-
3613- // We need to make sure
3614- // that a JSONP style response is executed properly
3615- s.dataType = "script";
3616-
3617- // Handle JSONP-style loading
3618- window[ jsonp ] = function(tmp){
3619- data = tmp;
3620- success();
3621- complete();
3622- // Garbage collect
3623- window[ jsonp ] = undefined;
3624- try{ delete window[ jsonp ]; } catch(e){}
3625- if ( head )
3626- head.removeChild( script );
3627- };
3628- }
3629-
3630- if ( s.dataType == "script" && s.cache == null )
3631- s.cache = false;
3632-
3633- if ( s.cache === false && type == "GET" ) {
3634- var ts = now();
3635- // try replacing _= if it is there
3636- var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
3637- // if nothing was replaced, add timestamp to the end
3638- s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
3639- }
3640-
3641- // If data is available, append data to url for get requests
3642- if ( s.data && type == "GET" ) {
3643- s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
3644-
3645- // IE likes to send both get and post data, prevent this
3646- s.data = null;
3647- }
3648-
3649- // Watch for a new set of requests
3650- if ( s.global && ! jQuery.active++ )
3651- jQuery.event.trigger( "ajaxStart" );
3652-
3653- // Matches an absolute URL, and saves the domain
3654- var remote = /^(?:\w+:)?\/\/([^\/?#]+)/;
3655-
3656- // If we're requesting a remote document
3657- // and trying to load JSON or Script with a GET
3658- if ( s.dataType == "script" && type == "GET"
3659- && remote.test(s.url) && remote.exec(s.url)[1] != location.host ){
3660- var head = document.getElementsByTagName("head")[0];
3661- var script = document.createElement("script");
3662- script.src = s.url;
3663- if (s.scriptCharset)
3664- script.charset = s.scriptCharset;
3665-
3666- // Handle Script loading
3667- if ( !jsonp ) {
3668- var done = false;
3669-
3670- // Attach handlers for all browsers
3671- script.onload = script.onreadystatechange = function(){
3672- if ( !done && (!this.readyState ||
3673- this.readyState == "loaded" || this.readyState == "complete") ) {
3674- done = true;
3675- success();
3676- complete();
3677- head.removeChild( script );
3678- }
3679- };
3680- }
3681-
3682- head.appendChild(script);
3683-
3684- // We handle everything using the script element injection
3685- return undefined;
3686- }
3687-
3688- var requestDone = false;
3689-
3690- // Create the request object; Microsoft failed to properly
3691- // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
3692- var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
3693-
3694- // Open the socket
3695- // Passing null username, generates a login popup on Opera (#2865)
3696- if( s.username )
3697- xhr.open(type, s.url, s.async, s.username, s.password);
3698- else
3699- xhr.open(type, s.url, s.async);
3700-
3701- // Need an extra try/catch for cross domain requests in Firefox 3
3702- try {
3703- // Set the correct header, if data is being sent
3704- if ( s.data )
3705- xhr.setRequestHeader("Content-Type", s.contentType);
3706-
3707- // Set the If-Modified-Since header, if ifModified mode.
3708- if ( s.ifModified )
3709- xhr.setRequestHeader("If-Modified-Since",
3710- jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
3711-
3712- // Set header so the called script knows that it's an XMLHttpRequest
3713- xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
3714-
3715- // Set the Accepts header for the server, depending on the dataType
3716- xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
3717- s.accepts[ s.dataType ] + ", */*" :
3718- s.accepts._default );
3719- } catch(e){}
3720-
3721- // Allow custom headers/mimetypes
3722- if ( s.beforeSend && s.beforeSend(xhr, s) === false ) {
3723- // cleanup active request counter
3724- s.global && jQuery.active--;
3725- // close opended socket
3726- xhr.abort();
3727- return false;
3728- }
3729-
3730- if ( s.global )
3731- jQuery.event.trigger("ajaxSend", [xhr, s]);
3732-
3733- // Wait for a response to come back
3734- var onreadystatechange = function(isTimeout){
3735- // The transfer is complete and the data is available, or the request timed out
3736- if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {
3737- requestDone = true;
3738-
3739- // clear poll interval
3740- if (ival) {
3741- clearInterval(ival);
3742- ival = null;
3743- }
3744-
3745- status = isTimeout == "timeout" && "timeout" ||
3746- !jQuery.httpSuccess( xhr ) && "error" ||
3747- s.ifModified && jQuery.httpNotModified( xhr, s.url ) && "notmodified" ||
3748- "success";
3749-
3750- if ( status == "success" ) {
3751- // Watch for, and catch, XML document parse errors
3752- try {
3753- // process the data (runs the xml through httpData regardless of callback)
3754- data = jQuery.httpData( xhr, s.dataType, s.dataFilter );
3755- } catch(e) {
3756- status = "parsererror";
3757- }
3758- }
3759-
3760- // Make sure that the request was successful or notmodified
3761- if ( status == "success" ) {
3762- // Cache Last-Modified header, if ifModified mode.
3763- var modRes;
3764- try {
3765- modRes = xhr.getResponseHeader("Last-Modified");
3766- } catch(e) {} // swallow exception thrown by FF if header is not available
3767-
3768- if ( s.ifModified && modRes )
3769- jQuery.lastModified[s.url] = modRes;
3770-
3771- // JSONP handles its own success callback
3772- if ( !jsonp )
3773- success();
3774- } else
3775- jQuery.handleError(s, xhr, status);
3776-
3777- // Fire the complete handlers
3778- complete();
3779-
3780- // Stop memory leaks
3781- if ( s.async )
3782- xhr = null;
3783- }
3784- };
3785-
3786- if ( s.async ) {
3787- // don't attach the handler to the request, just poll it instead
3788- var ival = setInterval(onreadystatechange, 13);
3789-
3790- // Timeout checker
3791- if ( s.timeout > 0 )
3792- setTimeout(function(){
3793- // Check to see if the request is still happening
3794- if ( xhr ) {
3795- // Cancel the request
3796- xhr.abort();
3797-
3798- if( !requestDone )
3799- onreadystatechange( "timeout" );
3800- }
3801- }, s.timeout);
3802- }
3803-
3804- // Send the data
3805- try {
3806- xhr.send(s.data);
3807- } catch(e) {
3808- jQuery.handleError(s, xhr, null, e);
3809- }
3810-
3811- // firefox 1.5 doesn't fire statechange for sync requests
3812- if ( !s.async )
3813- onreadystatechange();
3814-
3815- function success(){
3816- // If a local callback was specified, fire it and pass it the data
3817- if ( s.success )
3818- s.success( data, status );
3819-
3820- // Fire the global callback
3821- if ( s.global )
3822- jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
3823- }
3824-
3825- function complete(){
3826- // Process result
3827- if ( s.complete )
3828- s.complete(xhr, status);
3829-
3830- // The request was completed
3831- if ( s.global )
3832- jQuery.event.trigger( "ajaxComplete", [xhr, s] );
3833-
3834- // Handle the global AJAX counter
3835- if ( s.global && ! --jQuery.active )
3836- jQuery.event.trigger( "ajaxStop" );
3837- }
3838-
3839- // return XMLHttpRequest to allow aborting the request etc.
3840- return xhr;
3841- },
3842-
3843- handleError: function( s, xhr, status, e ) {
3844- // If a local callback was specified, fire it
3845- if ( s.error ) s.error( xhr, status, e );
3846-
3847- // Fire the global callback
3848- if ( s.global )
3849- jQuery.event.trigger( "ajaxError", [xhr, s, e] );
3850- },
3851-
3852- // Counter for holding the number of active queries
3853- active: 0,
3854-
3855- // Determines if an XMLHttpRequest was successful or not
3856- httpSuccess: function( xhr ) {
3857- try {
3858- // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
3859- return !xhr.status && location.protocol == "file:" ||
3860- ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223 ||
3861- jQuery.browser.safari && xhr.status == undefined;
3862- } catch(e){}
3863- return false;
3864- },
3865-
3866- // Determines if an XMLHttpRequest returns NotModified
3867- httpNotModified: function( xhr, url ) {
3868- try {
3869- var xhrRes = xhr.getResponseHeader("Last-Modified");
3870-
3871- // Firefox always returns 200. check Last-Modified date
3872- return xhr.status == 304 || xhrRes == jQuery.lastModified[url] ||
3873- jQuery.browser.safari && xhr.status == undefined;
3874- } catch(e){}
3875- return false;
3876- },
3877-
3878- httpData: function( xhr, type, filter ) {
3879- var ct = xhr.getResponseHeader("content-type"),
3880- xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
3881- data = xml ? xhr.responseXML : xhr.responseText;
3882-
3883- if ( xml && data.documentElement.tagName == "parsererror" )
3884- throw "parsererror";
3885-
3886- // Allow a pre-filtering function to sanitize the response
3887- if( filter )
3888- data = filter( data, type );
3889-
3890- // If the type is "script", eval it in global context
3891- if ( type == "script" )
3892- jQuery.globalEval( data );
3893-
3894- // Get the JavaScript object, if JSON is used.
3895- if ( type == "json" )
3896- data = eval("(" + data + ")");
3897-
3898- return data;
3899- },
3900-
3901- // Serialize an array of form elements or a set of
3902- // key/values into a query string
3903- param: function( a ) {
3904- var s = [];
3905-
3906- // If an array was passed in, assume that it is an array
3907- // of form elements
3908- if ( a.constructor == Array || a.jquery )
3909- // Serialize the form elements
3910- jQuery.each( a, function(){
3911- s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
3912- });
3913-
3914- // Otherwise, assume that it's an object of key/value pairs
3915- else
3916- // Serialize the key/values
3917- for ( var j in a )
3918- // If the value is an array then the key names need to be repeated
3919- if ( a[j] && a[j].constructor == Array )
3920- jQuery.each( a[j], function(){
3921- s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
3922- });
3923- else
3924- s.push( encodeURIComponent(j) + "=" + encodeURIComponent( jQuery.isFunction(a[j]) ? a[j]() : a[j] ) );
3925-
3926- // Return the resulting serialization
3927- return s.join("&").replace(/%20/g, "+");
3928- }
3929-
3930-});
3931-jQuery.fn.extend({
3932- show: function(speed,callback){
3933- return speed ?
3934- this.animate({
3935- height: "show", width: "show", opacity: "show"
3936- }, speed, callback) :
3937-
3938- this.filter(":hidden").each(function(){
3939- this.style.display = this.oldblock || "";
3940- if ( jQuery.css(this,"display") == "none" ) {
3941- var elem = jQuery("<" + this.tagName + " />").appendTo("body");
3942- this.style.display = elem.css("display");
3943- // handle an edge condition where css is - div { display:none; } or similar
3944- if (this.style.display == "none")
3945- this.style.display = "block";
3946- elem.remove();
3947- }
3948- }).end();
3949- },
3950-
3951- hide: function(speed,callback){
3952- return speed ?
3953- this.animate({
3954- height: "hide", width: "hide", opacity: "hide"
3955- }, speed, callback) :
3956-
3957- this.filter(":visible").each(function(){
3958- this.oldblock = this.oldblock || jQuery.css(this,"display");
3959- this.style.display = "none";
3960- }).end();
3961- },
3962-
3963- // Save the old toggle function
3964- _toggle: jQuery.fn.toggle,
3965-
3966- toggle: function( fn, fn2 ){
3967- return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
3968- this._toggle.apply( this, arguments ) :
3969- fn ?
3970- this.animate({
3971- height: "toggle", width: "toggle", opacity: "toggle"
3972- }, fn, fn2) :
3973- this.each(function(){
3974- jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
3975- });
3976- },
3977-
3978- slideDown: function(speed,callback){
3979- return this.animate({height: "show"}, speed, callback);
3980- },
3981-
3982- slideUp: function(speed,callback){
3983- return this.animate({height: "hide"}, speed, callback);
3984- },
3985-
3986- slideToggle: function(speed, callback){
3987- return this.animate({height: "toggle"}, speed, callback);
3988- },
3989-
3990- fadeIn: function(speed, callback){
3991- return this.animate({opacity: "show"}, speed, callback);
3992- },
3993-
3994- fadeOut: function(speed, callback){
3995- return this.animate({opacity: "hide"}, speed, callback);
3996- },
3997-
3998- fadeTo: function(speed,to,callback){
3999- return this.animate({opacity: to}, speed, callback);
4000- },
4001-
4002- animate: function( prop, speed, easing, callback ) {
4003- var optall = jQuery.speed(speed, easing, callback);
4004-
4005- return this[ optall.queue === false ? "each" : "queue" ](function(){
4006- if ( this.nodeType != 1)
4007- return false;
4008-
4009- var opt = jQuery.extend({}, optall), p,
4010- hidden = jQuery(this).is(":hidden"), self = this;
4011-
4012- for ( p in prop ) {
4013- if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
4014- return opt.complete.call(this);
4015-
4016- if ( p == "height" || p == "width" ) {
4017- // Store display property
4018- opt.display = jQuery.css(this, "display");
4019-
4020- // Make sure that nothing sneaks out
4021- opt.overflow = this.style.overflow;
4022- }
4023- }
4024-
4025- if ( opt.overflow != null )
4026- this.style.overflow = "hidden";
4027-
4028- opt.curAnim = jQuery.extend({}, prop);
4029-
4030- jQuery.each( prop, function(name, val){
4031- var e = new jQuery.fx( self, opt, name );
4032-
4033- if ( /toggle|show|hide/.test(val) )
4034- e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
4035- else {
4036- var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
4037- start = e.cur(true) || 0;
4038-
4039- if ( parts ) {
4040- var end = parseFloat(parts[2]),
4041- unit = parts[3] || "px";
4042-
4043- // We need to compute starting value
4044- if ( unit != "px" ) {
4045- self.style[ name ] = (end || 1) + unit;
4046- start = ((end || 1) / e.cur(true)) * start;
4047- self.style[ name ] = start + unit;
4048- }
4049-
4050- // If a +=/-= token was provided, we're doing a relative animation
4051- if ( parts[1] )
4052- end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
4053-
4054- e.custom( start, end, unit );
4055- } else
4056- e.custom( start, val, "" );
4057- }
4058- });
4059-
4060- // For JS strict compliance
4061- return true;
4062- });
4063- },
4064-
4065- queue: function(type, fn){
4066- if ( jQuery.isFunction(type) || ( type && type.constructor == Array )) {
4067- fn = type;
4068- type = "fx";
4069- }
4070-
4071- if ( !type || (typeof type == "string" && !fn) )
4072- return queue( this[0], type );
4073-
4074- return this.each(function(){
4075- if ( fn.constructor == Array )
4076- queue(this, type, fn);
4077- else {
4078- queue(this, type).push( fn );
4079-
4080- if ( queue(this, type).length == 1 )
4081- fn.call(this);
4082- }
4083- });
4084- },
4085-
4086- stop: function(clearQueue, gotoEnd){
4087- var timers = jQuery.timers;
4088-
4089- if (clearQueue)
4090- this.queue([]);
4091-
4092- this.each(function(){
4093- // go in reverse order so anything added to the queue during the loop is ignored
4094- for ( var i = timers.length - 1; i >= 0; i-- )
4095- if ( timers[i].elem == this ) {
4096- if (gotoEnd)
4097- // force the next step to be the last
4098- timers[i](true);
4099- timers.splice(i, 1);
4100- }
4101- });
4102-
4103- // start the next in the queue if the last step wasn't forced
4104- if (!gotoEnd)
4105- this.dequeue();
4106-
4107- return this;
4108- }
4109-
4110-});
4111-
4112-var queue = function( elem, type, array ) {
4113- if ( elem ){
4114-
4115- type = type || "fx";
4116-
4117- var q = jQuery.data( elem, type + "queue" );
4118-
4119- if ( !q || array )
4120- q = jQuery.data( elem, type + "queue", jQuery.makeArray(array) );
4121-
4122- }
4123- return q;
4124-};
4125-
4126-jQuery.fn.dequeue = function(type){
4127- type = type || "fx";
4128-
4129- return this.each(function(){
4130- var q = queue(this, type);
4131-
4132- q.shift();
4133-
4134- if ( q.length )
4135- q[0].call( this );
4136- });
4137-};
4138-
4139-jQuery.extend({
4140-
4141- speed: function(speed, easing, fn) {
4142- var opt = speed && speed.constructor == Object ? speed : {
4143- complete: fn || !fn && easing ||
4144- jQuery.isFunction( speed ) && speed,
4145- duration: speed,
4146- easing: fn && easing || easing && easing.constructor != Function && easing
4147- };
4148-
4149- opt.duration = (opt.duration && opt.duration.constructor == Number ?
4150- opt.duration :
4151- jQuery.fx.speeds[opt.duration]) || jQuery.fx.speeds.def;
4152-
4153- // Queueing
4154- opt.old = opt.complete;
4155- opt.complete = function(){
4156- if ( opt.queue !== false )
4157- jQuery(this).dequeue();
4158- if ( jQuery.isFunction( opt.old ) )
4159- opt.old.call( this );
4160- };
4161-
4162- return opt;
4163- },
4164-
4165- easing: {
4166- linear: function( p, n, firstNum, diff ) {
4167- return firstNum + diff * p;
4168- },
4169- swing: function( p, n, firstNum, diff ) {
4170- return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
4171- }
4172- },
4173-
4174- timers: [],
4175- timerId: null,
4176-
4177- fx: function( elem, options, prop ){
4178- this.options = options;
4179- this.elem = elem;
4180- this.prop = prop;
4181-
4182- if ( !options.orig )
4183- options.orig = {};
4184- }
4185-
4186-});
4187-
4188-jQuery.fx.prototype = {
4189-
4190- // Simple function for setting a style value
4191- update: function(){
4192- if ( this.options.step )
4193- this.options.step.call( this.elem, this.now, this );
4194-
4195- (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
4196-
4197- // Set display property to block for height/width animations
4198- if ( this.prop == "height" || this.prop == "width" )
4199- this.elem.style.display = "block";
4200- },
4201-
4202- // Get the current size
4203- cur: function(force){
4204- if ( this.elem[this.prop] != null && this.elem.style[this.prop] == null )
4205- return this.elem[ this.prop ];
4206-
4207- var r = parseFloat(jQuery.css(this.elem, this.prop, force));
4208- return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
4209- },
4210-
4211- // Start an animation from one number to another
4212- custom: function(from, to, unit){
4213- this.startTime = now();
4214- this.start = from;
4215- this.end = to;
4216- this.unit = unit || this.unit || "px";
4217- this.now = this.start;
4218- this.pos = this.state = 0;
4219- this.update();
4220-
4221- var self = this;
4222- function t(gotoEnd){
4223- return self.step(gotoEnd);
4224- }
4225-
4226- t.elem = this.elem;
4227-
4228- jQuery.timers.push(t);
4229-
4230- if ( jQuery.timerId == null ) {
4231- jQuery.timerId = setInterval(function(){
4232- var timers = jQuery.timers;
4233-
4234- for ( var i = 0; i < timers.length; i++ )
4235- if ( !timers[i]() )
4236- timers.splice(i--, 1);
4237-
4238- if ( !timers.length ) {
4239- clearInterval( jQuery.timerId );
4240- jQuery.timerId = null;
4241- }
4242- }, 13);
4243- }
4244- },
4245-
4246- // Simple 'show' function
4247- show: function(){
4248- // Remember where we started, so that we can go back to it later
4249- this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
4250- this.options.show = true;
4251-
4252- // Begin the animation
4253- this.custom(0, this.cur());
4254-
4255- // Make sure that we start at a small width/height to avoid any
4256- // flash of content
4257- if ( this.prop == "width" || this.prop == "height" )
4258- this.elem.style[this.prop] = "1px";
4259-
4260- // Start by showing the element
4261- jQuery(this.elem).show();
4262- },
4263-
4264- // Simple 'hide' function
4265- hide: function(){
4266- // Remember where we started, so that we can go back to it later
4267- this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
4268- this.options.hide = true;
4269-
4270- // Begin the animation
4271- this.custom(this.cur(), 0);
4272- },
4273-
4274- // Each step of an animation
4275- step: function(gotoEnd){
4276- var t = now();
4277-
4278- if ( gotoEnd || t > this.options.duration + this.startTime ) {
4279- this.now = this.end;
4280- this.pos = this.state = 1;
4281- this.update();
4282-
4283- this.options.curAnim[ this.prop ] = true;
4284-
4285- var done = true;
4286- for ( var i in this.options.curAnim )
4287- if ( this.options.curAnim[i] !== true )
4288- done = false;
4289-
4290- if ( done ) {
4291- if ( this.options.display != null ) {
4292- // Reset the overflow
4293- this.elem.style.overflow = this.options.overflow;
4294-
4295- // Reset the display
4296- this.elem.style.display = this.options.display;
4297- if ( jQuery.css(this.elem, "display") == "none" )
4298- this.elem.style.display = "block";
4299- }
4300-
4301- // Hide the element if the "hide" operation was done
4302- if ( this.options.hide )
4303- this.elem.style.display = "none";
4304-
4305- // Reset the properties, if the item has been hidden or shown
4306- if ( this.options.hide || this.options.show )
4307- for ( var p in this.options.curAnim )
4308- jQuery.attr(this.elem.style, p, this.options.orig[p]);
4309- }
4310-
4311- if ( done )
4312- // Execute the complete function
4313- this.options.complete.call( this.elem );
4314-
4315- return false;
4316- } else {
4317- var n = t - this.startTime;
4318- this.state = n / this.options.duration;
4319-
4320- // Perform the easing function, defaults to swing
4321- this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
4322- this.now = this.start + ((this.end - this.start) * this.pos);
4323-
4324- // Perform the next step of the animation
4325- this.update();
4326- }
4327-
4328- return true;
4329- }
4330-
4331-};
4332-
4333-jQuery.extend( jQuery.fx, {
4334- speeds:{
4335- slow: 600,
4336- fast: 200,
4337- // Default speed
4338- def: 400
4339- },
4340- step: {
4341- scrollLeft: function(fx){
4342- fx.elem.scrollLeft = fx.now;
4343- },
4344-
4345- scrollTop: function(fx){
4346- fx.elem.scrollTop = fx.now;
4347- },
4348-
4349- opacity: function(fx){
4350- jQuery.attr(fx.elem.style, "opacity", fx.now);
4351- },
4352-
4353- _default: function(fx){
4354- fx.elem.style[ fx.prop ] = fx.now + fx.unit;
4355- }
4356- }
4357-});
4358-// The Offset Method
4359-// Originally By Brandon Aaron, part of the Dimension Plugin
4360-// http://jquery.com/plugins/project/dimensions
4361-jQuery.fn.offset = function() {
4362- var left = 0, top = 0, elem = this[0], results;
4363-
4364- if ( elem ) with ( jQuery.browser ) {
4365- var parent = elem.parentNode,
4366- offsetChild = elem,
4367- offsetParent = elem.offsetParent,
4368- doc = elem.ownerDocument,
4369- safari2 = safari && parseInt(version) < 522 && !/adobeair/i.test(userAgent),
4370- css = jQuery.curCSS,
4371- fixed = css(elem, "position") == "fixed";
4372-
4373- // Use getBoundingClientRect if available
4374- if ( elem.getBoundingClientRect ) {
4375- var box = elem.getBoundingClientRect();
4376-
4377- // Add the document scroll offsets
4378- add(box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
4379- box.top + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
4380-
4381- // IE adds the HTML element's border, by default it is medium which is 2px
4382- // IE 6 and 7 quirks mode the border width is overwritable by the following css html { border: 0; }
4383- // IE 7 standards mode, the border is always 2px
4384- // This border/offset is typically represented by the clientLeft and clientTop properties
4385- // However, in IE6 and 7 quirks mode the clientLeft and clientTop properties are not updated when overwriting it via CSS
4386- // Therefore this method will be off by 2px in IE while in quirksmode
4387- add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop );
4388-
4389- // Otherwise loop through the offsetParents and parentNodes
4390- } else {
4391-
4392- // Initial element offsets
4393- add( elem.offsetLeft, elem.offsetTop );
4394-
4395- // Get parent offsets
4396- while ( offsetParent ) {
4397- // Add offsetParent offsets
4398- add( offsetParent.offsetLeft, offsetParent.offsetTop );
4399-
4400- // Mozilla and Safari > 2 does not include the border on offset parents
4401- // However Mozilla adds the border for table or table cells
4402- if ( mozilla && !/^t(able|d|h)$/i.test(offsetParent.tagName) || safari && !safari2 )
4403- border( offsetParent );
4404-
4405- // Add the document scroll offsets if position is fixed on any offsetParent
4406- if ( !fixed && css(offsetParent, "position") == "fixed" )
4407- fixed = true;
4408-
4409- // Set offsetChild to previous offsetParent unless it is the body element
4410- offsetChild = /^body$/i.test(offsetParent.tagName) ? offsetChild : offsetParent;
4411- // Get next offsetParent
4412- offsetParent = offsetParent.offsetParent;
4413- }
4414-
4415- // Get parent scroll offsets
4416- while ( parent && parent.tagName && !/^body|html$/i.test(parent.tagName) ) {
4417- // Remove parent scroll UNLESS that parent is inline or a table to work around Opera inline/table scrollLeft/Top bug
4418- if ( !/^inline|table.*$/i.test(css(parent, "display")) )
4419- // Subtract parent scroll offsets
4420- add( -parent.scrollLeft, -parent.scrollTop );
4421-
4422- // Mozilla does not add the border for a parent that has overflow != visible
4423- if ( mozilla && css(parent, "overflow") != "visible" )
4424- border( parent );
4425-
4426- // Get next parent
4427- parent = parent.parentNode;
4428- }
4429-
4430- // Safari <= 2 doubles body offsets with a fixed position element/offsetParent or absolutely positioned offsetChild
4431- // Mozilla doubles body offsets with a non-absolutely positioned offsetChild
4432- if ( (safari2 && (fixed || css(offsetChild, "position") == "absolute")) ||
4433- (mozilla && css(offsetChild, "position") != "absolute") )
4434- add( -doc.body.offsetLeft, -doc.body.offsetTop );
4435-
4436- // Add the document scroll offsets if position is fixed
4437- if ( fixed )
4438- add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
4439- Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
4440- }
4441-
4442- // Return an object with top and left properties
4443- results = { top: top, left: left };
4444- }
4445-
4446- function border(elem) {
4447- add( jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(elem, "borderTopWidth", true) );
4448- }
4449-
4450- function add(l, t) {
4451- left += parseInt(l, 10) || 0;
4452- top += parseInt(t, 10) || 0;
4453- }
4454-
4455- return results;
4456-};
4457-
4458-
4459-jQuery.fn.extend({
4460- position: function() {
4461- var left = 0, top = 0, results;
4462-
4463- if ( this[0] ) {
4464- // Get *real* offsetParent
4465- var offsetParent = this.offsetParent(),
4466-
4467- // Get correct offsets
4468- offset = this.offset(),
4469- parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
4470-
4471- // Subtract element margins
4472- // note: when an element has margin: auto the offsetLeft and marginLeft
4473- // are the same in Safari causing offset.left to incorrectly be 0
4474- offset.top -= num( this, 'marginTop' );
4475- offset.left -= num( this, 'marginLeft' );
4476-
4477- // Add offsetParent borders
4478- parentOffset.top += num( offsetParent, 'borderTopWidth' );
4479- parentOffset.left += num( offsetParent, 'borderLeftWidth' );
4480-
4481- // Subtract the two offsets
4482- results = {
4483- top: offset.top - parentOffset.top,
4484- left: offset.left - parentOffset.left
4485- };
4486- }
4487-
4488- return results;
4489- },
4490-
4491- offsetParent: function() {
4492- var offsetParent = this[0].offsetParent;
4493- while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )
4494- offsetParent = offsetParent.offsetParent;
4495- return jQuery(offsetParent);
4496- }
4497-});
4498-
4499-
4500-// Create scrollLeft and scrollTop methods
4501-jQuery.each( ['Left', 'Top'], function(i, name) {
4502- var method = 'scroll' + name;
4503-
4504- jQuery.fn[ method ] = function(val) {
4505- if (!this[0]) return;
4506-
4507- return val != undefined ?
4508-
4509- // Set the scroll offset
4510- this.each(function() {
4511- this == window || this == document ?
4512- window.scrollTo(
4513- !i ? val : jQuery(window).scrollLeft(),
4514- i ? val : jQuery(window).scrollTop()
4515- ) :
4516- this[ method ] = val;
4517- }) :
4518-
4519- // Return the scroll offset
4520- this[0] == window || this[0] == document ?
4521- self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
4522- jQuery.boxModel && document.documentElement[ method ] ||
4523- document.body[ method ] :
4524- this[0][ method ];
4525- };
4526-});
4527-// Create innerHeight, innerWidth, outerHeight and outerWidth methods
4528-jQuery.each([ "Height", "Width" ], function(i, name){
4529-
4530- var tl = i ? "Left" : "Top", // top or left
4531- br = i ? "Right" : "Bottom"; // bottom or right
4532-
4533- // innerHeight and innerWidth
4534- jQuery.fn["inner" + name] = function(){
4535- return this[ name.toLowerCase() ]() +
4536- num(this, "padding" + tl) +
4537- num(this, "padding" + br);
4538- };
4539-
4540- // outerHeight and outerWidth
4541- jQuery.fn["outer" + name] = function(margin) {
4542- return this["inner" + name]() +
4543- num(this, "border" + tl + "Width") +
4544- num(this, "border" + br + "Width") +
4545- (margin ?
4546- num(this, "margin" + tl) + num(this, "margin" + br) : 0);
4547- };
4548-
4549-});})();
4550
4551=== removed file 'forum/skins/light/media/js/jquery-1.2.6.min.js'
4552--- forum/skins/light/media/js/jquery-1.2.6.min.js 2012-07-02 19:36:31 +0000
4553+++ forum/skins/light/media/js/jquery-1.2.6.min.js 1970-01-01 00:00:00 +0000
4554@@ -1,32 +0,0 @@
4555-/*
4556- * jQuery 1.2.6 - New Wave Javascript
4557- *
4558- * Copyright (c) 2008 John Resig (jquery.com)
4559- * Dual licensed under the MIT (MIT-LICENSE.txt)
4560- * and GPL (GPL-LICENSE.txt) licenses.
4561- *
4562- * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
4563- * $Rev: 5685 $
4564- */
4565-(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
4566-return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
4567-return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
4568-selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
4569-return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
4570-this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
4571-return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
4572-jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
4573-script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
4574-for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
4575-for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
4576-jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
4577-ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
4578-while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
4579-while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
4580-for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
4581-jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
4582-xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
4583-jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
4584-for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
4585-s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
4586-e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
4587\ No newline at end of file
4588
4589=== removed file 'forum/skins/light/media/js/jquery.ajaxfileupload.js'
4590--- forum/skins/light/media/js/jquery.ajaxfileupload.js 2012-07-02 19:36:31 +0000
4591+++ forum/skins/light/media/js/jquery.ajaxfileupload.js 1970-01-01 00:00:00 +0000
4592@@ -1,195 +0,0 @@
4593-jQuery.extend({
4594- createUploadIframe: function(id, uri){
4595- //create frame
4596- var frameId = 'jUploadFrame' + id;
4597- if(window.ActiveXObject) {
4598- var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
4599- if(typeof uri== 'boolean'){
4600- io.src = 'javascript:false';
4601- }
4602- else if(typeof uri== 'string'){
4603- io.src = uri;
4604- }
4605- }
4606- else {
4607- var io = document.createElement('iframe');
4608- io.id = frameId;
4609- io.name = frameId;
4610- }
4611- io.style.position = 'absolute';
4612- io.style.top = '-1000px';
4613- io.style.left = '-1000px';
4614-
4615- document.body.appendChild(io);
4616- return io;
4617- },
4618- createUploadForm: function(id, fileElementId)
4619- {
4620- //create form
4621- var formId = 'jUploadForm' + id;
4622- var fileId = 'jUploadFile' + id;
4623- var form = $('<form action="" method="POST" name="' + formId + '" id="' + formId
4624- + '" enctype="multipart/form-data"></form>');
4625- var oldElement = $('#' + fileElementId);
4626- var newElement = $(oldElement).clone();
4627- $(oldElement).attr('id', fileId);
4628- $(oldElement).before(newElement);
4629- $(oldElement).appendTo(form);
4630- //set attributes
4631- $(form).css('position', 'absolute');
4632- $(form).css('top', '-1200px');
4633- $(form).css('left', '-1200px');
4634- $(form).appendTo('body');
4635- return form;
4636- },
4637-
4638- ajaxFileUpload: function(s) {
4639- // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
4640- s = jQuery.extend({}, jQuery.ajaxSettings, s);
4641- var id = new Date().getTime()
4642- var form = jQuery.createUploadForm(id, s.fileElementId);
4643- var io = jQuery.createUploadIframe(id, s.secureuri);
4644- var frameId = 'jUploadFrame' + id;
4645- var formId = 'jUploadForm' + id;
4646- // Watch for a new set of requests
4647- if ( s.global && ! jQuery.active++ )
4648- {
4649- jQuery.event.trigger( "ajaxStart" );
4650- }
4651- var requestDone = false;
4652- // Create the request object
4653- var xml = {}
4654- if ( s.global )
4655- jQuery.event.trigger("ajaxSend", [xml, s]);
4656- // Wait for a response to come back
4657- var uploadCallback = function(isTimeout)
4658- {
4659- var io = document.getElementById(frameId);
4660- try {
4661- if(io.contentWindow){
4662- xml.responseText = io.contentWindow.document.body ?
4663- io.contentWindow.document.body.innerText : null;
4664- xml.responseXML = io.contentWindow.document.XMLDocument ?
4665- io.contentWindow.document.XMLDocument : io.contentWindow.document;
4666-
4667- }
4668- else if(io.contentDocument)
4669- {
4670- xml.responseText = io.contentDocument.document.body ?
4671- io.contentDocument.document.body.textContent || document.body.innerText : null;
4672- xml.responseXML = io.contentDocument.document.XMLDocument ?
4673- io.contentDocument.document.XMLDocument : io.contentDocument.document;
4674- }
4675- }
4676- catch(e)
4677- {
4678- jQuery.handleError(s, xml, null, e);
4679- }
4680- if ( xml || isTimeout == "timeout")
4681- {
4682- requestDone = true;
4683- var status;
4684- try {
4685- status = isTimeout != "timeout" ? "success" : "error";
4686- // Make sure that the request was successful or notmodified
4687- if ( status != "error" )
4688- {
4689- // process the data (runs the xml through httpData regardless of callback)
4690- var data = jQuery.uploadHttpData( xml, s.dataType );
4691- // If a local callback was specified, fire it and pass it the data
4692- if ( s.success )
4693- s.success( data, status );
4694-
4695- // Fire the global callback
4696- if( s.global )
4697- jQuery.event.trigger( "ajaxSuccess", [xml, s] );
4698- } else
4699- jQuery.handleError(s, xml, status);
4700- } catch(e)
4701- {
4702- status = "error";
4703- jQuery.handleError(s, xml, status, e);
4704- }
4705-
4706- // The request was completed
4707- if( s.global )
4708- jQuery.event.trigger( "ajaxComplete", [xml, s] );
4709-
4710- // Handle the global AJAX counter
4711- if ( s.global && ! --jQuery.active )
4712- jQuery.event.trigger( "ajaxStop" );
4713-
4714- // Process result
4715- if ( s.complete )
4716- s.complete(xml, status);
4717-
4718- jQuery(io).unbind();
4719-
4720- setTimeout(function()
4721- { try
4722- {
4723- $(io).remove();
4724- $(form).remove();
4725-
4726- } catch(e) {
4727- jQuery.handleError(s, xml, null, e);
4728- }
4729- }, 100)
4730- xml = null;
4731- }
4732- }
4733- // Timeout checker
4734- if ( s.timeout > 0 ) {
4735- setTimeout(function(){
4736- // Check to see if the request is still happening
4737- if( !requestDone ) uploadCallback( "timeout" );
4738- }, s.timeout);
4739- }
4740- try
4741- {
4742- // var io = $('#' + frameId);
4743- var form = $('#' + formId);
4744- $(form).attr('action', s.url);
4745- $(form).attr('method', 'POST');
4746- $(form).attr('target', frameId);
4747- if(form.encoding)
4748- {
4749- form.encoding = 'multipart/form-data';
4750- }
4751- else
4752- {
4753- form.enctype = 'multipart/form-data';
4754- }
4755- $(form).submit();
4756-
4757- } catch(e)
4758- {
4759- jQuery.handleError(s, xml, null, e);
4760- }
4761- if(window.attachEvent){
4762- document.getElementById(frameId).attachEvent('onload', uploadCallback);
4763- }
4764- else{
4765- document.getElementById(frameId).addEventListener('load', uploadCallback, false);
4766- }
4767- return {abort: function () {}};
4768-
4769- },
4770-
4771- uploadHttpData: function( r, type ) {
4772- var data = !type;
4773- data = type == "xml" || data ? r.responseXML : r.responseText;
4774- // If the type is "script", eval it in global context
4775- if ( type == "script" )
4776- jQuery.globalEval( data );
4777- // Get the JavaScript object, if JSON is used.
4778- if ( type == "json" )
4779- eval( "data = " + data );
4780- // evaluate scripts within html
4781- if ( type == "html" )
4782- jQuery("<div>").html(data).evalScripts();
4783- //alert($('param', data).each(function(){alert($(this).attr('value'));}));
4784- return data;
4785- }
4786-})
4787-
4788
4789=== removed file 'forum/skins/light/media/js/jquery.caret.js'
4790--- forum/skins/light/media/js/jquery.caret.js 2012-07-02 19:36:31 +0000
4791+++ forum/skins/light/media/js/jquery.caret.js 1970-01-01 00:00:00 +0000
4792@@ -1,10 +0,0 @@
4793-/*
4794- *
4795- * Copyright (c) 2010 C. F., Wong (<a href="http://cloudgen.w0ng.hk">Cloudgen Examplet Store</a>)
4796- * Licensed under the MIT License:
4797- * http://www.opensource.org/licenses/mit-license.php
4798- *
4799- */
4800-(function(k,e,i,j){k.fn.caret=function(b,l){var a,c,f=this[0],d=k.browser.msie;if(typeof b==="object"&&typeof b.start==="number"&&typeof b.end==="number"){a=b.start;c=b.end}else if(typeof b==="number"&&typeof l==="number"){a=b;c=l}else if(typeof b==="string")if((a=f.value.indexOf(b))>-1)c=a+b[e];else a=null;else if(Object.prototype.toString.call(b)==="[object RegExp]"){b=b.exec(f.value);if(b!=null){a=b.index;c=a+b[0][e]}}if(typeof a!="undefined"){if(d){d=this[0].createTextRange();d.collapse(true);
4801-d.moveStart("character",a);d.moveEnd("character",c-a);d.select()}else{this[0].selectionStart=a;this[0].selectionEnd=c}this[0].focus();return this}else{if(d){c=document.selection;if(this[0].tagName.toLowerCase()!="textarea"){d=this.val();a=c[i]()[j]();a.moveEnd("character",d[e]);var g=a.text==""?d[e]:d.lastIndexOf(a.text);a=c[i]()[j]();a.moveStart("character",-d[e]);var h=a.text[e]}else{a=c[i]();c=a[j]();c.moveToElementText(this[0]);c.setEndPoint("EndToEnd",a);g=c.text[e]-a.text[e];h=g+a.text[e]}}else{g=
4802-f.selectionStart;h=f.selectionEnd}a=f.value.substring(g,h);return{start:g,end:h,text:a,replace:function(m){return f.value.substring(0,g)+m+f.value.substring(h,f.value[e])}}}}})(jQuery,"length","createRange","duplicate");
4803\ No newline at end of file
4804
4805=== removed file 'forum/skins/light/media/js/jquery.flot.js'
4806--- forum/skins/light/media/js/jquery.flot.js 2012-07-02 19:36:31 +0000
4807+++ forum/skins/light/media/js/jquery.flot.js 1970-01-01 00:00:00 +0000
4808@@ -1,2421 +0,0 @@
4809-/* Javascript plotting library for jQuery, v. 0.5.
4810- *
4811- * Released under the MIT license by IOLA, December 2007.
4812- *
4813- */
4814-
4815-(function($) {
4816- function Plot(target_, data_, options_) {
4817- // data is on the form:
4818- // [ series1, series2 ... ]
4819- // where series is either just the data as [ [x1, y1], [x2, y2], ... ]
4820- // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label" }
4821-
4822- var series = [],
4823- options = {
4824- // the color theme used for graphs
4825- colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
4826- legend: {
4827- show: true,
4828- noColumns: 1, // number of colums in legend table
4829- labelFormatter: null, // fn: string -> string
4830- labelBoxBorderColor: "#ccc", // border color for the little label boxes
4831- container: null, // container (as jQuery object) to put legend in, null means default on top of graph
4832- position: "ne", // position of default legend container within plot
4833- margin: 5, // distance from grid edge to default legend container within plot
4834- backgroundColor: null, // null means auto-detect
4835- backgroundOpacity: 0.85 // set to 0 to avoid background
4836- },
4837- xaxis: {
4838- mode: null, // null or "time"
4839- min: null, // min. value to show, null means set automatically
4840- max: null, // max. value to show, null means set automatically
4841- autoscaleMargin: null, // margin in % to add if auto-setting min/max
4842- ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks
4843- tickFormatter: null, // fn: number -> string
4844- labelWidth: null, // size of tick labels in pixels
4845- labelHeight: null,
4846-
4847- // mode specific options
4848- tickDecimals: null, // no. of decimals, null means auto
4849- tickSize: null, // number or [number, "unit"]
4850- minTickSize: null, // number or [number, "unit"]
4851- monthNames: null, // list of names of months
4852- timeformat: null // format string to use
4853- },
4854- yaxis: {
4855- autoscaleMargin: 0.02
4856- },
4857- x2axis: {
4858- autoscaleMargin: null
4859- },
4860- y2axis: {
4861- autoscaleMargin: 0.02
4862- },
4863- points: {
4864- show: false,
4865- radius: 3,
4866- lineWidth: 2, // in pixels
4867- fill: true,
4868- fillColor: "#ffffff"
4869- },
4870- lines: {
4871- // we don't put in show: false so we can see
4872- // whether lines were actively disabled
4873- lineWidth: 2, // in pixels
4874- fill: false,
4875- fillColor: null,
4876- steps: false
4877- },
4878- bars: {
4879- show: false,
4880- lineWidth: 2, // in pixels
4881- barWidth: 1, // in units of the x axis
4882- fill: true,
4883- fillColor: null,
4884- align: "left", // or "center"
4885- horizontal: false // when horizontal, left is now top
4886- },
4887- threshold: null, // or { below: number, color: color spec}
4888- grid: {
4889- color: "#545454", // primary color used for outline and labels
4890- backgroundColor: null, // null for transparent, else color
4891- tickColor: "#dddddd", // color used for the ticks
4892- labelMargin: 5, // in pixels
4893- borderWidth: 2, // in pixels
4894- borderColor: null, // set if different from the grid color
4895- markings: null, // array of ranges or fn: axes -> array of ranges
4896- markingsColor: "#f4f4f4",
4897- markingsLineWidth: 2,
4898- // interactive stuff
4899- clickable: false,
4900- hoverable: false,
4901- autoHighlight: true, // highlight in case mouse is near
4902- mouseActiveRadius: 10 // how far the mouse can be away to activate an item
4903- },
4904- selection: {
4905- mode: null, // one of null, "x", "y" or "xy"
4906- color: "#e8cfac"
4907- },
4908- crosshair: {
4909- mode: null, // one of null, "x", "y" or "xy",
4910- color: "#aa0000"
4911- },
4912- shadowSize: 3
4913- },
4914- canvas = null, // the canvas for the plot itself
4915- overlay = null, // canvas for interactive stuff on top of plot
4916- eventHolder = null, // jQuery object that events should be bound to
4917- ctx = null, octx = null,
4918- target = $(target_),
4919- axes = { xaxis: {}, yaxis: {}, x2axis: {}, y2axis: {} },
4920- plotOffset = { left: 0, right: 0, top: 0, bottom: 0},
4921- canvasWidth = 0, canvasHeight = 0,
4922- plotWidth = 0, plotHeight = 0,
4923- // dedicated to storing data for buggy standard compliance cases
4924- workarounds = {};
4925-
4926- this.setData = setData;
4927- this.setupGrid = setupGrid;
4928- this.draw = draw;
4929- this.clearSelection = clearSelection;
4930- this.setSelection = setSelection;
4931- this.getCanvas = function() { return canvas; };
4932- this.getPlotOffset = function() { return plotOffset; };
4933- this.getData = function() { return series; };
4934- this.getAxes = function() { return axes; };
4935- this.setCrosshair = setCrosshair;
4936- this.clearCrosshair = function () { setCrosshair(null); };
4937- this.highlight = highlight;
4938- this.unhighlight = unhighlight;
4939-
4940- // initialize
4941- parseOptions(options_);
4942- setData(data_);
4943- constructCanvas();
4944- setupGrid();
4945- draw();
4946-
4947-
4948- function setData(d) {
4949- series = parseData(d);
4950-
4951- fillInSeriesOptions();
4952- processData();
4953- }
4954-
4955- function parseData(d) {
4956- var res = [];
4957- for (var i = 0; i < d.length; ++i) {
4958- var s;
4959- if (d[i].data) {
4960- s = {};
4961- for (var v in d[i])
4962- s[v] = d[i][v];
4963- }
4964- else {
4965- s = { data: d[i] };
4966- }
4967- res.push(s);
4968- }
4969-
4970- return res;
4971- }
4972-
4973- function parseOptions(o) {
4974- $.extend(true, options, o);
4975- if (options.grid.borderColor == null)
4976- options.grid.borderColor = options.grid.color
4977- // backwards compatibility, to be removed in future
4978- if (options.xaxis.noTicks && options.xaxis.ticks == null)
4979- options.xaxis.ticks = options.xaxis.noTicks;
4980- if (options.yaxis.noTicks && options.yaxis.ticks == null)
4981- options.yaxis.ticks = options.yaxis.noTicks;
4982- if (options.grid.coloredAreas)
4983- options.grid.markings = options.grid.coloredAreas;
4984- if (options.grid.coloredAreasColor)
4985- options.grid.markingsColor = options.grid.coloredAreasColor;
4986- }
4987-
4988- function fillInSeriesOptions() {
4989- var i;
4990-
4991- // collect what we already got of colors
4992- var neededColors = series.length,
4993- usedColors = [],
4994- assignedColors = [];
4995- for (i = 0; i < series.length; ++i) {
4996- var sc = series[i].color;
4997- if (sc != null) {
4998- --neededColors;
4999- if (typeof sc == "number")
5000- assignedColors.push(sc);
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: