Merge lp:~timo-jyrinki/kanban-tracker/milestone-page-calendar-view into lp:kanban-tracker

Proposed by Timo Jyrinki
Status: Merged
Merged at revision: 321
Proposed branch: lp:~timo-jyrinki/kanban-tracker/milestone-page-calendar-view
Merge into: lp:kanban-tracker
Diff against target: 4977 lines (+4940/-0)
7 files modified
css/core.css (+28/-0)
js/jMonthCalendar.js (+514/-0)
js/jMonthCalendar.min.js (+10/-0)
js/jMonthCalendar.pack.js (+10/-0)
js/jquery-1.3.js (+4241/-0)
js/jquery-1.3.min.js (+19/-0)
themes/canonical/templates/milestone_list.html (+118/-0)
To merge this branch: bzr merge lp:~timo-jyrinki/kanban-tracker/milestone-page-calendar-view
Reviewer Review Type Date Requested Status
Francis Ginther Approve
Review via email: mp+121839@code.launchpad.net

Description of the change

Provides calendar view to the milestone page by using jMonthCalendar (http://code.google.com/p/jmonthcalendar/). Other files from jMonthCalendar 1.2.2 (css slightly modified), milestone_list.html copied from the default template and modified.

To post a comment you must log in.
Revision history for this message
Francis Ginther (fginther) wrote :

Successfully tested with a build of the ps-status pages on my local box.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'css/core.css'
2--- css/core.css 1970-01-01 00:00:00 +0000
3+++ css/core.css 2012-08-29 11:42:51 +0000
4@@ -0,0 +1,28 @@
5+body {
6+}
7+
8+a { font-size:11px; }
9+
10+#jMonthCalendar { position:relative; }
11+.MonthlyCalendar .MonthNavigation { border-bottom:solid 1px #ddd; clear:both; height:20px; padding:5px 10px 0 10px; }
12+.MonthlyCalendar .MonthNavPrev, .MonthlyCalendar .MonthNavNext, .MonthlyCalendar .TodayLink { width:7%; float:left; }
13+.MonthlyCalendar .YearNavNext, .MonthlyCalendar .YearNavPrev { width:10%; float:right; }
14+.MonthlyCalendar .MonthName { width:59%; text-align:center; font-weight:bold; float:left; color: #000}
15+
16+
17+.MonthlyCalendar { height:100%; width:100%; border:solid 1px #ddd; border-collapse:collapse; }
18+.MonthlyCalendar #CalendarHead { width:100%; background:#F7F7F7 none repeat scroll 0 0; }
19+.MonthlyCalendar #CalendarHead .DateHeader { width:14%; text-align:center; }
20+
21+ .MonthlyCalendar #CalendarBody { }
22+.DateBox { vertical-align:top; border:solid 1px #ddd; }
23+.DateLabel { height:16px; width:100%; background:#F7F7F7 none repeat scroll 0 0; text-align:right; }
24+.DateLabel a { cursor:pointer; padding:0 5px 2px; text-decoration:none; line-height:16px; }
25+
26+#CalendarBody .Inactive, #CalendarBody .Weekend { background:#fafafa none repeat scroll 0 0; }
27+.Today { background:#A9DFFF none repeat scroll 0 0; }
28+
29+#jMonthCalendar .Event { font-size:12px; padding:4px; background-color:#C0D0FF; margin-bottom:1px; -moz-border-radius:0 8px 8px 8px; border:solid 1px #000; cursor:pointer; display:block; }
30+.Event a { text-decoration:none; color:#000; }
31+.Event a:hover { text-decoration:underline; }
32+
33
34=== added file 'js/jMonthCalendar.js'
35--- js/jMonthCalendar.js 1970-01-01 00:00:00 +0000
36+++ js/jMonthCalendar.js 2012-08-29 11:42:51 +0000
37@@ -0,0 +1,514 @@
38+/*!
39+* Title: jMonthCalendar 1.2.2
40+* Dependencies: jQuery 1.3.0 +
41+* Author: Kyle LeNeau
42+* Email: kyle.leneau@gmail.com
43+* Project Hompage: http://www.bytecyclist.com/projects/jmonthcalendar
44+* Source: http://code.google.com/p/jmonthcalendar
45+*
46+*/
47+
48+(function($) {
49+ var ids = {
50+ container: "#jMonthCalendar",
51+ head: "#CalendarHead",
52+ body: "#CalendarBody"
53+ };
54+ var _selectedDate;
55+ var _beginDate;
56+ var _endDate;
57+ var calendarEvents;
58+ var defaults = {
59+ height: 650,
60+ width: 980,
61+ navHeight: 25,
62+ labelHeight: 25,
63+ firstDayOfWeek: 0,
64+ calendarStartDate:new Date(),
65+ dragableEvents: false,
66+ activeDroppableClass: false,
67+ hoverDroppableClass: false,
68+ navLinks: {
69+ enableToday: true,
70+ enableNextYear: true,
71+ enablePrevYear: true,
72+ p:'‹ Prev',
73+ n:'Next ›',
74+ t:'Today'
75+ },
76+ onMonthChanging: function(dateIn) { return true; },
77+ onMonthChanged: function(dateIn) { return true; },
78+ onEventLinkClick: function(event) { return true; },
79+ onEventBlockClick: function(event) { return true; },
80+ onEventBlockOver: function(event) { return true; },
81+ onEventBlockOut: function(event) { return true; },
82+ onDayLinkClick: function(date) { return true; },
83+ onDayCellClick: function(date) { return true; },
84+ onDayCellDblClick: function(dateIn) { return true; },
85+ onEventDropped: function(event, newDate) { return true; },
86+ locale: {
87+ days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
88+ daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
89+ daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
90+ months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
91+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
92+ weekMin: 'wk'
93+ }
94+ };
95+
96+ var getDateFromId = function(dateIdString) {
97+ //c_01012009
98+ return new Date(dateIdString.substring(6, 10), dateIdString.substring(2, 4)-1, dateIdString.substring(4, 6));
99+ };
100+ var getDateId = function(date) {
101+ var month = ((date.getMonth()+1)<10) ? "0" + (date.getMonth()+1) : (date.getMonth()+1);
102+ var day = (date.getDate() < 10) ? "0" + date.getDate() : date.getDate();
103+ return "c_" + month + day + date.getFullYear();
104+ };
105+ var GetJSONDate = function(jsonDateString) {
106+ //check conditions for different types of accepted dates
107+ var tDt, k;
108+ if (typeof jsonDateString == "string") {
109+
110+ // "2008-12-28T00:00:00.0000000"
111+ var isoRegPlus = /^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2}).([0-9]{7})$/;
112+
113+ // "2008-12-28T00:00:00"
114+ var isoReg = /^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})$/;
115+
116+ //"2008-12-28"
117+ var yyyyMMdd = /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/;
118+
119+ // "new Date(2009, 1, 1)"
120+ // "new Date(1230444000000)
121+ var newReg = /^new/;
122+
123+ // "\/Date(1234418400000-0600)\/"
124+ var stdReg = /^\\\/Date\(([0-9]{13})-([0-9]{4})\)\\\/$/;
125+
126+ if (k = jsonDateString.match(isoRegPlus)) {
127+ return new Date(k[1],k[2]-1,k[3]);
128+ } else if (k = jsonDateString.match(isoReg)) {
129+ return new Date(k[1],k[2]-1,k[3]);
130+ } else if (k = jsonDateString.match(yyyyMMdd)) {
131+ return new Date(k[1],k[2]-1,k[3]);
132+ }
133+
134+ if (k = jsonDateString.match(stdReg)) {
135+ return new Date(k[1]);
136+ }
137+
138+ if (k = jsonDateString.match(newReg)) {
139+ return eval('(' + jsonDateString + ')');
140+ }
141+
142+ return tdt;
143+ }
144+ };
145+ jQuery.jMonthCalendar = jQuery.J = function() {};
146+
147+
148+
149+ jQuery.J.DrawCalendar = function(dateIn){
150+ var today = defaults.calendarStartDate;
151+ var d;
152+
153+ if(dateIn == undefined) {
154+ //start from this month
155+ d = new Date(today.getFullYear(), today.getMonth(), 1);
156+ } else {
157+ //start from the passed in date
158+ d = dateIn;
159+ d.setDate(1);
160+ }
161+
162+
163+ // Create Previous Month link for later
164+ var prevMonth = d.getMonth() == 0 ? new Date(d.getFullYear()-1, 11, 1) : new Date(d.getFullYear(), d.getMonth()-1, 1);
165+ var prevMLink = jQuery('<div class="MonthNavPrev"><a href="" class="link-prev">'+ defaults.navLinks.p +'</a></div>').click(function() {
166+ jQuery.J.ChangeMonth(prevMonth);
167+ return false;
168+ });
169+
170+ //Create Next Month link for later
171+ var nextMonth = d.getMonth() == 11 ? new Date(d.getFullYear()+1, 0, 1) : new Date(d.getFullYear(), d.getMonth()+1, 1);
172+ var nextMLink = jQuery('<div class="MonthNavNext"><a href="" class="link-next">'+ defaults.navLinks.n +'</a></div>').click(function() {
173+ jQuery.J.ChangeMonth(nextMonth);
174+ return false;
175+ });
176+
177+ //Create Previous Year link for later
178+ var prevYear = new Date(d.getFullYear()-1, d.getMonth(), d.getDate());
179+ var prevYLink;
180+ if(defaults.navLinks.enablePrevYear) {
181+ prevYLink = jQuery('<div class="YearNavPrev"><a href="">'+ prevYear.getFullYear() +'</a></div>').click(function() {
182+ jQuery.J.ChangeMonth(prevYear);
183+ return false;
184+ });
185+ }
186+
187+ //Create Next Year link for later
188+ var nextYear = new Date(d.getFullYear()+1, d.getMonth(), d.getDate());
189+ var nextYLink;
190+ if(defaults.navLinks.enableNextYear) {
191+ nextYLink = jQuery('<div class="YearNavNext"><a href="">'+ nextYear.getFullYear() +'</a></div>').click(function() {
192+ jQuery.J.ChangeMonth(nextYear);
193+ return false;
194+ });
195+ }
196+
197+ var todayLink;
198+ if(defaults.navLinks.enableToday) {
199+ //Create Today link for later
200+ todayLink = jQuery('<div class="TodayLink"><a href="" class="link-today">'+ defaults.navLinks.t +'</a></div>').click(function() {
201+ jQuery.J.ChangeMonth(new Date());
202+ return false;
203+ });
204+ }
205+
206+ //Build up the Header first, Navigation
207+ var navRow = jQuery('<tr><td colspan="7"><div class="FormHeader MonthNavigation"></div></td></tr>').css({ "height" : defaults.navHeight });
208+ var monthNavHead = jQuery('.MonthNavigation', navRow);
209+
210+ monthNavHead.append(prevMLink, nextMLink);
211+ if(defaults.navLinks.enableToday) { monthNavHead.append(todayLink); }
212+
213+ monthNavHead.append(jQuery('<div class="MonthName"></div>').append(defaults.locale.months[d.getMonth()] + " " + d.getFullYear()));
214+
215+ if(defaults.navLinks.enableNextYear) { monthNavHead.append(nextYLink); }
216+ if(defaults.navLinks.enablePrevYear) { monthNavHead.append(prevYLink); }
217+
218+
219+ // Days
220+ var headRow = jQuery("<tr></tr>").css({
221+ "height" : defaults.labelHeight
222+ });
223+
224+ for (var i=defaults.firstDayOfWeek; i<defaults.firstDayOfWeek+7; i++) {
225+ var weekday = i%7;
226+ var wordday = defaults.locale.days[weekday];
227+ headRow.append('<th title="' + wordday + '" class="DateHeader' + (weekday == 0 || weekday == 6 ? ' Weekend' : '') + '"><span>' + wordday + '</span></th>');
228+ }
229+
230+ headRow = jQuery("<thead id=\"CalendarHead\"></thead>").append(headRow);
231+ headRow = headRow.prepend(navRow);
232+
233+
234+ //Build up the Body
235+ var tBody = jQuery('<tbody id="CalendarBody"></tbody>');
236+ var isCurrentMonth = (d.getMonth() == today.getMonth() && d.getFullYear() == today.getFullYear());
237+ var maxDays = Date.getDaysInMonth(d.getFullYear(), d.getMonth());
238+
239+
240+ //what is the currect day #
241+ var curDay = defaults.firstDayOfWeek - d.getDay();
242+ if (curDay > 0) curDay -= 7
243+ //alert(curDay);
244+
245+ var t = (maxDays + Math.abs(curDay));
246+
247+ _beginDate = new Date(d.getFullYear(), d.getMonth(), curDay+1);
248+ _endDate = new Date(d.getFullYear(), d.getMonth()+1, (7-(t %= 7)) == 7 ? 0 : (7-(t %= 7)));
249+ var _currentDate = new Date(_beginDate.getFullYear(), _beginDate.getMonth(), _beginDate.getDate());
250+
251+
252+ // Render calendar
253+ //<td class=\"DateBox\"><div class=\"DateLabel\"><a href=\"#\">" + val + "</a></div></td>";
254+ var rowCount = 0;
255+ var rowHeight = (defaults.height - defaults.labelHeight - defaults.navHeight) / Math.ceil((maxDays + Math.abs(curDay)) / 7);
256+ //alert("rowHeight=" + rowHeight);
257+
258+ do {
259+ var thisRow = jQuery("<tr></tr>");
260+ thisRow.css({
261+ "height" : rowHeight + "px"
262+ });
263+
264+ for (var i=0; i<7; i++) {
265+ var weekday = (defaults.firstDayOfWeek + i) % 7;
266+ var atts = {'class':"DateBox" + (weekday == 0 || weekday == 6 ? ' Weekend ' : ''),
267+ 'date':_currentDate.toString("M/d/yyyy"),
268+ 'id': getDateId(_currentDate)
269+ };
270+
271+ if (curDay < 0 || curDay >= maxDays) {
272+ atts['class'] += ' Inactive';
273+ } else {
274+ d.setDate(curDay+1);
275+ }
276+
277+ if (isCurrentMonth && curDay+1 == today.getDate()) {
278+ dayStr = curDay+1;
279+ atts['class'] += ' Today';
280+ }
281+
282+ //DateBox Events
283+ var dateLink = jQuery('<div class="DateLabel"><a href="">' + _currentDate.getDate() + '</a></div>').click(function(e) {
284+ defaults.onDayLinkClick(new Date($(this).parent().attr("date")));
285+ e.stopPropagation();
286+ });
287+
288+ var dateBox = jQuery("<td></td>").attr(atts).append(dateLink).dblclick(function(e) {
289+ defaults.onDayCellDblClick(new Date($(this).attr("date")));
290+ e.stopPropagation();
291+ }).click(function(e) {
292+ defaults.onDayCellClick(new Date($(this).attr("date")));
293+ e.stopPropagation();
294+ });
295+
296+ if (defaults.dragableEvents) {
297+ dateBox.droppable({
298+ hoverClass: defaults.hoverDroppableClass,
299+ activeClass: defaults.activeDroppableClass,
300+ drop: function(e, ui) {
301+ ui.draggable.attr("style", "position: relative; display: block;");
302+ $(this).append(ui.draggable);
303+ var event;
304+ $.each(calendarEvents, function() {
305+ if (this.EventID == ui.draggable.attr("id")) {
306+ event = this;
307+ }
308+ });
309+ defaults.onEventDropped(event, $(this).attr("date"));
310+ return false;
311+ }
312+ });
313+ }
314+
315+ thisRow.append(dateBox);
316+
317+ curDay++;
318+ _currentDate.addDays(1);
319+ }
320+
321+ rowCount++;
322+ tBody.append(thisRow);
323+ } while (curDay < maxDays);
324+
325+
326+ var a = jQuery(ids.container).css({ "width" : defaults.width + "px", "height" : defaults.height + "px" });
327+ var cal = jQuery('<table class="MonthlyCalendar" cellpadding="0" tablespacing="0"></table>').append(headRow, tBody);
328+
329+ a.hide();
330+ a.html(cal);
331+ a.fadeIn("normal");
332+
333+ DrawEventsOnCalendar();
334+ }
335+
336+ var DrawEventsOnCalendar = function() {
337+ if (calendarEvents && calendarEvents.length > 0) {
338+ var headHeight = defaults.labelHeight + defaults.navHeight;
339+ var dtLabelHeight = jQuery(".DateLabel:first", ids.container).outerHeight();
340+
341+
342+ jQuery.each(calendarEvents, function(){
343+ var ev = this;
344+ //Date Parse the JSON to create a new Date to work with here
345+ var sDt, eDt;
346+
347+ if(ev.StartDateTime) {
348+ if (typeof ev.StartDateTime == 'object' && ev.StartDateTime.getDate) { sDt = ev.StartDateTime; }
349+ if (typeof ev.StartDateTime == 'string' && ev.StartDateTime.split) { sDt = GetJSONDate(ev.StartDateTime); }
350+ } else if(ev.Date) { // DEPRECATED
351+ if (typeof ev.Date == 'object' && ev.Date.getDate) { sDt = ev.Date; }
352+ if (typeof ev.Date == 'string' && ev.Date.split) { sDt = GetJSONDate(ev.Date); }
353+ } else {
354+ return; //no start date, or legacy date. no event.
355+ }
356+
357+ if(ev.EndDateTime) {
358+ if (typeof ev.EndDateTime == 'object' && ev.EndDateTime.getDate) { eDt = ev.EndDateTime; }
359+ if (typeof ev.EndDateTime == 'string' && ev.EndDateTime.split) { eDt = GetJSONDate(ev.EndDateTime); }
360+ }
361+
362+
363+ //is the start date in range, put it on the calendar?
364+ //handle multi day range first
365+
366+
367+ if(sDt) {
368+ if ((sDt >= _beginDate) && (sDt <= _endDate)) {
369+ var cell = jQuery("#" + getDateId(sDt), jQuery(ids.container));
370+ var label = jQuery(".DateLabel", cell);
371+
372+ var link = jQuery('<a href="' + ev.URL + '">' + ev.Title + '</a>');
373+ link.click(function(e) {
374+ defaults.onEventLinkClick(ev);
375+ e.stopPropagation();
376+ });
377+ var event = jQuery('<div class="Event" id="Event_' + ev.EventID + '"></div>').append(link);
378+
379+
380+ if(ev.CssClass) { event.addClass(ev.CssClass) }
381+ event.click(function(e) {
382+ defaults.onEventBlockClick(ev);
383+ e.stopPropagation();
384+ });
385+ event.hover(function() { defaults.onEventBlockOver(ev); }, function() { defaults.onEventBlockOut(ev); })
386+
387+ if (defaults.dragableEvents) {
388+ event.draggable({ containment: '#CalendarBody' });
389+ }
390+
391+ event.hide();
392+ cell.append(event);
393+ event.fadeIn("normal");
394+ }
395+ }
396+ });
397+ }
398+ }
399+
400+ var ClearEventsOnCalendar = function() {
401+ jQuery(".Event", jQuery(ids.container)).remove();
402+ }
403+
404+
405+
406+ jQuery.J.AddEvents = function(eventCollection) {
407+ if(eventCollection) {
408+ if(eventCollection.length > 1) {
409+ jQuery.each(eventCollection, function() {
410+ calendarEvents.push(this);
411+ });
412+ } else {
413+ //add new single event to ed of array
414+ calendarEvents.push(eventCollection);
415+ }
416+ ClearEventsOnCalendar();
417+ DrawEventsOnCalendar();
418+ }
419+ }
420+
421+ jQuery.J.ReplaceEventCollection = function(eventCollection) {
422+ if(eventCollection) {
423+ calendarEvents = eventCollection;
424+ }
425+ }
426+
427+ jQuery.J.ChangeMonth = function(dateIn) {
428+ defaults.onMonthChanging(dateIn);
429+ jQuery.J.DrawCalendar(dateIn);
430+ defaults.onMonthChanged(dateIn);
431+ }
432+
433+ jQuery.J.Initialize = function(options, events) {
434+ var today = new Date();
435+
436+ options = jQuery.extend(defaults, options);
437+
438+ jQuery.J.DrawCalendar();
439+
440+ if(events)
441+ {
442+ calendarEvents = events;
443+ //Load for the current month
444+ DrawEventsOnCalendar();
445+ }
446+ };
447+})(jQuery);
448+/**
449+ * Version: 1.0 Alpha-1
450+ * Build Date: 13-Nov-2007
451+ * Copyright (c) 2006-2007, Coolite Inc. (http://www.coolite.com/). All rights reserved.
452+ * License: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/.
453+ * Website: http://www.datejs.com/ or http://www.coolite.com/datejs/
454+ */
455+Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|after|from)/i,subtract:/^(\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}};
456+Date.getMonthNumberFromName=function(name){var n=Date.CultureInfo.monthNames,m=Date.CultureInfo.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
457+return-1;};Date.getDayNumberFromName=function(name){var n=Date.CultureInfo.dayNames,m=Date.CultureInfo.abbreviatedDayNames,o=Date.CultureInfo.shortestDayNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
458+return-1;};Date.isLeapYear=function(year){return(((year%4===0)&&(year%100!==0))||(year%400===0));};Date.getDaysInMonth=function(year,month){return[31,(Date.isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month];};Date.getTimezoneOffset=function(s,dst){return(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST[s.toUpperCase()]:Date.CultureInfo.abbreviatedTimeZoneStandard[s.toUpperCase()];};Date.getTimezoneAbbreviation=function(offset,dst){var n=(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST:Date.CultureInfo.abbreviatedTimeZoneStandard,p;for(p in n){if(n[p]===offset){return p;}}
459+return null;};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.compareTo=function(date){if(isNaN(this)){throw new Error(this);}
460+if(date instanceof Date&&!isNaN(date)){return(this>date)?1:(this<date)?-1:0;}else{throw new TypeError(date);}};Date.prototype.equals=function(date){return(this.compareTo(date)===0);};Date.prototype.between=function(start,end){var t=this.getTime();return t>=start.getTime()&&t<=end.getTime();};Date.prototype.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};Date.prototype.addSeconds=function(value){return this.addMilliseconds(value*1000);};Date.prototype.addMinutes=function(value){return this.addMilliseconds(value*60000);};Date.prototype.addHours=function(value){return this.addMilliseconds(value*3600000);};Date.prototype.addDays=function(value){return this.addMilliseconds(value*86400000);};Date.prototype.addWeeks=function(value){return this.addMilliseconds(value*604800000);};Date.prototype.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,this.getDaysInMonth()));return this;};Date.prototype.addYears=function(value){return this.addMonths(value*12);};Date.prototype.add=function(config){if(typeof config=="number"){this._orient=config;return this;}
461+var x=config;if(x.millisecond||x.milliseconds){this.addMilliseconds(x.millisecond||x.milliseconds);}
462+if(x.second||x.seconds){this.addSeconds(x.second||x.seconds);}
463+if(x.minute||x.minutes){this.addMinutes(x.minute||x.minutes);}
464+if(x.hour||x.hours){this.addHours(x.hour||x.hours);}
465+if(x.month||x.months){this.addMonths(x.month||x.months);}
466+if(x.year||x.years){this.addYears(x.year||x.years);}
467+if(x.day||x.days){this.addDays(x.day||x.days);}
468+return this;};Date._validate=function(value,min,max,name){if(typeof value!="number"){throw new TypeError(value+" is not a Number.");}else if(value<min||value>max){throw new RangeError(value+" is not a valid value for "+name+".");}
469+return true;};Date.validateMillisecond=function(n){return Date._validate(n,0,999,"milliseconds");};Date.validateSecond=function(n){return Date._validate(n,0,59,"seconds");};Date.validateMinute=function(n){return Date._validate(n,0,59,"minutes");};Date.validateHour=function(n){return Date._validate(n,0,23,"hours");};Date.validateDay=function(n,year,month){return Date._validate(n,1,Date.getDaysInMonth(year,month),"days");};Date.validateMonth=function(n){return Date._validate(n,0,11,"months");};Date.validateYear=function(n){return Date._validate(n,1,9999,"seconds");};Date.prototype.set=function(config){var x=config;if(!x.millisecond&&x.millisecond!==0){x.millisecond=-1;}
470+if(!x.second&&x.second!==0){x.second=-1;}
471+if(!x.minute&&x.minute!==0){x.minute=-1;}
472+if(!x.hour&&x.hour!==0){x.hour=-1;}
473+if(!x.day&&x.day!==0){x.day=-1;}
474+if(!x.month&&x.month!==0){x.month=-1;}
475+if(!x.year&&x.year!==0){x.year=-1;}
476+if(x.millisecond!=-1&&Date.validateMillisecond(x.millisecond)){this.addMilliseconds(x.millisecond-this.getMilliseconds());}
477+if(x.second!=-1&&Date.validateSecond(x.second)){this.addSeconds(x.second-this.getSeconds());}
478+if(x.minute!=-1&&Date.validateMinute(x.minute)){this.addMinutes(x.minute-this.getMinutes());}
479+if(x.hour!=-1&&Date.validateHour(x.hour)){this.addHours(x.hour-this.getHours());}
480+if(x.month!==-1&&Date.validateMonth(x.month)){this.addMonths(x.month-this.getMonth());}
481+if(x.year!=-1&&Date.validateYear(x.year)){this.addYears(x.year-this.getFullYear());}
482+if(x.day!=-1&&Date.validateDay(x.day,this.getFullYear(),this.getMonth())){this.addDays(x.day-this.getDate());}
483+if(x.timezone){this.setTimezone(x.timezone);}
484+if(x.timezoneOffset){this.setTimezoneOffset(x.timezoneOffset);}
485+return this;};Date.prototype.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};Date.prototype.isLeapYear=function(){var y=this.getFullYear();return(((y%4===0)&&(y%100!==0))||(y%400===0));};Date.prototype.isWeekday=function(){return!(this.is().sat()||this.is().sun());};Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth());};Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1});};Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()});};Date.prototype.moveToDayOfWeek=function(day,orient){var diff=(day-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};Date.prototype.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000);};Date.prototype.getWeekOfYear=function(firstDayOfWeek){var y=this.getFullYear(),m=this.getMonth(),d=this.getDate();var dow=firstDayOfWeek||Date.CultureInfo.firstDayOfWeek;var offset=7+1-new Date(y,0,1).getDay();if(offset==8){offset=1;}
486+var daynum=((Date.UTC(y,m,d,0,0,0)-Date.UTC(y,0,1,0,0,0))/86400000)+1;var w=Math.floor((daynum-offset+7)/7);if(w===dow){y--;var prevOffset=7+1-new Date(y,0,1).getDay();if(prevOffset==2||prevOffset==8){w=53;}else{w=52;}}
487+return w;};Date.prototype.isDST=function(){console.log('isDST');return this.toString().match(/(E|C|M|P)(S|D)T/)[2]=="D";};Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST());};Date.prototype.setTimezoneOffset=function(s){var here=this.getTimezoneOffset(),there=Number(s)*-6/10;this.addMinutes(there-here);return this;};Date.prototype.setTimezone=function(s){return this.setTimezoneOffset(Date.getTimezoneOffset(s));};Date.prototype.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r[0]+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};Date.prototype.getDayName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()];};Date.prototype.getMonthName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()];};Date.prototype._toString=Date.prototype.toString;Date.prototype.toString=function(format){var self=this;var p=function p(s){return(s.toString().length==1)?"0"+s:s;};return format?format.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(format){switch(format){case"hh":return p(self.getHours()<13?self.getHours():(self.getHours()-12));case"h":return self.getHours()<13?self.getHours():(self.getHours()-12);case"HH":return p(self.getHours());case"H":return self.getHours();case"mm":return p(self.getMinutes());case"m":return self.getMinutes();case"ss":return p(self.getSeconds());case"s":return self.getSeconds();case"yyyy":return self.getFullYear();case"yy":return self.getFullYear().toString().substring(2,4);case"dddd":return self.getDayName();case"ddd":return self.getDayName(true);case"dd":return p(self.getDate());case"d":return self.getDate().toString();case"MMMM":return self.getMonthName();case"MMM":return self.getMonthName(true);case"MM":return p((self.getMonth()+1));case"M":return self.getMonth()+1;case"t":return self.getHours()<12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case"tt":return self.getHours()<12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case"zzz":case"zz":case"z":return"";}}):this._toString();};
488+Date.now=function(){return new Date();};Date.today=function(){return Date.now().clearTime();};Date.prototype._orient=+1;Date.prototype.next=function(){this._orient=+1;return this;};Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){this._orient=-1;return this;};Date.prototype._is=false;Date.prototype.is=function(){this._is=true;return this;};Number.prototype._dateElement="day";Number.prototype.fromNow=function(){var c={};c[this._dateElement]=this;return Date.now().add(c);};Number.prototype.ago=function(){var c={};c[this._dateElement]=this*-1;return Date.now().add(c);};(function(){var $D=Date.prototype,$N=Number.prototype;var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),de;var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;}
489+return this.moveToDayOfWeek(n,this._orient);};};for(var i=0;i<dx.length;i++){$D[dx[i]]=$D[dx[i].substring(0,3)]=df(i);}
490+var mf=function(n){return function(){if(this._is){this._is=false;return this.getMonth()===n;}
491+return this.moveToMonth(n,this._orient);};};for(var j=0;j<mx.length;j++){$D[mx[j]]=$D[mx[j].substring(0,3)]=mf(j);}
492+var ef=function(j){return function(){if(j.substring(j.length-1)!="s"){j+="s";}
493+return this["add"+j](this._orient);};};var nf=function(n){return function(){this._dateElement=n;return this;};};for(var k=0;k<px.length;k++){de=px[k].toLowerCase();$D[de]=$D[de+"s"]=ef(px[k]);$N[de]=$N[de+"s"]=nf(de);}}());Date.prototype.toJSONString=function(){return this.toString("yyyy-MM-ddThh:mm:ssZ");};Date.prototype.toShortDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortDatePattern);};Date.prototype.toLongDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.longDatePattern);};Date.prototype.toShortTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortTimePattern);};Date.prototype.toLongTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.longTimePattern);};Date.prototype.getOrdinal=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};
494+(function(){Date.Parsing={Exception:function(s){this.message="Parse error at '"+s.substring(0,10)+" ...'";}};var $P=Date.Parsing;var _=$P.Operators={rtoken:function(r){return function(s){var mx=s.match(r);if(mx){return([mx[0],s.substring(mx[0].length)]);}else{throw new $P.Exception(s);}};},token:function(s){return function(s){return _.rtoken(new RegExp("^\s*"+s+"\s*"))(s);};},stoken:function(s){return _.rtoken(new RegExp("^"+s));},until:function(p){return function(s){var qx=[],rx=null;while(s.length){try{rx=p.call(this,s);}catch(e){qx.push(rx[0]);s=rx[1];continue;}
495+break;}
496+return[qx,s];};},many:function(p){return function(s){var rx=[],r=null;while(s.length){try{r=p.call(this,s);}catch(e){return[rx,s];}
497+rx.push(r[0]);s=r[1];}
498+return[rx,s];};},optional:function(p){return function(s){var r=null;try{r=p.call(this,s);}catch(e){return[null,s];}
499+return[r[0],r[1]];};},not:function(p){return function(s){try{p.call(this,s);}catch(e){return[null,s];}
500+throw new $P.Exception(s);};},ignore:function(p){return p?function(s){var r=null;r=p.call(this,s);return[null,r[1]];}:null;},product:function(){var px=arguments[0],qx=Array.prototype.slice.call(arguments,1),rx=[];for(var i=0;i<px.length;i++){rx.push(_.each(px[i],qx));}
501+return rx;},cache:function(rule){var cache={},r=null;return function(s){try{r=cache[s]=(cache[s]||rule.call(this,s));}catch(e){r=cache[s]=e;}
502+if(r instanceof $P.Exception){throw r;}else{return r;}};},any:function(){var px=arguments;return function(s){var r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
503+try{r=(px[i].call(this,s));}catch(e){r=null;}
504+if(r){return r;}}
505+throw new $P.Exception(s);};},each:function(){var px=arguments;return function(s){var rx=[],r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
506+try{r=(px[i].call(this,s));}catch(e){throw new $P.Exception(s);}
507+rx.push(r[0]);s=r[1];}
508+return[rx,s];};},all:function(){var px=arguments,_=_;return _.each(_.optional(px));},sequence:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;if(px.length==1){return px[0];}
509+return function(s){var r=null,q=null;var rx=[];for(var i=0;i<px.length;i++){try{r=px[i].call(this,s);}catch(e){break;}
510+rx.push(r[0]);try{q=d.call(this,r[1]);}catch(ex){q=null;break;}
511+s=q[1];}
512+if(!r){throw new $P.Exception(s);}
513+if(q){throw new $P.Exception(q[1]);}
514+if(c){try{r=c.call(this,r[1]);}catch(ey){throw new $P.Exception(r[1]);}}
515+return[rx,(r?r[1]:s)];};},between:function(d1,p,d2){d2=d2||d1;var _fn=_.each(_.ignore(d1),p,_.ignore(d2));return function(s){var rx=_fn.call(this,s);return[[rx[0][0],r[0][2]],rx[1]];};},list:function(p,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return(p instanceof Array?_.each(_.product(p.slice(0,-1),_.ignore(d)),p.slice(-1),_.ignore(c)):_.each(_.many(_.each(p,_.ignore(d))),px,_.ignore(c)));},set:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return function(s){var r=null,p=null,q=null,rx=null,best=[[],s],last=false;for(var i=0;i<px.length;i++){q=null;p=null;r=null;last=(px.length==1);try{r=px[i].call(this,s);}catch(e){continue;}
516+rx=[[r[0]],r[1]];if(r[1].length>0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;}
517+if(!last&&q[1].length===0){last=true;}
518+if(!last){var qx=[];for(var j=0;j<px.length;j++){if(i!=j){qx.push(px[j]);}}
519+p=_.set(qx,d).call(this,q[1]);if(p[0].length>0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}}
520+if(rx[1].length<best[1].length){best=rx;}
521+if(best[1].length===0){break;}}
522+if(best[0].length===0){return best;}
523+if(c){try{q=c.call(this,best[1]);}catch(ey){throw new $P.Exception(best[1]);}
524+best[1]=q[1];}
525+return best;};},forward:function(gr,fname){return function(s){return gr[fname].call(this,s);};},replace:function(rule,repl){return function(s){var r=rule.call(this,s);return[repl,r[1]];};},process:function(rule,fn){return function(s){var r=rule.call(this,s);return[fn.call(this,r[0]),r[1]];};},min:function(min,rule){return function(s){var rx=rule.call(this,s);if(rx[0].length<min){throw new $P.Exception(s);}
526+return rx;};}};var _generator=function(op){return function(){var args=null,rx=[];if(arguments.length>1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];}
527+if(args){for(var i=0,px=args.shift();i<px.length;i++){args.unshift(px[i]);rx.push(op.apply(null,args));args.shift();return rx;}}else{return op.apply(null,arguments);}};};var gx="optional not ignore cache".split(/\s/);for(var i=0;i<gx.length;i++){_[gx[i]]=_generator(_[gx[i]]);}
528+var _vector=function(op){return function(){if(arguments[0]instanceof Array){return op.apply(null,arguments[0]);}else{return op.apply(null,arguments);}};};var vx="each any all".split(/\s/);for(var j=0;j<vx.length;j++){_[vx[j]]=_vector(_[vx[j]]);}}());(function(){var flattenAndCompact=function(ax){var rx=[];for(var i=0;i<ax.length;i++){if(ax[i]instanceof Array){rx=rx.concat(flattenAndCompact(ax[i]));}else{if(ax[i]){rx.push(ax[i]);}}}
529+return rx;};Date.Grammar={};Date.Translator={hour:function(s){return function(){this.hour=Number(s);};},minute:function(s){return function(){this.minute=Number(s);};},second:function(s){return function(){this.second=Number(s);};},meridian:function(s){return function(){this.meridian=s.slice(0,1).toLowerCase();};},timezone:function(s){return function(){var n=s.replace(/[^\d\+\-]/g,"");if(n.length){this.timezoneOffset=Number(n);}else{this.timezone=s.toLowerCase();}};},day:function(x){var s=x[0];return function(){this.day=Number(s.match(/\d+/)[0]);};},month:function(s){return function(){this.month=((s.length==3)?Date.getMonthNumberFromName(s):(Number(s)-1));};},year:function(s){return function(){var n=Number(s);this.year=((s.length>2)?n:(n+(((n+2000)<Date.CultureInfo.twoDigitYearMax)?2000:1900)));};},rday:function(s){return function(){switch(s){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0;this.now=true;break;}};},finishExact:function(x){x=(x instanceof Array)?x:[x];var now=new Date();this.year=now.getFullYear();this.month=now.getMonth();this.day=1;this.hour=0;this.minute=0;this.second=0;for(var i=0;i<x.length;i++){if(x[i]){x[i].call(this);}}
530+this.hour=(this.meridian=="p"&&this.hour<13)?this.hour+12:this.hour;if(this.day>Date.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.");}
531+var r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});}
532+return r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;}
533+for(var i=0;i<x.length;i++){if(typeof x[i]=="function"){x[i].call(this);}}
534+if(this.now){return new Date();}
535+var today=Date.today();var method=null;var expression=!!(this.days!=null||this.orient||this.operator);if(expression){var gap,mod,orient;orient=((this.orient=="past"||this.operator=="subtract")?-1:1);if(this.weekday){this.unit="day";gap=(Date.getDayNumberFromName(this.weekday)-today.getDay());mod=7;this.days=gap?((gap+(orient*mod))%mod):(orient*mod);}
536+if(this.month){this.unit="month";gap=(this.month-today.getMonth());mod=12;this.months=gap?((gap+(orient*mod))%mod):(orient*mod);this.month=null;}
537+if(!this.unit){this.unit="day";}
538+if(this[this.unit+"s"]==null||this.operator!=null){if(!this.value){this.value=1;}
539+if(this.unit=="week"){this.unit="day";this.value=this.value*7;}
540+this[this.unit+"s"]=this.value*orient;}
541+return today.add(this);}else{if(this.meridian&&this.hour){this.hour=(this.hour<13&&this.meridian=="p")?this.hour+12:this.hour;}
542+if(this.weekday&&!this.day){this.day=(today.addDays((Date.getDayNumberFromName(this.weekday)-today.getDay()))).getDate();}
543+if(this.month&&!this.day){this.day=1;}
544+return today.set(this);}}};var _=Date.Parsing.Operators,g=Date.Grammar,t=Date.Translator,_fn;g.datePartDelimiter=_.rtoken(/^([\s\-\.\,\/\x27]+)/);g.timePartDelimiter=_.stoken(":");g.whiteSpace=_.rtoken(/^\s*/);g.generalDelimiter=_.rtoken(/^(([\s\,]|at|on)+)/);var _C={};g.ctoken=function(keys){var fn=_C[keys];if(!fn){var c=Date.CultureInfo.regexPatterns;var kx=keys.split(/\s+/),px=[];for(var i=0;i<kx.length;i++){px.push(_.replace(_.rtoken(c[kx[i]]),kx[i]));}
545+fn=_C[keys]=_.any.apply(null,px);}
546+return fn;};g.ctoken2=function(key){return _.rtoken(Date.CultureInfo.regexPatterns[key]);};g.h=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),t.hour));g.hh=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/),t.hour));g.H=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),t.hour));g.HH=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/),t.hour));g.m=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.minute));g.mm=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.minute));g.s=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.second));g.ss=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.second));g.hms=_.cache(_.sequence([g.H,g.mm,g.ss],g.timePartDelimiter));g.t=_.cache(_.process(g.ctoken2("shortMeridian"),t.meridian));g.tt=_.cache(_.process(g.ctoken2("longMeridian"),t.meridian));g.z=_.cache(_.process(_.rtoken(/^(\+|\-)?\s*\d\d\d\d?/),t.timezone));g.zz=_.cache(_.process(_.rtoken(/^(\+|\-)\s*\d\d\d\d/),t.timezone));g.zzz=_.cache(_.process(g.ctoken2("timezone"),t.timezone));g.timeSuffix=_.each(_.ignore(g.whiteSpace),_.set([g.tt,g.zzz]));g.time=_.each(_.optional(_.ignore(_.stoken("T"))),g.hms,g.timeSuffix);g.d=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.dd=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.ddd=g.dddd=_.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"),function(s){return function(){this.weekday=s;};}));g.M=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/),t.month));g.MM=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/),t.month));g.MMM=g.MMMM=_.cache(_.process(g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),t.month));g.y=_.cache(_.process(_.rtoken(/^(\d\d?)/),t.year));g.yy=_.cache(_.process(_.rtoken(/^(\d\d)/),t.year));g.yyy=_.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/),t.year));g.yyyy=_.cache(_.process(_.rtoken(/^(\d\d\d\d)/),t.year));_fn=function(){return _.each(_.any.apply(null,arguments),_.not(g.ctoken2("timeContext")));};g.day=_fn(g.d,g.dd);g.month=_fn(g.M,g.MMM);g.year=_fn(g.yyyy,g.yy);g.orientation=_.process(g.ctoken("past future"),function(s){return function(){this.orient=s;};});g.operator=_.process(g.ctoken("add subtract"),function(s){return function(){this.operator=s;};});g.rday=_.process(g.ctoken("yesterday tomorrow today now"),t.rday);g.unit=_.process(g.ctoken("minute hour day week month year"),function(s){return function(){this.unit=s;};});g.value=_.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/),function(s){return function(){this.value=s.replace(/\D/g,"");};});g.expression=_.set([g.rday,g.operator,g.value,g.unit,g.orientation,g.ddd,g.MMM]);_fn=function(){return _.set(arguments,g.datePartDelimiter);};g.mdy=_fn(g.ddd,g.month,g.day,g.year);g.ymd=_fn(g.ddd,g.year,g.month,g.day);g.dmy=_fn(g.ddd,g.day,g.month,g.year);g.date=function(s){return((g[Date.CultureInfo.dateElementOrder]||g.mdy).call(this,s));};g.format=_.process(_.many(_.any(_.process(_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(fmt){if(g[fmt]){return g[fmt];}else{throw Date.Parsing.Exception(fmt);}}),_.process(_.rtoken(/^[^dMyhHmstz]+/),function(s){return _.ignore(_.stoken(s));}))),function(rules){return _.process(_.each.apply(null,rules),t.finishExact);});var _F={};var _get=function(f){return _F[f]=(_F[f]||g.format(f)[0]);};g.formats=function(fx){if(fx instanceof Array){var rx=[];for(var i=0;i<fx.length;i++){rx.push(_get(fx[i]));}
547+return _.any.apply(null,rx);}else{return _get(fx);}};g._formats=g.formats(["yyyy-MM-ddTHH:mm:ss","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","d"]);g._start=_.process(_.set([g.date,g.time,g.expression],g.generalDelimiter,g.whiteSpace),t.finish);g.start=function(s){try{var r=g._formats.call({},s);if(r[1].length===0){return r;}}catch(e){}
548+return g._start.call({},s);};}());Date._parse=Date.parse;Date.parse=function(s){var r=null;if(!s){return null;}
549+try{r=Date.Grammar.start.call({},s);}catch(e){return null;}
550+return((r[1].length===0)?r[0]:null);};Date.getParseFunction=function(fx){var fn=Date.Grammar.formats(fx);return function(s){var r=null;try{r=fn.call({},s);}catch(e){return null;}
551+return((r[1].length===0)?r[0]:null);};};Date.parseExact=function(s,fx){return Date.getParseFunction(fx)(s);};
552
553=== added file 'js/jMonthCalendar.min.js'
554--- js/jMonthCalendar.min.js 1970-01-01 00:00:00 +0000
555+++ js/jMonthCalendar.min.js 2012-08-29 11:42:51 +0000
556@@ -0,0 +1,10 @@
557+/*
558+* Title: jMonthCalendar 1.2.2
559+* Dependencies: jQuery 1.3.0 +
560+* Author: Kyle LeNeau
561+* Email: kyle.leneau@gmail.com
562+* Project Hompage: http://www.bytecyclist.com/projects/jmonthcalendar
563+* Source: http://code.google.com/p/jmonthcalendar
564+*
565+*/
566+(function($){var ids={container:"#jMonthCalendar",head:"#CalendarHead",body:"#CalendarBody"};var _selectedDate;var _beginDate;var _endDate;var calendarEvents;var defaults={height:650,width:980,navHeight:25,labelHeight:25,firstDayOfWeek:0,calendarStartDate:new Date(),dragableEvents:false,activeDroppableClass:false,hoverDroppableClass:false,navLinks:{enableToday:true,enableNextYear:true,enablePrevYear:true,p:"&lsaquo; Prev",n:"Next &rsaquo;",t:"Today"},onMonthChanging:function(dateIn){return true},onMonthChanged:function(dateIn){return true},onEventLinkClick:function(event){return true},onEventBlockClick:function(event){return true},onEventBlockOver:function(event){return true},onEventBlockOut:function(event){return true},onDayLinkClick:function(date){return true},onDayCellClick:function(date){return true},onDayCellDblClick:function(dateIn){return true},onEventDropped:function(event,newDate){return true},locale:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekMin:"wk"}};var getDateFromId=function(dateIdString){return new Date(dateIdString.substring(6,10),dateIdString.substring(2,4)-1,dateIdString.substring(4,6))};var getDateId=function(date){var month=((date.getMonth()+1)<10)?"0"+(date.getMonth()+1):(date.getMonth()+1);var day=(date.getDate()<10)?"0"+date.getDate():date.getDate();return"c_"+month+day+date.getFullYear()};var GetJSONDate=function(jsonDateString){var tDt,k;if(typeof jsonDateString=="string"){var isoRegPlus=/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2}).([0-9]{7})$/;var isoReg=/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})$/;var yyyyMMdd=/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/;var newReg=/^new/;var stdReg=/^\\\/Date\(([0-9]{13})-([0-9]{4})\)\\\/$/;if(k=jsonDateString.match(isoRegPlus)){return new Date(k[1],k[2]-1,k[3])}else{if(k=jsonDateString.match(isoReg)){return new Date(k[1],k[2]-1,k[3])}else{if(k=jsonDateString.match(yyyyMMdd)){return new Date(k[1],k[2]-1,k[3])}}}if(k=jsonDateString.match(stdReg)){return new Date(k[1])}if(k=jsonDateString.match(newReg)){return eval("("+jsonDateString+")")}return tdt}};jQuery.jMonthCalendar=jQuery.J=function(){};jQuery.J.DrawCalendar=function(dateIn){var today=defaults.calendarStartDate;var d;if(dateIn==undefined){d=new Date(today.getFullYear(),today.getMonth(),1)}else{d=dateIn;d.setDate(1)}var prevMonth=d.getMonth()==0?new Date(d.getFullYear()-1,11,1):new Date(d.getFullYear(),d.getMonth()-1,1);var prevMLink=jQuery('<div class="MonthNavPrev"><a href="" class="link-prev">'+defaults.navLinks.p+"</a></div>").click(function(){jQuery.J.ChangeMonth(prevMonth);return false});var nextMonth=d.getMonth()==11?new Date(d.getFullYear()+1,0,1):new Date(d.getFullYear(),d.getMonth()+1,1);var nextMLink=jQuery('<div class="MonthNavNext"><a href="" class="link-next">'+defaults.navLinks.n+"</a></div>").click(function(){jQuery.J.ChangeMonth(nextMonth);return false});var prevYear=new Date(d.getFullYear()-1,d.getMonth(),d.getDate());var prevYLink;if(defaults.navLinks.enablePrevYear){prevYLink=jQuery('<div class="YearNavPrev"><a href="">'+prevYear.getFullYear()+"</a></div>").click(function(){jQuery.J.ChangeMonth(prevYear);return false})}var nextYear=new Date(d.getFullYear()+1,d.getMonth(),d.getDate());var nextYLink;if(defaults.navLinks.enableNextYear){nextYLink=jQuery('<div class="YearNavNext"><a href="">'+nextYear.getFullYear()+"</a></div>").click(function(){jQuery.J.ChangeMonth(nextYear);return false})}var todayLink;if(defaults.navLinks.enableToday){todayLink=jQuery('<div class="TodayLink"><a href="" class="link-today">'+defaults.navLinks.t+"</a></div>").click(function(){jQuery.J.ChangeMonth(new Date());return false})}var navRow=jQuery('<tr><td colspan="7"><div class="FormHeader MonthNavigation"></div></td></tr>').css({height:defaults.navHeight});var monthNavHead=jQuery(".MonthNavigation",navRow);monthNavHead.append(prevMLink,nextMLink);if(defaults.navLinks.enableToday){monthNavHead.append(todayLink)}monthNavHead.append(jQuery('<div class="MonthName"></div>').append(defaults.locale.months[d.getMonth()]+" "+d.getFullYear()));if(defaults.navLinks.enableNextYear){monthNavHead.append(nextYLink)}if(defaults.navLinks.enablePrevYear){monthNavHead.append(prevYLink)}var headRow=jQuery("<tr></tr>").css({height:defaults.labelHeight});for(var i=defaults.firstDayOfWeek;i<defaults.firstDayOfWeek+7;i++){var weekday=i%7;var wordday=defaults.locale.days[weekday];headRow.append('<th title="'+wordday+'" class="DateHeader'+(weekday==0||weekday==6?" Weekend":"")+'"><span>'+wordday+"</span></th>")}headRow=jQuery('<thead id="CalendarHead"></thead>').append(headRow);headRow=headRow.prepend(navRow);var tBody=jQuery('<tbody id="CalendarBody"></tbody>');var isCurrentMonth=(d.getMonth()==today.getMonth()&&d.getFullYear()==today.getFullYear());var maxDays=Date.getDaysInMonth(d.getFullYear(),d.getMonth());var curDay=defaults.firstDayOfWeek-d.getDay();if(curDay>0){curDay-=7}var t=(maxDays+Math.abs(curDay));_beginDate=new Date(d.getFullYear(),d.getMonth(),curDay+1);_endDate=new Date(d.getFullYear(),d.getMonth()+1,(7-(t%=7))==7?0:(7-(t%=7)));var _currentDate=new Date(_beginDate.getFullYear(),_beginDate.getMonth(),_beginDate.getDate());var rowCount=0;var rowHeight=(defaults.height-defaults.labelHeight-defaults.navHeight)/Math.ceil((maxDays+Math.abs(curDay))/7);do{var thisRow=jQuery("<tr></tr>");thisRow.css({height:rowHeight+"px"});for(var i=0;i<7;i++){var weekday=(defaults.firstDayOfWeek+i)%7;var atts={"class":"DateBox"+(weekday==0||weekday==6?" Weekend ":""),date:_currentDate.toString("M/d/yyyy"),id:getDateId(_currentDate)};if(curDay<0||curDay>=maxDays){atts["class"]+=" Inactive"}else{d.setDate(curDay+1)}if(isCurrentMonth&&curDay+1==today.getDate()){dayStr=curDay+1;atts["class"]+=" Today"}var dateLink=jQuery('<div class="DateLabel"><a href="">'+_currentDate.getDate()+"</a></div>").click(function(e){defaults.onDayLinkClick(new Date($(this).parent().attr("date")));e.stopPropagation()});var dateBox=jQuery("<td></td>").attr(atts).append(dateLink).dblclick(function(e){defaults.onDayCellDblClick(new Date($(this).attr("date")));e.stopPropagation()}).click(function(e){defaults.onDayCellClick(new Date($(this).attr("date")));e.stopPropagation()});if(defaults.dragableEvents){dateBox.droppable({hoverClass:defaults.hoverDroppableClass,activeClass:defaults.activeDroppableClass,drop:function(e,ui){ui.draggable.attr("style","position: relative; display: block;");$(this).append(ui.draggable);var event;$.each(calendarEvents,function(){if(this.EventID==ui.draggable.attr("id")){event=this}});defaults.onEventDropped(event,$(this).attr("date"));return false}})}thisRow.append(dateBox);curDay++;_currentDate.addDays(1)}rowCount++;tBody.append(thisRow)}while(curDay<maxDays);var a=jQuery(ids.container).css({width:defaults.width+"px",height:defaults.height+"px"});var cal=jQuery('<table class="MonthlyCalendar" cellpadding="0" tablespacing="0"></table>').append(headRow,tBody);a.hide();a.html(cal);a.fadeIn("normal");DrawEventsOnCalendar()};var DrawEventsOnCalendar=function(){if(calendarEvents&&calendarEvents.length>0){var headHeight=defaults.labelHeight+defaults.navHeight;var dtLabelHeight=jQuery(".DateLabel:first",ids.container).outerHeight();jQuery.each(calendarEvents,function(){var ev=this;var sDt,eDt;if(ev.StartDateTime){if(typeof ev.StartDateTime=="object"&&ev.StartDateTime.getDate){sDt=ev.StartDateTime}if(typeof ev.StartDateTime=="string"&&ev.StartDateTime.split){sDt=GetJSONDate(ev.StartDateTime)}}else{if(ev.Date){if(typeof ev.Date=="object"&&ev.Date.getDate){sDt=ev.Date}if(typeof ev.Date=="string"&&ev.Date.split){sDt=GetJSONDate(ev.Date)}}else{return}}if(ev.EndDateTime){if(typeof ev.EndDateTime=="object"&&ev.EndDateTime.getDate){eDt=ev.EndDateTime}if(typeof ev.EndDateTime=="string"&&ev.EndDateTime.split){eDt=GetJSONDate(ev.EndDateTime)}}if(sDt){if((sDt>=_beginDate)&&(sDt<=_endDate)){var cell=jQuery("#"+getDateId(sDt),jQuery(ids.container));var label=jQuery(".DateLabel",cell);var link=jQuery('<a href="'+ev.URL+'">'+ev.Title+"</a>");link.click(function(e){defaults.onEventLinkClick(ev);e.stopPropagation()});var event=jQuery('<div class="Event" id="Event_'+ev.EventID+'"></div>').append(link);if(ev.CssClass){event.addClass(ev.CssClass)}event.click(function(e){defaults.onEventBlockClick(ev);e.stopPropagation()});event.hover(function(){defaults.onEventBlockOver(ev)},function(){defaults.onEventBlockOut(ev)});if(defaults.dragableEvents){event.draggable({containment:"#CalendarBody"})}event.hide();cell.append(event);event.fadeIn("normal")}}})}};var ClearEventsOnCalendar=function(){jQuery(".Event",jQuery(ids.container)).remove()};jQuery.J.AddEvents=function(eventCollection){if(eventCollection){if(eventCollection.length>1){jQuery.each(eventCollection,function(){calendarEvents.push(this)})}else{calendarEvents.push(eventCollection)}ClearEventsOnCalendar();DrawEventsOnCalendar()}};jQuery.J.ReplaceEventCollection=function(eventCollection){if(eventCollection){calendarEvents=eventCollection}};jQuery.J.ChangeMonth=function(dateIn){defaults.onMonthChanging(dateIn);jQuery.J.DrawCalendar(dateIn);defaults.onMonthChanged(dateIn)};jQuery.J.Initialize=function(options,events){var today=new Date();options=jQuery.extend(defaults,options);jQuery.J.DrawCalendar();if(events){calendarEvents=events;DrawEventsOnCalendar()}}})(jQuery);Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|after|from)/i,subtract:/^(\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}};Date.getMonthNumberFromName=function(b){var e=Date.CultureInfo.monthNames,a=Date.CultureInfo.abbreviatedMonthNames,d=b.toLowerCase();for(var c=0;c<e.length;c++){if(e[c].toLowerCase()==d||a[c].toLowerCase()==d){return c}}return -1};Date.getDayNumberFromName=function(b){var f=Date.CultureInfo.dayNames,a=Date.CultureInfo.abbreviatedDayNames,e=Date.CultureInfo.shortestDayNames,d=b.toLowerCase();for(var c=0;c<f.length;c++){if(f[c].toLowerCase()==d||a[c].toLowerCase()==d){return c}}return -1};Date.isLeapYear=function(a){return(((a%4===0)&&(a%100!==0))||(a%400===0))};Date.getDaysInMonth=function(a,b){return[31,(Date.isLeapYear(a)?29:28),31,30,31,30,31,31,30,31,30,31][b]};Date.getTimezoneOffset=function(a,b){return(b||false)?Date.CultureInfo.abbreviatedTimeZoneDST[a.toUpperCase()]:Date.CultureInfo.abbreviatedTimeZoneStandard[a.toUpperCase()]};Date.getTimezoneAbbreviation=function(b,d){var c=(d||false)?Date.CultureInfo.abbreviatedTimeZoneDST:Date.CultureInfo.abbreviatedTimeZoneStandard,a;for(a in c){if(c[a]===b){return a}}return null};Date.prototype.clone=function(){return new Date(this.getTime())};Date.prototype.compareTo=function(a){if(isNaN(this)){throw new Error(this)}if(a instanceof Date&&!isNaN(a)){return(this>a)?1:(this<a)?-1:0}else{throw new TypeError(a)}};Date.prototype.equals=function(a){return(this.compareTo(a)===0)};Date.prototype.between=function(c,a){var b=this.getTime();return b>=c.getTime()&&b<=a.getTime()};Date.prototype.addMilliseconds=function(a){this.setMilliseconds(this.getMilliseconds()+a);return this};Date.prototype.addSeconds=function(a){return this.addMilliseconds(a*1000)};Date.prototype.addMinutes=function(a){return this.addMilliseconds(a*60000)};Date.prototype.addHours=function(a){return this.addMilliseconds(a*3600000)};Date.prototype.addDays=function(a){return this.addMilliseconds(a*86400000)};Date.prototype.addWeeks=function(a){return this.addMilliseconds(a*604800000)};Date.prototype.addMonths=function(a){var b=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+a);this.setDate(Math.min(b,this.getDaysInMonth()));return this};Date.prototype.addYears=function(a){return this.addMonths(a*12)};Date.prototype.add=function(b){if(typeof b=="number"){this._orient=b;return this}var a=b;if(a.millisecond||a.milliseconds){this.addMilliseconds(a.millisecond||a.milliseconds)}if(a.second||a.seconds){this.addSeconds(a.second||a.seconds)}if(a.minute||a.minutes){this.addMinutes(a.minute||a.minutes)}if(a.hour||a.hours){this.addHours(a.hour||a.hours)}if(a.month||a.months){this.addMonths(a.month||a.months)}if(a.year||a.years){this.addYears(a.year||a.years)}if(a.day||a.days){this.addDays(a.day||a.days)}return this};Date._validate=function(d,c,a,b){if(typeof d!="number"){throw new TypeError(d+" is not a Number.")}else{if(d<c||d>a){throw new RangeError(d+" is not a valid value for "+b+".")}}return true};Date.validateMillisecond=function(a){return Date._validate(a,0,999,"milliseconds")};Date.validateSecond=function(a){return Date._validate(a,0,59,"seconds")};Date.validateMinute=function(a){return Date._validate(a,0,59,"minutes")};Date.validateHour=function(a){return Date._validate(a,0,23,"hours")};Date.validateDay=function(c,a,b){return Date._validate(c,1,Date.getDaysInMonth(a,b),"days")};Date.validateMonth=function(a){return Date._validate(a,0,11,"months")};Date.validateYear=function(a){return Date._validate(a,1,9999,"seconds")};Date.prototype.set=function(b){var a=b;if(!a.millisecond&&a.millisecond!==0){a.millisecond=-1}if(!a.second&&a.second!==0){a.second=-1}if(!a.minute&&a.minute!==0){a.minute=-1}if(!a.hour&&a.hour!==0){a.hour=-1}if(!a.day&&a.day!==0){a.day=-1}if(!a.month&&a.month!==0){a.month=-1}if(!a.year&&a.year!==0){a.year=-1}if(a.millisecond!=-1&&Date.validateMillisecond(a.millisecond)){this.addMilliseconds(a.millisecond-this.getMilliseconds())}if(a.second!=-1&&Date.validateSecond(a.second)){this.addSeconds(a.second-this.getSeconds())}if(a.minute!=-1&&Date.validateMinute(a.minute)){this.addMinutes(a.minute-this.getMinutes())}if(a.hour!=-1&&Date.validateHour(a.hour)){this.addHours(a.hour-this.getHours())}if(a.month!==-1&&Date.validateMonth(a.month)){this.addMonths(a.month-this.getMonth())}if(a.year!=-1&&Date.validateYear(a.year)){this.addYears(a.year-this.getFullYear())}if(a.day!=-1&&Date.validateDay(a.day,this.getFullYear(),this.getMonth())){this.addDays(a.day-this.getDate())}if(a.timezone){this.setTimezone(a.timezone)}if(a.timezoneOffset){this.setTimezoneOffset(a.timezoneOffset)}return this};Date.prototype.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this};Date.prototype.isLeapYear=function(){var a=this.getFullYear();return(((a%4===0)&&(a%100!==0))||(a%400===0))};Date.prototype.isWeekday=function(){return !(this.is().sat()||this.is().sun())};Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth())};Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1})};Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()})};Date.prototype.moveToDayOfWeek=function(a,b){var c=(a-this.getDay()+7*(b||+1))%7;return this.addDays((c===0)?c+=7*(b||+1):c)};Date.prototype.moveToMonth=function(c,a){var b=(c-this.getMonth()+12*(a||+1))%12;return this.addMonths((b===0)?b+=12*(a||+1):b)};Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000)};Date.prototype.getWeekOfYear=function(a){var h=this.getFullYear(),c=this.getMonth(),f=this.getDate();var j=a||Date.CultureInfo.firstDayOfWeek;var e=7+1-new Date(h,0,1).getDay();if(e==8){e=1}var b=((Date.UTC(h,c,f,0,0,0)-Date.UTC(h,0,1,0,0,0))/86400000)+1;var i=Math.floor((b-e+7)/7);if(i===j){h--;var g=7+1-new Date(h,0,1).getDay();if(g==2||g==8){i=53}else{i=52}}return i};Date.prototype.isDST=function(){console.log("isDST");return this.toString().match(/(E|C|M|P)(S|D)T/)[2]=="D"};Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST())};Date.prototype.setTimezoneOffset=function(b){var a=this.getTimezoneOffset(),c=Number(b)*-6/10;this.addMinutes(c-a);return this};Date.prototype.setTimezone=function(a){return this.setTimezoneOffset(Date.getTimezoneOffset(a))};Date.prototype.getUTCOffset=function(){var b=this.getTimezoneOffset()*-10/6,a;if(b<0){a=(b-10000).toString();return a[0]+a.substr(2)}else{a=(b+10000).toString();return"+"+a.substr(1)}};Date.prototype.getDayName=function(a){return a?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()]};Date.prototype.getMonthName=function(a){return a?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()]};Date.prototype._toString=Date.prototype.toString;Date.prototype.toString=function(c){var a=this;var b=function b(d){return(d.toString().length==1)?"0"+d:d};return c?c.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(d){switch(d){case"hh":return b(a.getHours()<13?a.getHours():(a.getHours()-12));case"h":return a.getHours()<13?a.getHours():(a.getHours()-12);case"HH":return b(a.getHours());case"H":return a.getHours();case"mm":return b(a.getMinutes());case"m":return a.getMinutes();case"ss":return b(a.getSeconds());case"s":return a.getSeconds();case"yyyy":return a.getFullYear();case"yy":return a.getFullYear().toString().substring(2,4);case"dddd":return a.getDayName();case"ddd":return a.getDayName(true);case"dd":return b(a.getDate());case"d":return a.getDate().toString();case"MMMM":return a.getMonthName();case"MMM":return a.getMonthName(true);case"MM":return b((a.getMonth()+1));case"M":return a.getMonth()+1;case"t":return a.getHours()<12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case"tt":return a.getHours()<12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case"zzz":case"zz":case"z":return""}}):this._toString()};Date.now=function(){return new Date()};Date.today=function(){return Date.now().clearTime()};Date.prototype._orient=+1;Date.prototype.next=function(){this._orient=+1;return this};Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){this._orient=-1;return this};Date.prototype._is=false;Date.prototype.is=function(){this._is=true;return this};Number.prototype._dateElement="day";Number.prototype.fromNow=function(){var a={};a[this._dateElement]=this;return Date.now().add(a)};Number.prototype.ago=function(){var a={};a[this._dateElement]=this*-1;return Date.now().add(a)};(function(){var g=Date.prototype,a=Number.prototype;var p=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),o=("january february march april may june july august september october november december").split(/\s/),n=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),m;var l=function(i){return function(){if(this._is){this._is=false;return this.getDay()==i}return this.moveToDayOfWeek(i,this._orient)}};for(var f=0;f<p.length;f++){g[p[f]]=g[p[f].substring(0,3)]=l(f)}var h=function(i){return function(){if(this._is){this._is=false;return this.getMonth()===i}return this.moveToMonth(i,this._orient)}};for(var d=0;d<o.length;d++){g[o[d]]=g[o[d].substring(0,3)]=h(d)}var e=function(i){return function(){if(i.substring(i.length-1)!="s"){i+="s"}return this["add"+i](this._orient)}};var b=function(i){return function(){this._dateElement=i;return this}};for(var c=0;c<n.length;c++){m=n[c].toLowerCase();g[m]=g[m+"s"]=e(n[c]);a[m]=a[m+"s"]=b(m)}}());Date.prototype.toJSONString=function(){return this.toString("yyyy-MM-ddThh:mm:ssZ")};Date.prototype.toShortDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortDatePattern)};Date.prototype.toLongDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.longDatePattern)};Date.prototype.toShortTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortTimePattern)};Date.prototype.toLongTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.longTimePattern)};Date.prototype.getOrdinal=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th"}};(function(){Date.Parsing={Exception:function(i){this.message="Parse error at '"+i.substring(0,10)+" ...'"}};var a=Date.Parsing;var c=a.Operators={rtoken:function(i){return function(j){var k=j.match(i);if(k){return([k[0],j.substring(k[0].length)])}else{throw new a.Exception(j)}}},token:function(i){return function(j){return c.rtoken(new RegExp("^s*"+j+"s*"))(j)}},stoken:function(i){return c.rtoken(new RegExp("^"+i))},until:function(i){return function(j){var k=[],m=null;while(j.length){try{m=i.call(this,j)}catch(l){k.push(m[0]);j=m[1];continue}break}return[k,j]}},many:function(i){return function(j){var m=[],k=null;while(j.length){try{k=i.call(this,j)}catch(l){return[m,j]}m.push(k[0]);j=k[1]}return[m,j]}},optional:function(i){return function(j){var k=null;try{k=i.call(this,j)}catch(l){return[null,j]}return[k[0],k[1]]}},not:function(i){return function(j){try{i.call(this,j)}catch(k){return[null,j]}throw new a.Exception(j)}},ignore:function(i){return i?function(j){var k=null;k=i.call(this,j);return[null,k[1]]}:null},product:function(){var k=arguments[0],l=Array.prototype.slice.call(arguments,1),m=[];for(var j=0;j<k.length;j++){m.push(c.each(k[j],l))}return m},cache:function(k){var i={},j=null;return function(l){try{j=i[l]=(i[l]||k.call(this,l))}catch(m){j=i[l]=m}if(j instanceof a.Exception){throw j}else{return j}}},any:function(){var i=arguments;return function(k){var l=null;for(var j=0;j<i.length;j++){if(i[j]==null){continue}try{l=(i[j].call(this,k))}catch(m){l=null}if(l){return l}}throw new a.Exception(k)}},each:function(){var i=arguments;return function(k){var n=[],l=null;for(var j=0;j<i.length;j++){if(i[j]==null){continue}try{l=(i[j].call(this,k))}catch(m){throw new a.Exception(k)}n.push(l[0]);k=l[1]}return[n,k]}},all:function(){var j=arguments,i=i;return i.each(i.optional(j))},sequence:function(i,j,k){j=j||c.rtoken(/^\s*/);k=k||null;if(i.length==1){return i[0]}return function(o){var p=null,t=null;var v=[];for(var n=0;n<i.length;n++){try{p=i[n].call(this,o)}catch(u){break}v.push(p[0]);try{t=j.call(this,p[1])}catch(m){t=null;break}o=t[1]}if(!p){throw new a.Exception(o)}if(t){throw new a.Exception(t[1])}if(k){try{p=k.call(this,p[1])}catch(l){throw new a.Exception(p[1])}}return[v,(p?p[1]:o)]}},between:function(j,k,i){i=i||j;var l=c.each(c.ignore(j),k,c.ignore(i));return function(m){var n=l.call(this,m);return[[n[0][0],r[0][2]],n[1]]}},list:function(i,j,k){j=j||c.rtoken(/^\s*/);k=k||null;return(i instanceof Array?c.each(c.product(i.slice(0,-1),c.ignore(j)),i.slice(-1),c.ignore(k)):c.each(c.many(c.each(i,c.ignore(j))),px,c.ignore(k)))},set:function(i,j,k){j=j||c.rtoken(/^\s*/);k=k||null;return function(B){var l=null,n=null,m=null,o=null,t=[[],B],A=false;for(var v=0;v<i.length;v++){m=null;n=null;l=null;A=(i.length==1);try{l=i[v].call(this,B)}catch(y){continue}o=[[l[0]],l[1]];if(l[1].length>0&&!A){try{m=j.call(this,l[1])}catch(z){A=true}}else{A=true}if(!A&&m[1].length===0){A=true}if(!A){var w=[];for(var u=0;u<i.length;u++){if(v!=u){w.push(i[u])}}n=c.set(w,j).call(this,m[1]);if(n[0].length>0){o[0]=o[0].concat(n[0]);o[1]=n[1]}}if(o[1].length<t[1].length){t=o}if(t[1].length===0){break}}if(t[0].length===0){return t}if(k){try{m=k.call(this,t[1])}catch(x){throw new a.Exception(t[1])}t[1]=m[1]}return t}},forward:function(i,j){return function(k){return i[j].call(this,k)}},replace:function(j,i){return function(k){var l=j.call(this,k);return[i,l[1]]}},process:function(j,i){return function(k){var l=j.call(this,k);return[i.call(this,l[0]),l[1]]}},min:function(i,j){return function(k){var l=j.call(this,k);if(l[0].length<i){throw new a.Exception(k)}return l}}};var h=function(i){return function(){var j=null,m=[];if(arguments.length>1){j=Array.prototype.slice.call(arguments)}else{if(arguments[0] instanceof Array){j=arguments[0]}}if(j){for(var l=0,k=j.shift();l<k.length;l++){j.unshift(k[l]);m.push(i.apply(null,j));j.shift();return m}}else{return i.apply(null,arguments)}}};var g="optional not ignore cache".split(/\s/);for(var d=0;d<g.length;d++){c[g[d]]=h(c[g[d]])}var f=function(i){return function(){if(arguments[0] instanceof Array){return i.apply(null,arguments[0])}else{return i.apply(null,arguments)}}};var e="each any all".split(/\s/);for(var b=0;b<e.length;b++){c[e[b]]=f(c[e[b]])}}());(function(){var f=function(j){var k=[];for(var g=0;g<j.length;g++){if(j[g] instanceof Array){k=k.concat(f(j[g]))}else{if(j[g]){k.push(j[g])}}}return k};Date.Grammar={};Date.Translator={hour:function(g){return function(){this.hour=Number(g)}},minute:function(g){return function(){this.minute=Number(g)}},second:function(g){return function(){this.second=Number(g)}},meridian:function(g){return function(){this.meridian=g.slice(0,1).toLowerCase()}},timezone:function(g){return function(){var j=g.replace(/[^\d\+\-]/g,"");if(j.length){this.timezoneOffset=Number(j)}else{this.timezone=g.toLowerCase()}}},day:function(g){var j=g[0];return function(){this.day=Number(j.match(/\d+/)[0])}},month:function(g){return function(){this.month=((g.length==3)?Date.getMonthNumberFromName(g):(Number(g)-1))}},year:function(g){return function(){var j=Number(g);this.year=((g.length>2)?j:(j+(((j+2000)<Date.CultureInfo.twoDigitYearMax)?2000:1900)))}},rday:function(g){return function(){switch(g){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0;this.now=true;break}}},finishExact:function(g){g=(g instanceof Array)?g:[g];var j=new Date();this.year=j.getFullYear();this.month=j.getMonth();this.day=1;this.hour=0;this.minute=0;this.second=0;for(var k=0;k<g.length;k++){if(g[k]){g[k].call(this)}}this.hour=(this.meridian=="p"&&this.hour<13)?this.hour+12:this.hour;if(this.day>Date.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.")}var l=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){l.set({timezone:this.timezone})}else{if(this.timezoneOffset){l.set({timezoneOffset:this.timezoneOffset})}}return l},finish:function(g){g=(g instanceof Array)?f(g):[g];if(g.length===0){return null}for(var m=0;m<g.length;m++){if(typeof g[m]=="function"){g[m].call(this)}}if(this.now){return new Date()}var j=Date.today();var p=null;var n=!!(this.days!=null||this.orient||this.operator);if(n){var o,l,k;k=((this.orient=="past"||this.operator=="subtract")?-1:1);if(this.weekday){this.unit="day";o=(Date.getDayNumberFromName(this.weekday)-j.getDay());l=7;this.days=o?((o+(k*l))%l):(k*l)}if(this.month){this.unit="month";o=(this.month-j.getMonth());l=12;this.months=o?((o+(k*l))%l):(k*l);this.month=null}if(!this.unit){this.unit="day"}if(this[this.unit+"s"]==null||this.operator!=null){if(!this.value){this.value=1}if(this.unit=="week"){this.unit="day";this.value=this.value*7}this[this.unit+"s"]=this.value*k}return j.add(this)}else{if(this.meridian&&this.hour){this.hour=(this.hour<13&&this.meridian=="p")?this.hour+12:this.hour}if(this.weekday&&!this.day){this.day=(j.addDays((Date.getDayNumberFromName(this.weekday)-j.getDay()))).getDate()}if(this.month&&!this.day){this.day=1}return j.set(this)}}};var b=Date.Parsing.Operators,e=Date.Grammar,d=Date.Translator,i;e.datePartDelimiter=b.rtoken(/^([\s\-\.\,\/\x27]+)/);e.timePartDelimiter=b.stoken(":");e.whiteSpace=b.rtoken(/^\s*/);e.generalDelimiter=b.rtoken(/^(([\s\,]|at|on)+)/);var a={};e.ctoken=function(m){var l=a[m];if(!l){var n=Date.CultureInfo.regexPatterns;var k=m.split(/\s+/),j=[];for(var g=0;g<k.length;g++){j.push(b.replace(b.rtoken(n[k[g]]),k[g]))}l=a[m]=b.any.apply(null,j)}return l};e.ctoken2=function(g){return b.rtoken(Date.CultureInfo.regexPatterns[g])};e.h=b.cache(b.process(b.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),d.hour));e.hh=b.cache(b.process(b.rtoken(/^(0[0-9]|1[0-2])/),d.hour));e.H=b.cache(b.process(b.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),d.hour));e.HH=b.cache(b.process(b.rtoken(/^([0-1][0-9]|2[0-3])/),d.hour));e.m=b.cache(b.process(b.rtoken(/^([0-5][0-9]|[0-9])/),d.minute));e.mm=b.cache(b.process(b.rtoken(/^[0-5][0-9]/),d.minute));e.s=b.cache(b.process(b.rtoken(/^([0-5][0-9]|[0-9])/),d.second));e.ss=b.cache(b.process(b.rtoken(/^[0-5][0-9]/),d.second));e.hms=b.cache(b.sequence([e.H,e.mm,e.ss],e.timePartDelimiter));e.t=b.cache(b.process(e.ctoken2("shortMeridian"),d.meridian));e.tt=b.cache(b.process(e.ctoken2("longMeridian"),d.meridian));e.z=b.cache(b.process(b.rtoken(/^(\+|\-)?\s*\d\d\d\d?/),d.timezone));e.zz=b.cache(b.process(b.rtoken(/^(\+|\-)\s*\d\d\d\d/),d.timezone));e.zzz=b.cache(b.process(e.ctoken2("timezone"),d.timezone));e.timeSuffix=b.each(b.ignore(e.whiteSpace),b.set([e.tt,e.zzz]));e.time=b.each(b.optional(b.ignore(b.stoken("T"))),e.hms,e.timeSuffix);e.d=b.cache(b.process(b.each(b.rtoken(/^([0-2]\d|3[0-1]|\d)/),b.optional(e.ctoken2("ordinalSuffix"))),d.day));e.dd=b.cache(b.process(b.each(b.rtoken(/^([0-2]\d|3[0-1])/),b.optional(e.ctoken2("ordinalSuffix"))),d.day));e.ddd=e.dddd=b.cache(b.process(e.ctoken("sun mon tue wed thu fri sat"),function(g){return function(){this.weekday=g}}));e.M=b.cache(b.process(b.rtoken(/^(1[0-2]|0\d|\d)/),d.month));e.MM=b.cache(b.process(b.rtoken(/^(1[0-2]|0\d)/),d.month));e.MMM=e.MMMM=b.cache(b.process(e.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),d.month));e.y=b.cache(b.process(b.rtoken(/^(\d\d?)/),d.year));e.yy=b.cache(b.process(b.rtoken(/^(\d\d)/),d.year));e.yyy=b.cache(b.process(b.rtoken(/^(\d\d?\d?\d?)/),d.year));e.yyyy=b.cache(b.process(b.rtoken(/^(\d\d\d\d)/),d.year));i=function(){return b.each(b.any.apply(null,arguments),b.not(e.ctoken2("timeContext")))};e.day=i(e.d,e.dd);e.month=i(e.M,e.MMM);e.year=i(e.yyyy,e.yy);e.orientation=b.process(e.ctoken("past future"),function(g){return function(){this.orient=g}});e.operator=b.process(e.ctoken("add subtract"),function(g){return function(){this.operator=g}});e.rday=b.process(e.ctoken("yesterday tomorrow today now"),d.rday);e.unit=b.process(e.ctoken("minute hour day week month year"),function(g){return function(){this.unit=g}});e.value=b.process(b.rtoken(/^\d\d?(st|nd|rd|th)?/),function(g){return function(){this.value=g.replace(/\D/g,"")}});e.expression=b.set([e.rday,e.operator,e.value,e.unit,e.orientation,e.ddd,e.MMM]);i=function(){return b.set(arguments,e.datePartDelimiter)};e.mdy=i(e.ddd,e.month,e.day,e.year);e.ymd=i(e.ddd,e.year,e.month,e.day);e.dmy=i(e.ddd,e.day,e.month,e.year);e.date=function(g){return((e[Date.CultureInfo.dateElementOrder]||e.mdy).call(this,g))};e.format=b.process(b.many(b.any(b.process(b.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(g){if(e[g]){return e[g]}else{throw Date.Parsing.Exception(g)}}),b.process(b.rtoken(/^[^dMyhHmstz]+/),function(g){return b.ignore(b.stoken(g))}))),function(g){return b.process(b.each.apply(null,g),d.finishExact)});var h={};var c=function(g){return h[g]=(h[g]||e.format(g)[0])};e.formats=function(j){if(j instanceof Array){var k=[];for(var g=0;g<j.length;g++){k.push(c(j[g]))}return b.any.apply(null,k)}else{return c(j)}};e._formats=e.formats(["yyyy-MM-ddTHH:mm:ss","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","d"]);e._start=b.process(b.set([e.date,e.time,e.expression],e.generalDelimiter,e.whiteSpace),d.finish);e.start=function(g){try{var j=e._formats.call({},g);if(j[1].length===0){return j}}catch(k){}return e._start.call({},g)}}());Date._parse=Date.parse;Date.parse=function(a){var b=null;if(!a){return null}try{b=Date.Grammar.start.call({},a)}catch(c){return null}return((b[1].length===0)?b[0]:null)};Date.getParseFunction=function(b){var a=Date.Grammar.formats(b);return function(c){var d=null;try{d=a.call({},c)}catch(f){return null}return((d[1].length===0)?d[0]:null)}};Date.parseExact=function(a,b){return Date.getParseFunction(b)(a)};
567\ No newline at end of file
568
569=== added file 'js/jMonthCalendar.pack.js'
570--- js/jMonthCalendar.pack.js 1970-01-01 00:00:00 +0000
571+++ js/jMonthCalendar.pack.js 2012-08-29 11:42:51 +0000
572@@ -0,0 +1,10 @@
573+/*!
574+* Title: jMonthCalendar 1.2.2
575+* Dependencies: jQuery 1.3.0 +
576+* Author: Kyle LeNeau
577+* Email: kyle.leneau@gmail.com
578+* Project Hompage: http://www.bytecyclist.com/projects/jmonthcalendar
579+* Source: http://code.google.com/p/jmonthcalendar
580+*
581+*/
582+eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(X($){Z I={2X:"#6e",89:"#4W",am:"#4d"};Z L;Z P;Z J;Z K;Z N={2o:al,4o:9h,3j:25,3f:25,2s:0,5z:18 Y(),4y:1C,4O:1C,4K:1C,1U:{4z:1p,4n:1p,4h:1p,p:\'&9c; 92\',n:\'8O &8H;\',t:\'60\'},5Y:X(a){V 1p},5L:X(a){V 1p},5G:X(a){V 1p},5x:X(a){V 1p},5r:X(a){V 1p},5o:X(a){V 1p},5h:X(a){V 1p},5a:X(a){V 1p},57:X(a){V 1p},4Z:X(a,b){V 1p},3C:{1K:["3G","4I","4H","4E","4D","75","72","3G"],a4:["4p","6S","6P","6M","6J","6F","6C","4p"],9b:["4k","6v","6p","6l","6i","76","6c","4k"],2H:["6a","69","65","63","3b","5X","5W","5U","5T","5S","5Q","5M"],8c:["5F","5C","6u","5w","3b","5t","5p","5n","5j","5g","5d","5b"],7N:\'7L\'}};Z S=X(a){V 18 Y(a.1Q(6,10),a.1Q(2,4)-1,a.1Q(4,6))};Z M=X(c){Z a=((c.1g()+1)<10)?"0"+(c.1g()+1):(c.1g()+1);Z b=(c.1r()<10)?"0"+c.1r():c.1r();V"7n"+a+b+c.1k()};Z O=X(b){Z e,k;15(1W b=="3m"){Z d=/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2}).([0-9]{7})$/;Z f=/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})$/;Z g=/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/;Z a=/^18/;Z c=/^\\\\\\/Y\\(([0-9]{13})-([0-9]{4})\\)\\\\\\/$/;15(k=b.2k(d)){V 18 Y(k[1],k[2]-1,k[3])}1n 15(k=b.2k(f)){V 18 Y(k[1],k[2]-1,k[3])}1n 15(k=b.2k(g)){V 18 Y(k[1],k[2]-1,k[3])}15(k=b.2k(c)){V 18 Y(k[1])}15(k=b.2k(a)){V 9A(\'(\'+b+\')\')}V 9u}};1a.6e=1a.J=X(){};1a.J.4f=X(o){Z j=N.5z;Z d;15(o==9g){d=18 Y(j.1k(),j.1g(),1)}1n{d=o;d.3o(1)}Z f=d.1g()==0?18 Y(d.1k()-1,11,1):18 Y(d.1k(),d.1g()-1,1);Z h=1a(\'<1q 1s="97"><a 2p="" 1s="4u-49">\'+N.1U.p+\'</a></1q>\').20(X(){1a.J.2P(f);V 1C});Z H=d.1g()==11?18 Y(d.1k()+1,0,1):18 Y(d.1k(),d.1g()+1,1);Z g=1a(\'<1q 1s="8V"><a 2p="" 1s="4u-4v">\'+N.1U.n+\'</a></1q>\').20(X(){1a.J.2P(H);V 1C});Z u=18 Y(d.1k()-1,d.1g(),d.1r());Z C;15(N.1U.4h){C=1a(\'<1q 1s="8K"><a 2p="">\'+u.1k()+\'</a></1q>\').20(X(){1a.J.2P(u);V 1C})}Z c=18 Y(d.1k()+1,d.1g(),d.1r());Z y;15(N.1U.4n){y=1a(\'<1q 1s="8J"><a 2p="">\'+c.1k()+\'</a></1q>\').20(X(){1a.J.2P(c);V 1C})}Z A;15(N.1U.4z){A=1a(\'<1q 1s="8G"><a 2p="" 1s="4u-2G">\'+N.1U.t+\'</a></1q>\').20(X(){1a.J.2P(18 Y());V 1C})}Z q=1a(\'<2I><3e 8B="7"><1q 1s="8z 61"></1q></3e></2I>\').3c({"2o":N.3j});Z l=1a(\'.61\',q);l.1D(h,g);15(N.1U.4z){l.1D(A)}l.1D(1a(\'<1q 1s="8u"></1q>\').1D(N.3C.2H[d.1g()]+" "+d.1k()));15(N.1U.4n){l.1D(y)}15(N.1U.4h){l.1D(C)}Z r=1a("<2I></2I>").3c({"2o":N.3f});1m(Z i=N.2s;i<N.2s+7;i++){Z F=i%7;Z v=N.3C.1K[F];r.1D(\'<2J 8m="\'+v+\'" 1s="8k\'+(F==0||F==6?\' 5R\':\'\')+\'"><5P>\'+v+\'</5P></2J>\')}r=1a("<5O 2T=\\"4W\\"></5O>").1D(r);r=r.8e(q);Z D=1a(\'<5K 2T="4d"></5K>\');Z x=(d.1g()==j.1g()&&d.1k()==j.1k());Z k=Y.2j(d.1k(),d.1g());Z B=N.2s-d.2c();15(B>0)B-=7 Z t=(k+2L.6t(B));P=18 Y(d.1k(),d.1g(),B+1);J=18 Y(d.1k(),d.1g()+1,(7-(t%=7))==7?0:(7-(t%=7)));Z m=18 Y(P.1k(),P.1g(),P.1r());Z w=0;Z G=(N.2o-N.3f-N.3j)/2L.82((k+2L.6t(B))/7);80{Z n=1a("<2I></2I>");n.3c({"2o":G+"1G"});1m(Z i=0;i<7;i++){Z F=(N.2s+i)%7;Z p={\'1s\':"7V"+(F==0||F==6?\' 5R \':\'\'),\'2z\':m.1F("M/d/1E"),\'2T\':M(m)};15(B<0||B>=k){p[\'1s\']+=\' 7S\'}1n{d.3o(B+1)}15(x&&B+1==j.1r()){7R=B+1;p[\'1s\']+=\' 60\'}Z z=1a(\'<1q 1s="3J"><a 2p="">\'+m.1r()+\'</a></1q>\').20(X(e){N.5h(18 Y($(U).7O().2q("2z")));e.2Z()});Z E=1a("<3e></3e>").2q(p).1D(z).7J(X(e){N.57(18 Y($(U).2q("2z")));e.2Z()}).20(X(e){N.5a(18 Y($(U).2q("2z")));e.2Z()});15(N.4y){E.7I({7H:N.4K,7F:N.4O,7D:X(e,b){b.35.2q("7z","7x: 7w; 7v: 7u;");$(U).1D(b.35);Z a;$.1u(K,X(){15(U.4U==b.35.2q("2T")){a=U}});N.4Z(a,$(U).2q("2z"));V 1C}})}n.1D(E);B++;m.2F(1)}w++;D.1D(n)}3B(B<k);Z a=1a(I.2X).3c({"4o":N.4o+"1G","2o":N.2o+"1G"});Z s=1a(\'<4Q 1s="7s" 7r="0" 7q="0"></4Q>\').1D(r,D);a.4M();a.7o(s);a.4L("4J");Q()}Z Q=X(){15(K&&K.19>0){Z i=N.3f+N.3j;Z h=1a(".3J:7j",I.2X).7i();1a.1u(K,X(){Z b=U;Z a,3M;15(b.2y){15(1W b.2y==\'4b\'&&b.2y.1r){a=b.2y}15(1W b.2y==\'3m\'&&b.2y.2g){a=O(b.2y)}}1n 15(b.Y){15(1W b.Y==\'4b\'&&b.Y.1r){a=b.Y}15(1W b.Y==\'3m\'&&b.Y.2g){a=O(b.Y)}}1n{V}15(b.2x){15(1W b.2x==\'4b\'&&b.2x.1r){3M=b.2x}15(1W b.2x==\'3m\'&&b.2x.2g){3M=O(b.2x)}}15(a){15((a>=P)&&(a<=J)){Z g=1a("#"+M(a),1a(I.2X));Z f=1a(".3J",g);Z c=1a(\'<a 2p="\'+b.7d+\'">\'+b.7b+\'</a>\');c.20(X(e){N.5G(b);e.2Z()});Z d=1a(\'<1q 1s="4C" 2T="7a\'+b.4U+\'"></1q>\').1D(c);15(b.4B){d.79(b.4B)}d.20(X(e){N.5x(b);e.2Z()});d.ak(X(){N.5r(b)},X(){N.5o(b)})15(N.4y){d.35({aj:\'#4d\'})}d.4M();g.1D(d);d.4L("4J")}}})}}Z R=X(){1a(".4C",1a(I.2X)).ah()}1a.J.af=X(a){15(a){15(a.19>1){1a.1u(a,X(){K.1L(U)})}1n{K.1L(a)}R();Q()}}1a.J.a9=X(a){15(a){K=a}}1a.J.2P=X(a){N.5Y(a);1a.J.4f(a);N.5L(a)}1a.J.a6=X(c,b){Z a=18 Y();c=1a.a3(N,c);1a.J.4f();15(b){K=b;Q()}}})(1a);Y.1h={9Y:"9V-9S",9P:"6W (6V 6R)",9G:"6W (6V 6R)",4m:["3G","4I","4H","4E","4D","75","72"],4l:["4p","6S","6P","6M","6J","6F","6C"],6Q:["4k","6v","6p","6l","6i","76","6c"],9x:["S","M","T","W","T","F","S"],4j:["6a","69","65","63","3b","5X","5W","5U","5T","5S","5Q","5M"],4g:["5F","5C","6u","5w","3b","5t","5p","5n","5j","5g","5d","5b"],3u:"9p",3y:"9l",2s:0,6I:9j,6G:"4e",2U:{9f:"M/d/1E",9e:"3i, 2M 1S, 1E",9d:"h:1B 1Z",99:"h:1B:1I 1Z",96:"3i, 2M 1S, 1E h:1B:1I 1Z",94:"1E-2i-6U:1B:1I",91:"1E-2i-1S 2w:1B:6q",90:"2a, 1S 2A 1E 2w:1B:1I 4r",8Y:"2M 1S",8W:"2M, 1E"},4q:{4s:/^4s(8T)?/i,3S:/^3S(8Q)?/i,4w:/^4w(8P)?/i,4x:/^4x(8M)?/i,3g:/^3g/i,44:/^44(e)?/i,43:/^43(y)?/i,42:/^42(8I)?/i,41:/^41(t(40)?)?/i,3Z:/^3Z(8F)?/i,3Y:/^3Y(40)?/i,3X:/^3X(40)?/i,3W:/^8E(n(1b)?)?/i,68:/^8D(n(1b)?)?/i,67:/^8C(e(s(1b)?)?)?/i,66:/^8A(d(8y)?)?/i,64:/^2J(u(r(s(1b)?)?)?)?/i,62:/^8x(i(1b)?)?/i,3V:/^8w(t(8v)?)?/i,5Z:/^4v/i,3a:/^1X|3a|49(8t)?/i,2t:/^(\\+|8s|8r)/i,3T:/^(\\-|8q|5V)/i,39:/^39/i,2G:/^t(8p)?/i,38:/^38/i,27:/^n(8o)?/i,26:/^8n|8l(1x)?s?/i,1x:/^8j(8i)?s?/i,1z:/^3Q(8h)?s?/i,1j:/^h(8g)?6b?/i,3P:/^w(8f)?k/i,1i:/^m(o(8d)?s?)?/i,1b:/^d(8b?)?/i,1o:/^y((8a)?6b?)?/i,5J:/^(a|p)/i,5E:/^(a\\.?m?\\.?|p\\.?m?\\.?)/i,1J:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((5D)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|5D)/i,45:/^\\s*(3N|47|46|2J)/i,5B:/^\\s*(\\:|a|p)/i},48:{4r:"-5y",88:"-86",85:"-5v",84:"-5u",83:"-5s"},4a:{4r:"-5y",81:"-5v",7Z:"-5u",7Y:"-5s",7X:"-7W"}};Y.5m=X(a){Z n=Y.1h.4j,m=Y.1h.4g,s=a.2e();1m(Z i=0;i<n.19;i++){15(n[i].2e()==s||m[i].2e()==s){V i}}V-1};Y.3L=X(a){Z n=Y.1h.4m,m=Y.1h.4l,o=Y.1h.6Q,s=a.2e();1m(Z i=0;i<n.19;i++){15(n[i].2e()==s||m[i].2e()==s){V i}}V-1};Y.4i=X(a){V(((a%4===0)&&(a%5l!==0))||(a%5k===0))};Y.2j=X(b,a){V[31,(Y.4i(b)?29:28),31,30,31,30,31,31,30,31,30,31][a]};Y.3p=X(s,a){V(a||1C)?Y.1h.4a[s.5f()]:Y.1h.48[s.5f()]};Y.6T=X(b,a){Z n=(a||1C)?Y.1h.4a:Y.1h.48,p;1m(p 7Q n){15(n[p]===b){V p}}V 17};Y.16.7P=X(){V 18 Y(U.36())};Y.16.6Z=X(a){15(70(U)){1v 18 7M(U);}15(a 2f Y&&!70(a)){V(U>a)?1:(U<a)?-1:0}1n{1v 18 58(a);}};Y.16.7K=X(a){V(U.6Z(a)===0)};Y.16.56=X(b,a){Z t=U.36();V t>=b.36()&&t<=a.36()};Y.16.2n=X(a){U.55(U.54()+a);V U};Y.16.3O=X(a){V U.2n(a*7G)};Y.16.33=X(a){V U.2n(a*7E)};Y.16.3H=X(a){V U.2n(a*7C)};Y.16.2F=X(a){V U.2n(a*3x)};Y.16.7B=X(a){V U.2n(a*7A)};Y.16.2S=X(a){Z n=U.1r();U.3o(1);U.7y(U.1g()+a);U.3o(2L.3Q(n,U.2j()));V U};Y.16.3F=X(a){V U.2S(a*12)};Y.16.2t=X(a){15(1W a=="4X"){U.2B=a;V U}Z x=a;15(x.26||x.3E){U.2n(x.26||x.3E)}15(x.1x||x.34){U.3O(x.1x||x.34)}15(x.1z||x.3D){U.33(x.1z||x.3D)}15(x.1j||x.3z){U.3H(x.1j||x.3z)}15(x.1i||x.2H){U.2S(x.1i||x.2H)}15(x.1o||x.4V){U.3F(x.1o||x.4V)}15(x.1b||x.1K){U.2F(x.1b||x.1K)}V U};Y.2l=X(a,b,d,c){15(1W a!="4X"){1v 18 58(a+" 2E 2D a 1H.");}1n 15(a<b||a>d){1v 18 4T(a+" 2E 2D a 4S 1T 1m "+c+".");}V 1p};Y.4R=X(n){V Y.2l(n,0,7t,"3E")};Y.5i=X(n){V Y.2l(n,0,59,"34")};Y.4P=X(n){V Y.2l(n,0,59,"3D")};Y.4Y=X(n){V Y.2l(n,0,23,"3z")};Y.4F=X(n,b,a){V Y.2l(n,1,Y.2j(b,a),"1K")};Y.4N=X(n){V Y.2l(n,0,11,"2H")};Y.50=X(n){V Y.2l(n,1,7p,"34")};Y.16.1N=X(a){Z x=a;15(!x.26&&x.26!==0){x.26=-1}15(!x.1x&&x.1x!==0){x.1x=-1}15(!x.1z&&x.1z!==0){x.1z=-1}15(!x.1j&&x.1j!==0){x.1j=-1}15(!x.1b&&x.1b!==0){x.1b=-1}15(!x.1i&&x.1i!==0){x.1i=-1}15(!x.1o&&x.1o!==0){x.1o=-1}15(x.26!=-1&&Y.4R(x.26)){U.2n(x.26-U.54())}15(x.1x!=-1&&Y.5i(x.1x)){U.3O(x.1x-U.3A())}15(x.1z!=-1&&Y.4P(x.1z)){U.33(x.1z-U.3I())}15(x.1j!=-1&&Y.4Y(x.1j)){U.3H(x.1j-U.1P())}15(x.1i!==-1&&Y.4N(x.1i)){U.2S(x.1i-U.1g())}15(x.1o!=-1&&Y.50(x.1o)){U.3F(x.1o-U.1k())}15(x.1b!=-1&&Y.4F(x.1b,U.1k(),U.1g())){U.2F(x.1b-U.1r())}15(x.1J){U.51(x.1J)}15(x.2R){U.3K(x.2R)}V U};Y.16.5c=X(){U.7m(0);U.7l(0);U.7k(0);U.55(0);V U};Y.16.4i=X(){Z y=U.1k();V(((y%4===0)&&(y%5l!==0))||(y%5k===0))};Y.16.7T=X(){V!(U.2E().3V()||U.2E().3W())};Y.16.2j=X(){V Y.2j(U.1k(),U.1g())};Y.16.7U=X(){V U.1N({1b:1})};Y.16.7h=X(){V U.1N({1b:U.2j()})};Y.16.5e=X(a,b){Z c=(a-U.2c()+7*(b||+1))%7;V U.2F((c===0)?c+=7*(b||+1):c)};Y.16.5I=X(a,b){Z c=(a-U.1g()+12*(b||+1))%12;V U.2S((c===0)?c+=12*(b||+1):c)};Y.16.7g=X(){V 2L.4G((U-18 Y(U.1k(),0,1))/3x)};Y.16.7f=X(f){Z y=U.1k(),m=U.1g(),d=U.1r();Z a=f||Y.1h.2s;Z b=7+1-18 Y(y,0,1).2c();15(b==8){b=1}Z e=((Y.5q(y,m,d,0,0,0)-Y.5q(y,0,1,0,0,0))/3x)+1;Z w=2L.4G((e-b+7)/7);15(w===a){y--;Z c=7+1-18 Y(y,0,1).2c();15(c==2||c==8){w=53}1n{w=52}}V w};Y.16.3w=X(){7e.7c(\'3w\');V U.1F().2k(/(E|C|M|P)(S|D)T/)[2]=="D"};Y.16.87=X(){V Y.6T(U.5H,U.3w())};Y.16.3K=X(s){Z a=U.3p(),5A=1H(s)*-6/10;U.33(5A-a);V U};Y.16.51=X(s){V U.3K(Y.3p(s))};Y.16.5H=X(){Z n=U.3p()*-10/6,r;15(n<0){r=(n-78).1F();V r[0]+r.6f(2)}1n{r=(n+78).1F();V"+"+r.6f(1)}};Y.16.3v=X(a){V a?Y.1h.4l[U.2c()]:Y.1h.4m[U.2c()]};Y.16.3R=X(a){V a?Y.1h.4g[U.1g()]:Y.1h.4j[U.1g()]};Y.16.5N=Y.16.1F;Y.16.1F=X(b){Z c=U;Z p=X p(s){V(s.1F().19==1)?"0"+s:s};V b?b.2W(/1S?d?d?|2i?M?M?|32?y?y?|37?|2w?|1B?|1I?|1Z?|3d?z?/g,X(a){4A(a){1c"37":V p(c.1P()<13?c.1P():(c.1P()-12));1c"h":V c.1P()<13?c.1P():(c.1P()-12);1c"2w":V p(c.1P());1c"H":V c.1P();1c"1B":V p(c.3I());1c"m":V c.3I();1c"1I":V p(c.3A());1c"s":V c.3A();1c"1E":V c.1k();1c"32":V c.1k().1F().1Q(2,4);1c"3i":V c.3v();1c"2a":V c.3v(1p);1c"1S":V p(c.1r());1c"d":V c.1r().1F();1c"2M":V c.3R();1c"2A":V c.3R(1p);1c"2i":V p((c.1g()+1));1c"M":V c.1g()+1;1c"t":V c.1P()<12?Y.1h.3u.1Q(0,1):Y.1h.3y.1Q(0,1);1c"1Z":V c.1P()<12?Y.1h.3u:Y.1h.3y;1c"3r":1c"3d":1c"z":V""}}):U.5N()};Y.27=X(){V 18 Y()};Y.2G=X(){V Y.27().5c()};Y.16.2B=+1;Y.16.4v=X(){U.2B=+1;V U};Y.16.1X=Y.16.49=Y.16.ai=X(){U.2B=-1;V U};Y.16.2O=1C;Y.16.2E=X(){U.2O=1p;V U};1H.16.3q="1b";1H.16.ag=X(){Z c={};c[U.3q]=U;V Y.27().2t(c)};1H.16.5V=X(){Z c={};c[U.3q]=U*-1;V Y.27().2t(c)};(X(){Z d=Y.16,$N=1H.16;Z a=("ae ac ab aa a8 a7 a5").2g(/\\s/),3h=("a2 a1 a0 9Z 3g 9X 9W 9U 9T 9R 9Q 9O").2g(/\\s/),1G=("9N 9M 9L 9K 9J 9I 9H 9F").2g(/\\s/),2v;Z b=X(n){V X(){15(U.2O){U.2O=1C;V U.2c()==n}V U.5e(n,U.2B)}};1m(Z i=0;i<a.19;i++){d[a[i]]=d[a[i].1Q(0,3)]=b(i)}Z c=X(n){V X(){15(U.2O){U.2O=1C;V U.1g()===n}V U.5I(n,U.2B)}};1m(Z j=0;j<3h.19;j++){d[3h[j]]=d[3h[j].1Q(0,3)]=c(j)}Z e=X(j){V X(){15(j.1Q(j.19-1)!="s"){j+="s"}V U["2t"+j](U.2B)}};Z f=X(n){V X(){U.3q=n;V U}};1m(Z k=0;k<1G.19;k++){2v=1G[k].2e();d[2v]=d[2v+"s"]=e(1G[k]);$N[2v]=$N[2v+"s"]=f(2v)}}());Y.16.9E=X(){V U.1F("1E-2i-9D:1B:6q")};Y.16.9C=X(){V U.1F(Y.1h.2U.9B)};Y.16.9z=X(){V U.1F(Y.1h.2U.9y)};Y.16.9w=X(){V U.1F(Y.1h.2U.9v)};Y.16.9t=X(){V U.1F(Y.1h.2U.9s)};Y.16.9r=X(){4A(U.1r()){1c 1:1c 21:1c 31:V"3N";1c 2:1c 22:V"47";1c 3:1c 23:V"46";9q:V"2J"}};(X(){Y.3k={1M:X(s){U.9o="9n 9m 6L \'"+s.1Q(0,10)+" ...\'"}};Z f=Y.3k;Z 14=f.6K={1e:X(r){V X(s){Z a=s.2k(r);15(a){V([a[0],s.1Q(a[0].19)])}1n{1v 18 f.1M(s);}}},9k:X(s){V X(s){V 14.1e(18 6H("^\\s*"+s+"\\s*"))(s)}},3l:X(s){V 14.1e(18 6H("^"+s))},9i:X(p){V X(s){Z a=[],1t=17;3B(s.19){1y{1t=p.1f(U,s)}1w(e){a.1L(1t[0]);s=1t[1];3n}2h}V[a,s]}},4c:X(p){V X(s){Z a=[],r=17;3B(s.19){1y{r=p.1f(U,s)}1w(e){V[a,s]}a.1L(r[0]);s=r[1]}V[a,s]}},2N:X(p){V X(s){Z r=17;1y{r=p.1f(U,s)}1w(e){V[17,s]}V[r[0],r[1]]}},2D:X(p){V X(s){1y{p.1f(U,s)}1w(e){V[17,s]}1v 18 f.1M(s);}},1R:X(p){V p?X(s){Z r=17;r=p.1f(U,s);V[17,r[1]]}:17},6E:X(){Z a=1A[0],6D=2d.16.2V.1f(1A,1),1t=[];1m(Z i=0;i<a.19;i++){1t.1L(14.1u(a[i],6D))}V 1t},1l:X(a){Z b={},r=17;V X(s){1y{r=b[s]=(b[s]||a.1f(U,s))}1w(e){r=b[s]=e}15(r 2f f.1M){1v r;}1n{V r}}},2K:X(){Z a=1A;V X(s){Z r=17;1m(Z i=0;i<a.19;i++){15(a[i]==17){3n}1y{r=(a[i].1f(U,s))}1w(e){r=17}15(r){V r}}1v 18 f.1M(s);}},1u:X(){Z b=1A;V X(s){Z a=[],r=17;1m(Z i=0;i<b.19;i++){15(b[i]==17){3n}1y{r=(b[i].1f(U,s))}1w(e){1v 18 f.1M(s);}a.1L(r[0]);s=r[1]}V[a,s]}},6B:X(){Z a=1A,14=14;V 14.1u(14.2N(a))},6A:X(b,d,c){d=d||14.1e(/^\\s*/);c=c||17;15(b.19==1){V b[0]}V X(s){Z r=17,q=17;Z a=[];1m(Z i=0;i<b.19;i++){1y{r=b[i].1f(U,s)}1w(e){2h}a.1L(r[0]);1y{q=d.1f(U,r[1])}1w(6N){q=17;2h}s=q[1]}15(!r){1v 18 f.1M(s);}15(q){1v 18 f.1M(q[1]);}15(c){1y{r=c.1f(U,r[1])}1w(6z){1v 18 f.1M(r[1]);}}V[a,(r?r[1]:s)]}},56:X(c,p,d){d=d||c;Z b=14.1u(14.1R(c),p,14.1R(d));V X(s){Z a=b.1f(U,s);V[[a[0][0],r[0][2]],a[1]]}},9a:X(p,d,c){d=d||14.1e(/^\\s*/);c=c||17;V(p 2f 2d?14.1u(14.6E(p.2V(0,-1),14.1R(d)),p.2V(-1),14.1R(c)):14.1u(14.4c(14.1u(p,14.1R(d))),1G,14.1R(c)))},1N:X(b,d,c){d=d||14.1e(/^\\s*/);c=c||17;V X(s){Z r=17,p=17,q=17,1t=17,1Y=[[],s],1X=1C;1m(Z i=0;i<b.19;i++){q=17;p=17;r=17;1X=(b.19==1);1y{r=b[i].1f(U,s)}1w(e){3n}1t=[[r[0]],r[1]];15(r[1].19>0&&!1X){1y{q=d.1f(U,r[1])}1w(6N){1X=1p}}1n{1X=1p}15(!1X&&q[1].19===0){1X=1p}15(!1X){Z a=[];1m(Z j=0;j<b.19;j++){15(i!=j){a.1L(b[j])}}p=14.1N(a,d).1f(U,q[1]);15(p[0].19>0){1t[0]=1t[0].6y(p[0]);1t[1]=p[1]}}15(1t[1].19<1Y[1].19){1Y=1t}15(1Y[1].19===0){2h}}15(1Y[0].19===0){V 1Y}15(c){1y{q=c.1f(U,1Y[1])}1w(6z){1v 18 f.1M(1Y[1]);}1Y[1]=q[1]}V 1Y}},98:X(a,b){V X(s){V a[b].1f(U,s)}},2W:X(a,b){V X(s){Z r=a.1f(U,s);V[b,r[1]]}},1d:X(a,b){V X(s){Z r=a.1f(U,s);V[b.1f(U,r[0]),r[1]]}},3Q:X(c,b){V X(s){Z a=b.1f(U,s);15(a[0].19<c){1v 18 f.1M(s);}V a}}};Z l=X(b){V X(){Z a=17,1t=[];15(1A.19>1){a=2d.16.2V.1f(1A)}1n 15(1A[0]2f 2d){a=1A[0]}15(a){1m(Z i=0,1G=a.6O();i<1G.19;i++){a.95(1G[i]);1t.1L(b.2m(17,a));a.6O();V 1t}}1n{V b.2m(17,1A)}}};Z g="2N 2D 1R 1l".2g(/\\s/);1m(Z i=0;i<g.19;i++){14[g[i]]=l(14[g[i]])}Z k=X(a){V X(){15(1A[0]2f 2d){V a.2m(17,1A[0])}1n{V a.2m(17,1A)}}};Z h="1u 2K 6B".2g(/\\s/);1m(Z j=0;j<h.19;j++){14[h[j]]=k(14[h[j]])}}());(X(){Z j=X(a){Z b=[];1m(Z i=0;i<a.19;i++){15(a[i]2f 2d){b=b.6y(j(a[i]))}1n{15(a[i]){b.1L(a[i])}}}V b};Y.3t={};Y.6x={1j:X(s){V X(){U.1j=1H(s)}},1z:X(s){V X(){U.1z=1H(s)}},1x:X(s){V X(){U.1x=1H(s)}},2C:X(s){V X(){U.2C=s.2V(0,1).2e()}},1J:X(s){V X(){Z n=s.2W(/[^\\d\\+\\-]/g,"");15(n.19){U.2R=1H(n)}1n{U.1J=s.2e()}}},1b:X(x){Z s=x[0];V X(){U.1b=1H(s.2k(/\\d+/)[0])}},1i:X(s){V X(){U.1i=((s.19==3)?Y.5m(s):(1H(s)-1))}},1o:X(s){V X(){Z n=1H(s);U.1o=((s.19>2)?n:(n+(((n+6w)<Y.1h.6I)?6w:93)))}},3s:X(s){V X(){4A(s){1c"39":U.1K=-1;2h;1c"38":U.1K=1;2h;1c"2G":U.1K=0;2h;1c"27":U.1K=0;U.27=1p;2h}}},6s:X(x){x=(x 2f 2d)?x:[x];Z a=18 Y();U.1o=a.1k();U.1i=a.1g();U.1b=1;U.1j=0;U.1z=0;U.1x=0;1m(Z i=0;i<x.19;i++){15(x[i]){x[i].1f(U)}}U.1j=(U.2C=="p"&&U.1j<13)?U.1j+12:U.1j;15(U.1b>Y.2j(U.1o,U.1i)){1v 18 4T(U.1b+" 2E 2D a 4S 1T 1m 1K.");}Z r=18 Y(U.1o,U.1i,U.1b,U.1j,U.1z,U.1x);15(U.1J){r.1N({1J:U.1J})}1n 15(U.2R){r.1N({2R:U.2R})}V r},6r:X(x){x=(x 2f 2d)?j(x):[x];15(x.19===0){V 17}1m(Z i=0;i<x.19;i++){15(1W x[i]=="X"){x[i].1f(U)}}15(U.27){V 18 Y()}Z d=Y.2G();Z a=17;Z c=!!(U.1K!=17||U.1V||U.2Q);15(c){Z b,2b,1V;1V=((U.1V=="3a"||U.2Q=="3T")?-1:1);15(U.2Y){U.1O="1b";b=(Y.3L(U.2Y)-d.2c());2b=7;U.1K=b?((b+(1V*2b))%2b):(1V*2b)}15(U.1i){U.1O="1i";b=(U.1i-d.1g());2b=12;U.2H=b?((b+(1V*2b))%2b):(1V*2b);U.1i=17}15(!U.1O){U.1O="1b"}15(U[U.1O+"s"]==17||U.2Q!=17){15(!U.1T){U.1T=1}15(U.1O=="3P"){U.1O="1b";U.1T=U.1T*7}U[U.1O+"s"]=U.1T*1V}V d.2t(U)}1n{15(U.2C&&U.1j){U.1j=(U.1j<13&&U.2C=="p")?U.1j+12:U.1j}15(U.2Y&&!U.1b){U.1b=(d.2F((Y.3L(U.2Y)-d.2c()))).1r()}15(U.1i&&!U.1b){U.1b=1}V d.1N(U)}}};Z 14=Y.3k.6K,g=Y.3t,t=Y.6x,24;g.6o=14.1e(/^([\\s\\-\\.\\,\\/\\8Z]+)/);g.6n=14.3l(":");g.4t=14.1e(/^\\s*/);g.6m=14.1e(/^(([\\s\\,]|6L|8X)+)/);Z l={};g.2u=X(a){Z b=l[a];15(!b){Z c=Y.1h.4q;Z d=a.2g(/\\s+/),1G=[];1m(Z i=0;i<d.19;i++){1G.1L(14.2W(14.1e(c[d[i]]),d[i]))}b=l[a]=14.2K.2m(17,1G)}V b};g.2r=X(a){V 14.1e(Y.1h.4q[a])};g.h=14.1l(14.1d(14.1e(/^(0[0-9]|1[0-2]|[1-9])/),t.1j));g.37=14.1l(14.1d(14.1e(/^(0[0-9]|1[0-2])/),t.1j));g.H=14.1l(14.1d(14.1e(/^([0-1][0-9]|2[0-3]|[0-9])/),t.1j));g.2w=14.1l(14.1d(14.1e(/^([0-1][0-9]|2[0-3])/),t.1j));g.m=14.1l(14.1d(14.1e(/^([0-5][0-9]|[0-9])/),t.1z));g.1B=14.1l(14.1d(14.1e(/^[0-5][0-9]/),t.1z));g.s=14.1l(14.1d(14.1e(/^([0-5][0-9]|[0-9])/),t.1x));g.1I=14.1l(14.1d(14.1e(/^[0-5][0-9]/),t.1x));g.6k=14.1l(14.6A([g.H,g.1B,g.1I],g.6n));g.t=14.1l(14.1d(g.2r("5J"),t.2C));g.1Z=14.1l(14.1d(g.2r("5E"),t.2C));g.z=14.1l(14.1d(14.1e(/^(\\+|\\-)?\\s*\\d\\d\\d\\d?/),t.1J));g.3d=14.1l(14.1d(14.1e(/^(\\+|\\-)\\s*\\d\\d\\d\\d/),t.1J));g.3r=14.1l(14.1d(g.2r("1J"),t.1J));g.6Y=14.1u(14.1R(g.4t),14.1N([g.1Z,g.3r]));g.6j=14.1u(14.2N(14.1R(14.3l("T"))),g.6k,g.6Y);g.d=14.1l(14.1d(14.1u(14.1e(/^([0-2]\\d|3[0-1]|\\d)/),14.2N(g.2r("45"))),t.1b));g.1S=14.1l(14.1d(14.1u(14.1e(/^([0-2]\\d|3[0-1])/),14.2N(g.2r("45"))),t.1b));g.2a=g.3i=14.1l(14.1d(g.2u("3W 68 67 66 64 62 3V"),X(s){V X(){U.2Y=s}}));g.M=14.1l(14.1d(14.1e(/^(1[0-2]|0\\d|\\d)/),t.1i));g.2i=14.1l(14.1d(14.1e(/^(1[0-2]|0\\d)/),t.1i));g.2A=g.2M=14.1l(14.1d(g.2u("4s 3S 4w 4x 3g 44 43 42 41 3Z 3Y 3X"),t.1i));g.y=14.1l(14.1d(14.1e(/^(\\d\\d?)/),t.1o));g.32=14.1l(14.1d(14.1e(/^(\\d\\d)/),t.1o));g.8U=14.1l(14.1d(14.1e(/^(\\d\\d?\\d?\\d?)/),t.1o));g.1E=14.1l(14.1d(14.1e(/^(\\d\\d\\d\\d)/),t.1o));24=X(){V 14.1u(14.2K.2m(17,1A),14.2D(g.2r("5B")))};g.1b=24(g.d,g.1S);g.1i=24(g.M,g.2A);g.1o=24(g.1E,g.32);g.6X=14.1d(g.2u("3a 5Z"),X(s){V X(){U.1V=s}});g.2Q=14.1d(g.2u("2t 3T"),X(s){V X(){U.2Q=s}});g.3s=14.1d(g.2u("39 38 2G 27"),t.3s);g.1O=14.1d(g.2u("1z 1j 1b 3P 1i 1o"),X(s){V X(){U.1O=s}});g.1T=14.1d(14.1e(/^\\d\\d?(3N|47|46|2J)?/),X(s){V X(){U.1T=s.2W(/\\D/g,"")}});g.77=14.1N([g.3s,g.2Q,g.1T,g.1O,g.6X,g.2a,g.2A]);24=X(){V 14.1N(1A,g.6o)};g.4e=24(g.2a,g.1i,g.1b,g.1o);g.8S=24(g.2a,g.1o,g.1i,g.1b);g.8R=24(g.2a,g.1b,g.1i,g.1o);g.2z=X(s){V((g[Y.1h.6G]||g.4e).1f(U,s))};g.71=14.1d(14.4c(14.2K(14.1d(14.1e(/^(1S?d?d?|2i?M?M?|32?y?y?|37?|2w?|1B?|1I?|1Z?|3d?z?)/),X(a){15(g[a]){V g[a]}1n{1v Y.3k.1M(a);}}),14.1d(14.1e(/^[^ad]+/),X(s){V 14.1R(14.3l(s))}))),X(a){V 14.1d(14.1u.2m(17,a),t.6s)});Z h={};Z k=X(f){V h[f]=(h[f]||g.71(f)[0])};g.3U=X(a){15(a 2f 2d){Z b=[];1m(Z i=0;i<a.19;i++){b.1L(k(a[i]))}V 14.2K.2m(17,b)}1n{V k(a)}};g.6h=g.3U(["1E-2i-6U:1B:1I","2a, 2A 1S, 1E H:1B:1I 1Z","2a 2A d 1E 2w:1B:1I 3r","d"]);g.6g=14.1d(14.1N([g.2z,g.6j,g.77],g.6m,g.4t),t.6r);g.74=X(s){1y{Z r=g.6h.1f({},s);15(r[1].19===0){V r}}1w(e){}V g.6g.1f({},s)}}());Y.8N=Y.6d;Y.6d=X(s){Z r=17;15(!s){V 17}1y{r=Y.3t.74.1f({},s)}1w(e){V 17}V((r[1].19===0)?r[0]:17)};Y.73=X(a){Z b=Y.3t.3U(a);V X(s){Z r=17;1y{r=b.1f({},s)}1w(e){V 17}V((r[1].19===0)?r[0]:17)}};Y.8L=X(s,a){V Y.73(a)(s)};',62,643,'||||||||||||||||||||||||||||||||||||||||||||||||||||||||this|return||function|Date|var|||||_|if|prototype|null|new|length|jQuery|day|case|process|rtoken|call|getMonth|CultureInfo|month|hour|getFullYear|cache|for|else|year|true|div|getDate|class|rx|each|throw|catch|second|try|minute|arguments|mm|false|append|yyyy|toString|px|Number|ss|timezone|days|push|Exception|set|unit|getHours|substring|ignore|dd|value|navLinks|orient|typeof|last|best|tt|click||||_fn||millisecond|now|||ddd|mod|getDay|Array|toLowerCase|instanceof|split|break|MM|getDaysInMonth|match|_validate|apply|addMilliseconds|height|href|attr|ctoken2|firstDayOfWeek|add|ctoken|de|HH|EndDateTime|StartDateTime|date|MMM|_orient|meridian|not|is|addDays|today|months|tr|th|any|Math|MMMM|optional|_is|ChangeMonth|operator|timezoneOffset|addMonths|id|formatPatterns|slice|replace|container|weekday|stopPropagation|||yy|addMinutes|seconds|draggable|getTime|hh|tomorrow|yesterday|past|May|css|zz|td|labelHeight|may|mx|dddd|navHeight|Parsing|stoken|string|continue|setDate|getTimezoneOffset|_dateElement|zzz|rday|Grammar|amDesignator|getDayName|isDST|86400000|pmDesignator|hours|getSeconds|while|locale|minutes|milliseconds|addYears|Sunday|addHours|getMinutes|DateLabel|setTimezoneOffset|getDayNumberFromName|eDt|st|addSeconds|week|min|getMonthName|feb|subtract|formats|sat|sun|dec|nov|oct|ember|sep|aug|jul|jun|ordinalSuffix|rd|nd|abbreviatedTimeZoneStandard|prev|abbreviatedTimeZoneDST|object|many|CalendarBody|mdy|DrawCalendar|abbreviatedMonthNames|enablePrevYear|isLeapYear|monthNames|Su|abbreviatedDayNames|dayNames|enableNextYear|width|Sun|regexPatterns|GMT|jan|whiteSpace|link|next|mar|apr|dragableEvents|enableToday|switch|CssClass|Event|Thursday|Wednesday|validateDay|floor|Tuesday|Monday|normal|hoverDroppableClass|fadeIn|hide|validateMonth|activeDroppableClass|validateMinute|table|validateMillisecond|valid|RangeError|EventID|years|CalendarHead|number|validateHour|onEventDropped|validateYear|setTimezone|||getMilliseconds|setMilliseconds|between|onDayCellDblClick|TypeError||onDayCellClick|Dec|clearTime|Nov|moveToDayOfWeek|toUpperCase|Oct|onDayLinkClick|validateSecond|Sep|400|100|getMonthNumberFromName|Aug|onEventBlockOut|Jul|UTC|onEventBlockOver|0700|Jun|0600|0500|Apr|onEventBlockClick|000|calendarStartDate|there|timeContext|Feb|gmt|longMeridian|Jan|onEventLinkClick|getUTCOffset|moveToMonth|shortMeridian|tbody|onMonthChanged|December|_toString|thead|span|November|Weekend|October|September|August|ago|July|June|onMonthChanging|future|Today|MonthNavigation|fri|April|thu|March|wed|tue|mon|February|January|rs|Sa|parse|jMonthCalendar|substr|_start|_formats|Th|time|hms|We|generalDelimiter|timePartDelimiter|datePartDelimiter|Tu|ssZ|finish|finishExact|abs|Mar|Mo|2000|Translator|concat|ey|sequence|all|Sat|qx|product|Fri|dateElementOrder|RegExp|twoDigitYearMax|Thu|Operators|at|Wed|ex|shift|Tue|shortestDayNames|States|Mon|getTimezoneAbbreviation|ddTHH|United|English|orientation|timeSuffix|compareTo|isNaN|format|Saturday|getParseFunction|start|Friday|Fr|expression|10000|addClass|Event_|Title|log|URL|console|getWeekOfYear|getDayOfYear|moveToLastDayOfMonth|outerHeight|first|setSeconds|setMinutes|setHours|c_|html|9999|tablespacing|cellpadding|MonthlyCalendar|999|block|display|relative|position|setMonth|style|604800000|addWeeks|3600000|drop|60000|activeClass|1000|hoverClass|droppable|dblclick|equals|wk|Error|weekMin|parent|clone|in|dayStr|Inactive|isWeekday|moveToFirstDayOfMonth|DateBox|0800|PDT|MDT|CDT|do|EDT|ceil|PST|MST|CST|0400|getTimezone|EST|head|ea|ays|monthsShort|nth|prepend|ee|ou|ute|ond|sec|DateHeader|milli|title|ms|ow|oday|before|from|after|ious|MonthName|urday|sa|fr|nesday|FormHeader|we|colspan|tu|mo|su|ober|TodayLink|rsaquo|ust|YearNavNext|YearNavPrev|parseExact|il|_parse|Next|ch|ruary|dmy|ymd|uary|yyy|MonthNavNext|yearMonth|on|monthDay|x27|rfc1123|universalSortableDateTime|Prev|1900|sortableDateTime|unshift|fullDateTime|MonthNavPrev|forward|longTime|list|daysMin|lsaquo|shortTime|longDate|shortDate|undefined|980|until|2029|token|PM|error|Parse|message|AM|default|getOrdinal|longTimePattern|toLongTimeString|tdt|shortTimePattern|toShortTimeString|firstLetterDayNames|longDatePattern|toLongDateString|eval|shortDatePattern|toShortDateString|ddThh|toJSONString|Year|nativeName|Month|Week|Day|Hour|Minute|Second|Millisecond|december|englishName|november|october|US|september|august|en|july|june|name|april|march|february|january|extend|daysShort|saturday|Initialize|friday|thursday|ReplaceEventCollection|wednesday|tuesday|monday|dMyhHmstz|sunday|AddEvents|fromNow|remove|previous|containment|hover|650|body'.split('|'),0,{}))
583\ No newline at end of file
584
585=== added file 'js/jquery-1.3.js'
586--- js/jquery-1.3.js 1970-01-01 00:00:00 +0000
587+++ js/jquery-1.3.js 2012-08-29 11:42:51 +0000
588@@ -0,0 +1,4241 @@
589+/*!
590+ * jQuery JavaScript Library v1.3
591+ * http://jquery.com/
592+ *
593+ * Copyright (c) 2009 John Resig
594+ * Dual licensed under the MIT and GPL licenses.
595+ * http://docs.jquery.com/License
596+ *
597+ * Date: 2009-01-13 12:50:31 -0500 (Tue, 13 Jan 2009)
598+ * Revision: 6104
599+ */
600+(function(){
601+
602+var
603+ // Will speed up references to window, and allows munging its name.
604+ window = this,
605+ // Will speed up references to undefined, and allows munging its name.
606+ undefined,
607+ // Map over jQuery in case of overwrite
608+ _jQuery = window.jQuery,
609+ // Map over the $ in case of overwrite
610+ _$ = window.$,
611+
612+ jQuery = window.jQuery = window.$ = function( selector, context ) {
613+ // The jQuery object is actually just the init constructor 'enhanced'
614+ return new jQuery.fn.init( selector, context );
615+ },
616+
617+ // A simple way to check for HTML strings or ID strings
618+ // (both of which we optimize for)
619+ quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
620+ // Is it a simple selector
621+ isSimple = /^.[^:#\[\.,]*$/;
622+
623+jQuery.fn = jQuery.prototype = {
624+ init: function( selector, context ) {
625+ // Make sure that a selection was provided
626+ selector = selector || document;
627+
628+ // Handle $(DOMElement)
629+ if ( selector.nodeType ) {
630+ this[0] = selector;
631+ this.length = 1;
632+ this.context = selector;
633+ return this;
634+ }
635+ // Handle HTML strings
636+ if ( typeof selector === "string" ) {
637+ // Are we dealing with HTML string or an ID?
638+ var match = quickExpr.exec( selector );
639+
640+ // Verify a match, and that no context was specified for #id
641+ if ( match && (match[1] || !context) ) {
642+
643+ // HANDLE: $(html) -> $(array)
644+ if ( match[1] )
645+ selector = jQuery.clean( [ match[1] ], context );
646+
647+ // HANDLE: $("#id")
648+ else {
649+ var elem = document.getElementById( match[3] );
650+
651+ // Make sure an element was located
652+ if ( elem ){
653+ // Handle the case where IE and Opera return items
654+ // by name instead of ID
655+ if ( elem.id != match[3] )
656+ return jQuery().find( selector );
657+
658+ // Otherwise, we inject the element directly into the jQuery object
659+ var ret = jQuery( elem );
660+ ret.context = document;
661+ ret.selector = selector;
662+ return ret;
663+ }
664+ selector = [];
665+ }
666+
667+ // HANDLE: $(expr, [context])
668+ // (which is just equivalent to: $(content).find(expr)
669+ } else
670+ return jQuery( context ).find( selector );
671+
672+ // HANDLE: $(function)
673+ // Shortcut for document ready
674+ } else if ( jQuery.isFunction( selector ) )
675+ return jQuery( document ).ready( selector );
676+
677+ // Make sure that old selector state is passed along
678+ if ( selector.selector && selector.context ) {
679+ this.selector = selector.selector;
680+ this.context = selector.context;
681+ }
682+
683+ return this.setArray(jQuery.makeArray(selector));
684+ },
685+
686+ // Start with an empty selector
687+ selector: "",
688+
689+ // The current version of jQuery being used
690+ jquery: "1.3",
691+
692+ // The number of elements contained in the matched element set
693+ size: function() {
694+ return this.length;
695+ },
696+
697+ // Get the Nth element in the matched element set OR
698+ // Get the whole matched element set as a clean array
699+ get: function( num ) {
700+ return num === undefined ?
701+
702+ // Return a 'clean' array
703+ jQuery.makeArray( this ) :
704+
705+ // Return just the object
706+ this[ num ];
707+ },
708+
709+ // Take an array of elements and push it onto the stack
710+ // (returning the new matched element set)
711+ pushStack: function( elems, name, selector ) {
712+ // Build a new jQuery matched element set
713+ var ret = jQuery( elems );
714+
715+ // Add the old object onto the stack (as a reference)
716+ ret.prevObject = this;
717+
718+ ret.context = this.context;
719+
720+ if ( name === "find" )
721+ ret.selector = this.selector + (this.selector ? " " : "") + selector;
722+ else if ( name )
723+ ret.selector = this.selector + "." + name + "(" + selector + ")";
724+
725+ // Return the newly-formed element set
726+ return ret;
727+ },
728+
729+ // Force the current matched set of elements to become
730+ // the specified array of elements (destroying the stack in the process)
731+ // You should use pushStack() in order to do this, but maintain the stack
732+ setArray: function( elems ) {
733+ // Resetting the length to 0, then using the native Array push
734+ // is a super-fast way to populate an object with array-like properties
735+ this.length = 0;
736+ Array.prototype.push.apply( this, elems );
737+
738+ return this;
739+ },
740+
741+ // Execute a callback for every element in the matched set.
742+ // (You can seed the arguments with an array of args, but this is
743+ // only used internally.)
744+ each: function( callback, args ) {
745+ return jQuery.each( this, callback, args );
746+ },
747+
748+ // Determine the position of an element within
749+ // the matched set of elements
750+ index: function( elem ) {
751+ // Locate the position of the desired element
752+ return jQuery.inArray(
753+ // If it receives a jQuery object, the first element is used
754+ elem && elem.jquery ? elem[0] : elem
755+ , this );
756+ },
757+
758+ attr: function( name, value, type ) {
759+ var options = name;
760+
761+ // Look for the case where we're accessing a style value
762+ if ( typeof name === "string" )
763+ if ( value === undefined )
764+ return this[0] && jQuery[ type || "attr" ]( this[0], name );
765+
766+ else {
767+ options = {};
768+ options[ name ] = value;
769+ }
770+
771+ // Check to see if we're setting style values
772+ return this.each(function(i){
773+ // Set all the styles
774+ for ( name in options )
775+ jQuery.attr(
776+ type ?
777+ this.style :
778+ this,
779+ name, jQuery.prop( this, options[ name ], type, i, name )
780+ );
781+ });
782+ },
783+
784+ css: function( key, value ) {
785+ // ignore negative width and height values
786+ if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
787+ value = undefined;
788+ return this.attr( key, value, "curCSS" );
789+ },
790+
791+ text: function( text ) {
792+ if ( typeof text !== "object" && text != null )
793+ return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
794+
795+ var ret = "";
796+
797+ jQuery.each( text || this, function(){
798+ jQuery.each( this.childNodes, function(){
799+ if ( this.nodeType != 8 )
800+ ret += this.nodeType != 1 ?
801+ this.nodeValue :
802+ jQuery.fn.text( [ this ] );
803+ });
804+ });
805+
806+ return ret;
807+ },
808+
809+ wrapAll: function( html ) {
810+ if ( this[0] ) {
811+ // The elements to wrap the target around
812+ var wrap = jQuery( html, this[0].ownerDocument ).clone();
813+
814+ if ( this[0].parentNode )
815+ wrap.insertBefore( this[0] );
816+
817+ wrap.map(function(){
818+ var elem = this;
819+
820+ while ( elem.firstChild )
821+ elem = elem.firstChild;
822+
823+ return elem;
824+ }).append(this);
825+ }
826+
827+ return this;
828+ },
829+
830+ wrapInner: function( html ) {
831+ return this.each(function(){
832+ jQuery( this ).contents().wrapAll( html );
833+ });
834+ },
835+
836+ wrap: function( html ) {
837+ return this.each(function(){
838+ jQuery( this ).wrapAll( html );
839+ });
840+ },
841+
842+ append: function() {
843+ return this.domManip(arguments, true, function(elem){
844+ if (this.nodeType == 1)
845+ this.appendChild( elem );
846+ });
847+ },
848+
849+ prepend: function() {
850+ return this.domManip(arguments, true, function(elem){
851+ if (this.nodeType == 1)
852+ this.insertBefore( elem, this.firstChild );
853+ });
854+ },
855+
856+ before: function() {
857+ return this.domManip(arguments, false, function(elem){
858+ this.parentNode.insertBefore( elem, this );
859+ });
860+ },
861+
862+ after: function() {
863+ return this.domManip(arguments, false, function(elem){
864+ this.parentNode.insertBefore( elem, this.nextSibling );
865+ });
866+ },
867+
868+ end: function() {
869+ return this.prevObject || jQuery( [] );
870+ },
871+
872+ // For internal use only.
873+ // Behaves like an Array's .push method, not like a jQuery method.
874+ push: [].push,
875+
876+ find: function( selector ) {
877+ if ( this.length === 1 && !/,/.test(selector) ) {
878+ var ret = this.pushStack( [], "find", selector );
879+ ret.length = 0;
880+ jQuery.find( selector, this[0], ret );
881+ return ret;
882+ } else {
883+ var elems = jQuery.map(this, function(elem){
884+ return jQuery.find( selector, elem );
885+ });
886+
887+ return this.pushStack( /[^+>] [^+>]/.test( selector ) ?
888+ jQuery.unique( elems ) :
889+ elems, "find", selector );
890+ }
891+ },
892+
893+ clone: function( events ) {
894+ // Do the clone
895+ var ret = this.map(function(){
896+ if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
897+ // IE copies events bound via attachEvent when
898+ // using cloneNode. Calling detachEvent on the
899+ // clone will also remove the events from the orignal
900+ // In order to get around this, we use innerHTML.
901+ // Unfortunately, this means some modifications to
902+ // attributes in IE that are actually only stored
903+ // as properties will not be copied (such as the
904+ // the name attribute on an input).
905+ var clone = this.cloneNode(true),
906+ container = document.createElement("div");
907+ container.appendChild(clone);
908+ return jQuery.clean([container.innerHTML])[0];
909+ } else
910+ return this.cloneNode(true);
911+ });
912+
913+ // Need to set the expando to null on the cloned set if it exists
914+ // removeData doesn't work here, IE removes it from the original as well
915+ // this is primarily for IE but the data expando shouldn't be copied over in any browser
916+ var clone = ret.find("*").andSelf().each(function(){
917+ if ( this[ expando ] !== undefined )
918+ this[ expando ] = null;
919+ });
920+
921+ // Copy the events from the original to the clone
922+ if ( events === true )
923+ this.find("*").andSelf().each(function(i){
924+ if (this.nodeType == 3)
925+ return;
926+ var events = jQuery.data( this, "events" );
927+
928+ for ( var type in events )
929+ for ( var handler in events[ type ] )
930+ jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
931+ });
932+
933+ // Return the cloned set
934+ return ret;
935+ },
936+
937+ filter: function( selector ) {
938+ return this.pushStack(
939+ jQuery.isFunction( selector ) &&
940+ jQuery.grep(this, function(elem, i){
941+ return selector.call( elem, i );
942+ }) ||
943+
944+ jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
945+ return elem.nodeType === 1;
946+ }) ), "filter", selector );
947+ },
948+
949+ closest: function( selector ) {
950+ var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null;
951+
952+ return this.map(function(){
953+ var cur = this;
954+ while ( cur && cur.ownerDocument ) {
955+ if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) )
956+ return cur;
957+ cur = cur.parentNode;
958+ }
959+ });
960+ },
961+
962+ not: function( selector ) {
963+ if ( typeof selector === "string" )
964+ // test special case where just one selector is passed in
965+ if ( isSimple.test( selector ) )
966+ return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
967+ else
968+ selector = jQuery.multiFilter( selector, this );
969+
970+ var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
971+ return this.filter(function() {
972+ return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
973+ });
974+ },
975+
976+ add: function( selector ) {
977+ return this.pushStack( jQuery.unique( jQuery.merge(
978+ this.get(),
979+ typeof selector === "string" ?
980+ jQuery( selector ) :
981+ jQuery.makeArray( selector )
982+ )));
983+ },
984+
985+ is: function( selector ) {
986+ return !!selector && jQuery.multiFilter( selector, this ).length > 0;
987+ },
988+
989+ hasClass: function( selector ) {
990+ return !!selector && this.is( "." + selector );
991+ },
992+
993+ val: function( value ) {
994+ if ( value === undefined ) {
995+ var elem = this[0];
996+
997+ if ( elem ) {
998+ if( jQuery.nodeName( elem, 'option' ) )
999+ return (elem.attributes.value || {}).specified ? elem.value : elem.text;
1000+
1001+ // We need to handle select boxes special
1002+ if ( jQuery.nodeName( elem, "select" ) ) {
1003+ var index = elem.selectedIndex,
1004+ values = [],
1005+ options = elem.options,
1006+ one = elem.type == "select-one";
1007+
1008+ // Nothing was selected
1009+ if ( index < 0 )
1010+ return null;
1011+
1012+ // Loop through all the selected options
1013+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
1014+ var option = options[ i ];
1015+
1016+ if ( option.selected ) {
1017+ // Get the specifc value for the option
1018+ value = jQuery(option).val();
1019+
1020+ // We don't need an array for one selects
1021+ if ( one )
1022+ return value;
1023+
1024+ // Multi-Selects return an array
1025+ values.push( value );
1026+ }
1027+ }
1028+
1029+ return values;
1030+ }
1031+
1032+ // Everything else, we just grab the value
1033+ return (elem.value || "").replace(/\r/g, "");
1034+
1035+ }
1036+
1037+ return undefined;
1038+ }
1039+
1040+ if ( typeof value === "number" )
1041+ value += '';
1042+
1043+ return this.each(function(){
1044+ if ( this.nodeType != 1 )
1045+ return;
1046+
1047+ if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
1048+ this.checked = (jQuery.inArray(this.value, value) >= 0 ||
1049+ jQuery.inArray(this.name, value) >= 0);
1050+
1051+ else if ( jQuery.nodeName( this, "select" ) ) {
1052+ var values = jQuery.makeArray(value);
1053+
1054+ jQuery( "option", this ).each(function(){
1055+ this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
1056+ jQuery.inArray( this.text, values ) >= 0);
1057+ });
1058+
1059+ if ( !values.length )
1060+ this.selectedIndex = -1;
1061+
1062+ } else
1063+ this.value = value;
1064+ });
1065+ },
1066+
1067+ html: function( value ) {
1068+ return value === undefined ?
1069+ (this[0] ?
1070+ this[0].innerHTML :
1071+ null) :
1072+ this.empty().append( value );
1073+ },
1074+
1075+ replaceWith: function( value ) {
1076+ return this.after( value ).remove();
1077+ },
1078+
1079+ eq: function( i ) {
1080+ return this.slice( i, +i + 1 );
1081+ },
1082+
1083+ slice: function() {
1084+ return this.pushStack( Array.prototype.slice.apply( this, arguments ),
1085+ "slice", Array.prototype.slice.call(arguments).join(",") );
1086+ },
1087+
1088+ map: function( callback ) {
1089+ return this.pushStack( jQuery.map(this, function(elem, i){
1090+ return callback.call( elem, i, elem );
1091+ }));
1092+ },
1093+
1094+ andSelf: function() {
1095+ return this.add( this.prevObject );
1096+ },
1097+
1098+ domManip: function( args, table, callback ) {
1099+ if ( this[0] ) {
1100+ var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
1101+ scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
1102+ first = fragment.firstChild,
1103+ extra = this.length > 1 ? fragment.cloneNode(true) : fragment;
1104+
1105+ if ( first )
1106+ for ( var i = 0, l = this.length; i < l; i++ )
1107+ callback.call( root(this[i], first), i > 0 ? extra.cloneNode(true) : fragment );
1108+
1109+ if ( scripts )
1110+ jQuery.each( scripts, evalScript );
1111+ }
1112+
1113+ return this;
1114+
1115+ function root( elem, cur ) {
1116+ return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
1117+ (elem.getElementsByTagName("tbody")[0] ||
1118+ elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
1119+ elem;
1120+ }
1121+ }
1122+};
1123+
1124+// Give the init function the jQuery prototype for later instantiation
1125+jQuery.fn.init.prototype = jQuery.fn;
1126+
1127+function evalScript( i, elem ) {
1128+ if ( elem.src )
1129+ jQuery.ajax({
1130+ url: elem.src,
1131+ async: false,
1132+ dataType: "script"
1133+ });
1134+
1135+ else
1136+ jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
1137+
1138+ if ( elem.parentNode )
1139+ elem.parentNode.removeChild( elem );
1140+}
1141+
1142+function now(){
1143+ return +new Date;
1144+}
1145+
1146+jQuery.extend = jQuery.fn.extend = function() {
1147+ // copy reference to target object
1148+ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
1149+
1150+ // Handle a deep copy situation
1151+ if ( typeof target === "boolean" ) {
1152+ deep = target;
1153+ target = arguments[1] || {};
1154+ // skip the boolean and the target
1155+ i = 2;
1156+ }
1157+
1158+ // Handle case when target is a string or something (possible in deep copy)
1159+ if ( typeof target !== "object" && !jQuery.isFunction(target) )
1160+ target = {};
1161+
1162+ // extend jQuery itself if only one argument is passed
1163+ if ( length == i ) {
1164+ target = this;
1165+ --i;
1166+ }
1167+
1168+ for ( ; i < length; i++ )
1169+ // Only deal with non-null/undefined values
1170+ if ( (options = arguments[ i ]) != null )
1171+ // Extend the base object
1172+ for ( var name in options ) {
1173+ var src = target[ name ], copy = options[ name ];
1174+
1175+ // Prevent never-ending loop
1176+ if ( target === copy )
1177+ continue;
1178+
1179+ // Recurse if we're merging object values
1180+ if ( deep && copy && typeof copy === "object" && !copy.nodeType )
1181+ target[ name ] = jQuery.extend( deep,
1182+ // Never move original objects, clone them
1183+ src || ( copy.length != null ? [ ] : { } )
1184+ , copy );
1185+
1186+ // Don't bring in undefined values
1187+ else if ( copy !== undefined )
1188+ target[ name ] = copy;
1189+
1190+ }
1191+
1192+ // Return the modified object
1193+ return target;
1194+};
1195+
1196+// exclude the following css properties to add px
1197+var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
1198+ // cache defaultView
1199+ defaultView = document.defaultView || {},
1200+ toString = Object.prototype.toString;
1201+
1202+jQuery.extend({
1203+ noConflict: function( deep ) {
1204+ window.$ = _$;
1205+
1206+ if ( deep )
1207+ window.jQuery = _jQuery;
1208+
1209+ return jQuery;
1210+ },
1211+
1212+ // See test/unit/core.js for details concerning isFunction.
1213+ // Since version 1.3, DOM methods and functions like alert
1214+ // aren't supported. They return false on IE (#2968).
1215+ isFunction: function( obj ) {
1216+ return toString.call(obj) === "[object Function]";
1217+ },
1218+
1219+ isArray: function( obj ) {
1220+ return toString.call(obj) === "[object Array]";
1221+ },
1222+
1223+ // check if an element is in a (or is an) XML document
1224+ isXMLDoc: function( elem ) {
1225+ return elem.documentElement && !elem.body ||
1226+ elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
1227+ },
1228+
1229+ // Evalulates a script in a global context
1230+ globalEval: function( data ) {
1231+ data = jQuery.trim( data );
1232+
1233+ if ( data ) {
1234+ // Inspired by code by Andrea Giammarchi
1235+ // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
1236+ var head = document.getElementsByTagName("head")[0] || document.documentElement,
1237+ script = document.createElement("script");
1238+
1239+ script.type = "text/javascript";
1240+ if ( jQuery.support.scriptEval )
1241+ script.appendChild( document.createTextNode( data ) );
1242+ else
1243+ script.text = data;
1244+
1245+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
1246+ // This arises when a base node is used (#2709).
1247+ head.insertBefore( script, head.firstChild );
1248+ head.removeChild( script );
1249+ }
1250+ },
1251+
1252+ nodeName: function( elem, name ) {
1253+ return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
1254+ },
1255+
1256+ // args is for internal usage only
1257+ each: function( object, callback, args ) {
1258+ var name, i = 0, length = object.length;
1259+
1260+ if ( args ) {
1261+ if ( length === undefined ) {
1262+ for ( name in object )
1263+ if ( callback.apply( object[ name ], args ) === false )
1264+ break;
1265+ } else
1266+ for ( ; i < length; )
1267+ if ( callback.apply( object[ i++ ], args ) === false )
1268+ break;
1269+
1270+ // A special, fast, case for the most common use of each
1271+ } else {
1272+ if ( length === undefined ) {
1273+ for ( name in object )
1274+ if ( callback.call( object[ name ], name, object[ name ] ) === false )
1275+ break;
1276+ } else
1277+ for ( var value = object[0];
1278+ i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
1279+ }
1280+
1281+ return object;
1282+ },
1283+
1284+ prop: function( elem, value, type, i, name ) {
1285+ // Handle executable functions
1286+ if ( jQuery.isFunction( value ) )
1287+ value = value.call( elem, i );
1288+
1289+ // Handle passing in a number to a CSS property
1290+ return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
1291+ value + "px" :
1292+ value;
1293+ },
1294+
1295+ className: {
1296+ // internal only, use addClass("class")
1297+ add: function( elem, classNames ) {
1298+ jQuery.each((classNames || "").split(/\s+/), function(i, className){
1299+ if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
1300+ elem.className += (elem.className ? " " : "") + className;
1301+ });
1302+ },
1303+
1304+ // internal only, use removeClass("class")
1305+ remove: function( elem, classNames ) {
1306+ if (elem.nodeType == 1)
1307+ elem.className = classNames !== undefined ?
1308+ jQuery.grep(elem.className.split(/\s+/), function(className){
1309+ return !jQuery.className.has( classNames, className );
1310+ }).join(" ") :
1311+ "";
1312+ },
1313+
1314+ // internal only, use hasClass("class")
1315+ has: function( elem, className ) {
1316+ return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
1317+ }
1318+ },
1319+
1320+ // A method for quickly swapping in/out CSS properties to get correct calculations
1321+ swap: function( elem, options, callback ) {
1322+ var old = {};
1323+ // Remember the old values, and insert the new ones
1324+ for ( var name in options ) {
1325+ old[ name ] = elem.style[ name ];
1326+ elem.style[ name ] = options[ name ];
1327+ }
1328+
1329+ callback.call( elem );
1330+
1331+ // Revert the old values
1332+ for ( var name in options )
1333+ elem.style[ name ] = old[ name ];
1334+ },
1335+
1336+ css: function( elem, name, force ) {
1337+ if ( name == "width" || name == "height" ) {
1338+ var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
1339+
1340+ function getWH() {
1341+ val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
1342+ var padding = 0, border = 0;
1343+ jQuery.each( which, function() {
1344+ padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
1345+ border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
1346+ });
1347+ val -= Math.round(padding + border);
1348+ }
1349+
1350+ if ( jQuery(elem).is(":visible") )
1351+ getWH();
1352+ else
1353+ jQuery.swap( elem, props, getWH );
1354+
1355+ return Math.max(0, val);
1356+ }
1357+
1358+ return jQuery.curCSS( elem, name, force );
1359+ },
1360+
1361+ curCSS: function( elem, name, force ) {
1362+ var ret, style = elem.style;
1363+
1364+ // We need to handle opacity special in IE
1365+ if ( name == "opacity" && !jQuery.support.opacity ) {
1366+ ret = jQuery.attr( style, "opacity" );
1367+
1368+ return ret == "" ?
1369+ "1" :
1370+ ret;
1371+ }
1372+
1373+ // Make sure we're using the right name for getting the float value
1374+ if ( name.match( /float/i ) )
1375+ name = styleFloat;
1376+
1377+ if ( !force && style && style[ name ] )
1378+ ret = style[ name ];
1379+
1380+ else if ( defaultView.getComputedStyle ) {
1381+
1382+ // Only "float" is needed here
1383+ if ( name.match( /float/i ) )
1384+ name = "float";
1385+
1386+ name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
1387+
1388+ var computedStyle = defaultView.getComputedStyle( elem, null );
1389+
1390+ if ( computedStyle )
1391+ ret = computedStyle.getPropertyValue( name );
1392+
1393+ // We should always get a number back from opacity
1394+ if ( name == "opacity" && ret == "" )
1395+ ret = "1";
1396+
1397+ } else if ( elem.currentStyle ) {
1398+ var camelCase = name.replace(/\-(\w)/g, function(all, letter){
1399+ return letter.toUpperCase();
1400+ });
1401+
1402+ ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
1403+
1404+ // From the awesome hack by Dean Edwards
1405+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
1406+
1407+ // If we're not dealing with a regular pixel number
1408+ // but a number that has a weird ending, we need to convert it to pixels
1409+ if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
1410+ // Remember the original values
1411+ var left = style.left, rsLeft = elem.runtimeStyle.left;
1412+
1413+ // Put in the new values to get a computed value out
1414+ elem.runtimeStyle.left = elem.currentStyle.left;
1415+ style.left = ret || 0;
1416+ ret = style.pixelLeft + "px";
1417+
1418+ // Revert the changed values
1419+ style.left = left;
1420+ elem.runtimeStyle.left = rsLeft;
1421+ }
1422+ }
1423+
1424+ return ret;
1425+ },
1426+
1427+ clean: function( elems, context, fragment ) {
1428+ context = context || document;
1429+
1430+ // !context.createElement fails in IE with an error but returns typeof 'object'
1431+ if ( typeof context.createElement === "undefined" )
1432+ context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
1433+
1434+ // If a single string is passed in and it's a single tag
1435+ // just do a createElement and skip the rest
1436+ if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {
1437+ var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
1438+ if ( match )
1439+ return [ context.createElement( match[1] ) ];
1440+ }
1441+
1442+ var ret = [], scripts = [], div = context.createElement("div");
1443+
1444+ jQuery.each(elems, function(i, elem){
1445+ if ( typeof elem === "number" )
1446+ elem += '';
1447+
1448+ if ( !elem )
1449+ return;
1450+
1451+ // Convert html string into DOM nodes
1452+ if ( typeof elem === "string" ) {
1453+ // Fix "XHTML"-style tags in all browsers
1454+ elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
1455+ return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
1456+ all :
1457+ front + "></" + tag + ">";
1458+ });
1459+
1460+ // Trim whitespace, otherwise indexOf won't work as expected
1461+ var tags = jQuery.trim( elem ).toLowerCase();
1462+
1463+ var wrap =
1464+ // option or optgroup
1465+ !tags.indexOf("<opt") &&
1466+ [ 1, "<select multiple='multiple'>", "</select>" ] ||
1467+
1468+ !tags.indexOf("<leg") &&
1469+ [ 1, "<fieldset>", "</fieldset>" ] ||
1470+
1471+ tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
1472+ [ 1, "<table>", "</table>" ] ||
1473+
1474+ !tags.indexOf("<tr") &&
1475+ [ 2, "<table><tbody>", "</tbody></table>" ] ||
1476+
1477+ // <thead> matched above
1478+ (!tags.indexOf("<td") || !tags.indexOf("<th")) &&
1479+ [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
1480+
1481+ !tags.indexOf("<col") &&
1482+ [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
1483+
1484+ // IE can't serialize <link> and <script> tags normally
1485+ !jQuery.support.htmlSerialize &&
1486+ [ 1, "div<div>", "</div>" ] ||
1487+
1488+ [ 0, "", "" ];
1489+
1490+ // Go to html and back, then peel off extra wrappers
1491+ div.innerHTML = wrap[1] + elem + wrap[2];
1492+
1493+ // Move to the right depth
1494+ while ( wrap[0]-- )
1495+ div = div.lastChild;
1496+
1497+ // Remove IE's autoinserted <tbody> from table fragments
1498+ if ( !jQuery.support.tbody ) {
1499+
1500+ // String was a <table>, *may* have spurious <tbody>
1501+ var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
1502+ div.firstChild && div.firstChild.childNodes :
1503+
1504+ // String was a bare <thead> or <tfoot>
1505+ wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ?
1506+ div.childNodes :
1507+ [];
1508+
1509+ for ( var j = tbody.length - 1; j >= 0 ; --j )
1510+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
1511+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
1512+
1513+ }
1514+
1515+ // IE completely kills leading whitespace when innerHTML is used
1516+ if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) )
1517+ div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
1518+
1519+ elem = jQuery.makeArray( div.childNodes );
1520+ }
1521+
1522+ if ( elem.nodeType )
1523+ ret.push( elem );
1524+ else
1525+ ret = jQuery.merge( ret, elem );
1526+
1527+ });
1528+
1529+ if ( fragment ) {
1530+ for ( var i = 0; ret[i]; i++ ) {
1531+ if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
1532+ scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
1533+ } else {
1534+ if ( ret[i].nodeType === 1 )
1535+ ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
1536+ fragment.appendChild( ret[i] );
1537+ }
1538+ }
1539+
1540+ return scripts;
1541+ }
1542+
1543+ return ret;
1544+ },
1545+
1546+ attr: function( elem, name, value ) {
1547+ // don't set attributes on text and comment nodes
1548+ if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
1549+ return undefined;
1550+
1551+ var notxml = !jQuery.isXMLDoc( elem ),
1552+ // Whether we are setting (or getting)
1553+ set = value !== undefined;
1554+
1555+ // Try to normalize/fix the name
1556+ name = notxml && jQuery.props[ name ] || name;
1557+
1558+ // Only do all the following if this is a node (faster for style)
1559+ // IE elem.getAttribute passes even for style
1560+ if ( elem.tagName ) {
1561+
1562+ // These attributes require special treatment
1563+ var special = /href|src|style/.test( name );
1564+
1565+ // Safari mis-reports the default selected property of a hidden option
1566+ // Accessing the parent's selectedIndex property fixes it
1567+ if ( name == "selected" && elem.parentNode )
1568+ elem.parentNode.selectedIndex;
1569+
1570+ // If applicable, access the attribute via the DOM 0 way
1571+ if ( name in elem && notxml && !special ) {
1572+ if ( set ){
1573+ // We can't allow the type property to be changed (since it causes problems in IE)
1574+ if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
1575+ throw "type property can't be changed";
1576+
1577+ elem[ name ] = value;
1578+ }
1579+
1580+ // browsers index elements by id/name on forms, give priority to attributes.
1581+ if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
1582+ return elem.getAttributeNode( name ).nodeValue;
1583+
1584+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
1585+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
1586+ if ( name == "tabIndex" ) {
1587+ var attributeNode = elem.getAttributeNode( "tabIndex" );
1588+ return attributeNode && attributeNode.specified
1589+ ? attributeNode.value
1590+ : elem.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i)
1591+ ? 0
1592+ : undefined;
1593+ }
1594+
1595+ return elem[ name ];
1596+ }
1597+
1598+ if ( !jQuery.support.style && notxml && name == "style" )
1599+ return jQuery.attr( elem.style, "cssText", value );
1600+
1601+ if ( set )
1602+ // convert the value to a string (all browsers do this but IE) see #1070
1603+ elem.setAttribute( name, "" + value );
1604+
1605+ var attr = !jQuery.support.hrefNormalized && notxml && special
1606+ // Some attributes require a special call on IE
1607+ ? elem.getAttribute( name, 2 )
1608+ : elem.getAttribute( name );
1609+
1610+ // Non-existent attributes return null, we normalize to undefined
1611+ return attr === null ? undefined : attr;
1612+ }
1613+
1614+ // elem is actually elem.style ... set the style
1615+
1616+ // IE uses filters for opacity
1617+ if ( !jQuery.support.opacity && name == "opacity" ) {
1618+ if ( set ) {
1619+ // IE has trouble with opacity if it does not have layout
1620+ // Force it by setting the zoom level
1621+ elem.zoom = 1;
1622+
1623+ // Set the alpha filter to set the opacity
1624+ elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
1625+ (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
1626+ }
1627+
1628+ return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
1629+ (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
1630+ "";
1631+ }
1632+
1633+ name = name.replace(/-([a-z])/ig, function(all, letter){
1634+ return letter.toUpperCase();
1635+ });
1636+
1637+ if ( set )
1638+ elem[ name ] = value;
1639+
1640+ return elem[ name ];
1641+ },
1642+
1643+ trim: function( text ) {
1644+ return (text || "").replace( /^\s+|\s+$/g, "" );
1645+ },
1646+
1647+ makeArray: function( array ) {
1648+ var ret = [];
1649+
1650+ if( array != null ){
1651+ var i = array.length;
1652+ // The window, strings (and functions) also have 'length'
1653+ if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
1654+ ret[0] = array;
1655+ else
1656+ while( i )
1657+ ret[--i] = array[i];
1658+ }
1659+
1660+ return ret;
1661+ },
1662+
1663+ inArray: function( elem, array ) {
1664+ for ( var i = 0, length = array.length; i < length; i++ )
1665+ // Use === because on IE, window == document
1666+ if ( array[ i ] === elem )
1667+ return i;
1668+
1669+ return -1;
1670+ },
1671+
1672+ merge: function( first, second ) {
1673+ // We have to loop this way because IE & Opera overwrite the length
1674+ // expando of getElementsByTagName
1675+ var i = 0, elem, pos = first.length;
1676+ // Also, we need to make sure that the correct elements are being returned
1677+ // (IE returns comment nodes in a '*' query)
1678+ if ( !jQuery.support.getAll ) {
1679+ while ( (elem = second[ i++ ]) != null )
1680+ if ( elem.nodeType != 8 )
1681+ first[ pos++ ] = elem;
1682+
1683+ } else
1684+ while ( (elem = second[ i++ ]) != null )
1685+ first[ pos++ ] = elem;
1686+
1687+ return first;
1688+ },
1689+
1690+ unique: function( array ) {
1691+ var ret = [], done = {};
1692+
1693+ try {
1694+
1695+ for ( var i = 0, length = array.length; i < length; i++ ) {
1696+ var id = jQuery.data( array[ i ] );
1697+
1698+ if ( !done[ id ] ) {
1699+ done[ id ] = true;
1700+ ret.push( array[ i ] );
1701+ }
1702+ }
1703+
1704+ } catch( e ) {
1705+ ret = array;
1706+ }
1707+
1708+ return ret;
1709+ },
1710+
1711+ grep: function( elems, callback, inv ) {
1712+ var ret = [];
1713+
1714+ // Go through the array, only saving the items
1715+ // that pass the validator function
1716+ for ( var i = 0, length = elems.length; i < length; i++ )
1717+ if ( !inv != !callback( elems[ i ], i ) )
1718+ ret.push( elems[ i ] );
1719+
1720+ return ret;
1721+ },
1722+
1723+ map: function( elems, callback ) {
1724+ var ret = [];
1725+
1726+ // Go through the array, translating each of the items to their
1727+ // new value (or values).
1728+ for ( var i = 0, length = elems.length; i < length; i++ ) {
1729+ var value = callback( elems[ i ], i );
1730+
1731+ if ( value != null )
1732+ ret[ ret.length ] = value;
1733+ }
1734+
1735+ return ret.concat.apply( [], ret );
1736+ }
1737+});
1738+
1739+// Use of jQuery.browser is deprecated.
1740+// It's included for backwards compatibility and plugins,
1741+// although they should work to migrate away.
1742+
1743+var userAgent = navigator.userAgent.toLowerCase();
1744+
1745+// Figure out what browser is being used
1746+jQuery.browser = {
1747+ version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
1748+ safari: /webkit/.test( userAgent ),
1749+ opera: /opera/.test( userAgent ),
1750+ msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
1751+ mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
1752+};
1753+
1754+jQuery.each({
1755+ parent: function(elem){return elem.parentNode;},
1756+ parents: function(elem){return jQuery.dir(elem,"parentNode");},
1757+ next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
1758+ prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
1759+ nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
1760+ prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
1761+ siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
1762+ children: function(elem){return jQuery.sibling(elem.firstChild);},
1763+ contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
1764+}, function(name, fn){
1765+ jQuery.fn[ name ] = function( selector ) {
1766+ var ret = jQuery.map( this, fn );
1767+
1768+ if ( selector && typeof selector == "string" )
1769+ ret = jQuery.multiFilter( selector, ret );
1770+
1771+ return this.pushStack( jQuery.unique( ret ), name, selector );
1772+ };
1773+});
1774+
1775+jQuery.each({
1776+ appendTo: "append",
1777+ prependTo: "prepend",
1778+ insertBefore: "before",
1779+ insertAfter: "after",
1780+ replaceAll: "replaceWith"
1781+}, function(name, original){
1782+ jQuery.fn[ name ] = function() {
1783+ var args = arguments;
1784+
1785+ return this.each(function(){
1786+ for ( var i = 0, length = args.length; i < length; i++ )
1787+ jQuery( args[ i ] )[ original ]( this );
1788+ });
1789+ };
1790+});
1791+
1792+jQuery.each({
1793+ removeAttr: function( name ) {
1794+ jQuery.attr( this, name, "" );
1795+ if (this.nodeType == 1)
1796+ this.removeAttribute( name );
1797+ },
1798+
1799+ addClass: function( classNames ) {
1800+ jQuery.className.add( this, classNames );
1801+ },
1802+
1803+ removeClass: function( classNames ) {
1804+ jQuery.className.remove( this, classNames );
1805+ },
1806+
1807+ toggleClass: function( classNames, state ) {
1808+ if( typeof state !== "boolean" )
1809+ state = !jQuery.className.has( this, classNames );
1810+ jQuery.className[ state ? "add" : "remove" ]( this, classNames );
1811+ },
1812+
1813+ remove: function( selector ) {
1814+ if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
1815+ // Prevent memory leaks
1816+ jQuery( "*", this ).add([this]).each(function(){
1817+ jQuery.event.remove(this);
1818+ jQuery.removeData(this);
1819+ });
1820+ if (this.parentNode)
1821+ this.parentNode.removeChild( this );
1822+ }
1823+ },
1824+
1825+ empty: function() {
1826+ // Remove element nodes and prevent memory leaks
1827+ jQuery( ">*", this ).remove();
1828+
1829+ // Remove any remaining nodes
1830+ while ( this.firstChild )
1831+ this.removeChild( this.firstChild );
1832+ }
1833+}, function(name, fn){
1834+ jQuery.fn[ name ] = function(){
1835+ return this.each( fn, arguments );
1836+ };
1837+});
1838+
1839+// Helper function used by the dimensions and offset modules
1840+function num(elem, prop) {
1841+ return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
1842+}
1843+var expando = "jQuery" + now(), uuid = 0, windowData = {};
1844+
1845+jQuery.extend({
1846+ cache: {},
1847+
1848+ data: function( elem, name, data ) {
1849+ elem = elem == window ?
1850+ windowData :
1851+ elem;
1852+
1853+ var id = elem[ expando ];
1854+
1855+ // Compute a unique ID for the element
1856+ if ( !id )
1857+ id = elem[ expando ] = ++uuid;
1858+
1859+ // Only generate the data cache if we're
1860+ // trying to access or manipulate it
1861+ if ( name && !jQuery.cache[ id ] )
1862+ jQuery.cache[ id ] = {};
1863+
1864+ // Prevent overriding the named cache with undefined values
1865+ if ( data !== undefined )
1866+ jQuery.cache[ id ][ name ] = data;
1867+
1868+ // Return the named cache data, or the ID for the element
1869+ return name ?
1870+ jQuery.cache[ id ][ name ] :
1871+ id;
1872+ },
1873+
1874+ removeData: function( elem, name ) {
1875+ elem = elem == window ?
1876+ windowData :
1877+ elem;
1878+
1879+ var id = elem[ expando ];
1880+
1881+ // If we want to remove a specific section of the element's data
1882+ if ( name ) {
1883+ if ( jQuery.cache[ id ] ) {
1884+ // Remove the section of cache data
1885+ delete jQuery.cache[ id ][ name ];
1886+
1887+ // If we've removed all the data, remove the element's cache
1888+ name = "";
1889+
1890+ for ( name in jQuery.cache[ id ] )
1891+ break;
1892+
1893+ if ( !name )
1894+ jQuery.removeData( elem );
1895+ }
1896+
1897+ // Otherwise, we want to remove all of the element's data
1898+ } else {
1899+ // Clean up the element expando
1900+ try {
1901+ delete elem[ expando ];
1902+ } catch(e){
1903+ // IE has trouble directly removing the expando
1904+ // but it's ok with using removeAttribute
1905+ if ( elem.removeAttribute )
1906+ elem.removeAttribute( expando );
1907+ }
1908+
1909+ // Completely remove the data cache
1910+ delete jQuery.cache[ id ];
1911+ }
1912+ },
1913+ queue: function( elem, type, data ) {
1914+ if ( elem ){
1915+
1916+ type = (type || "fx") + "queue";
1917+
1918+ var q = jQuery.data( elem, type );
1919+
1920+ if ( !q || jQuery.isArray(data) )
1921+ q = jQuery.data( elem, type, jQuery.makeArray(data) );
1922+ else if( data )
1923+ q.push( data );
1924+
1925+ }
1926+ return q;
1927+ },
1928+
1929+ dequeue: function( elem, type ){
1930+ var queue = jQuery.queue( elem, type ),
1931+ fn = queue.shift();
1932+
1933+ if( !type || type === "fx" )
1934+ fn = queue[0];
1935+
1936+ if( fn !== undefined )
1937+ fn.call(elem);
1938+ }
1939+});
1940+
1941+jQuery.fn.extend({
1942+ data: function( key, value ){
1943+ var parts = key.split(".");
1944+ parts[1] = parts[1] ? "." + parts[1] : "";
1945+
1946+ if ( value === undefined ) {
1947+ var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
1948+
1949+ if ( data === undefined && this.length )
1950+ data = jQuery.data( this[0], key );
1951+
1952+ return data === undefined && parts[1] ?
1953+ this.data( parts[0] ) :
1954+ data;
1955+ } else
1956+ return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
1957+ jQuery.data( this, key, value );
1958+ });
1959+ },
1960+
1961+ removeData: function( key ){
1962+ return this.each(function(){
1963+ jQuery.removeData( this, key );
1964+ });
1965+ },
1966+ queue: function(type, data){
1967+ if ( typeof type !== "string" ) {
1968+ data = type;
1969+ type = "fx";
1970+ }
1971+
1972+ if ( data === undefined )
1973+ return jQuery.queue( this[0], type );
1974+
1975+ return this.each(function(){
1976+ var queue = jQuery.queue( this, type, data );
1977+
1978+ if( type == "fx" && queue.length == 1 )
1979+ queue[0].call(this);
1980+ });
1981+ },
1982+ dequeue: function(type){
1983+ return this.each(function(){
1984+ jQuery.dequeue( this, type );
1985+ });
1986+ }
1987+});/*!
1988+ * Sizzle CSS Selector Engine - v0.9.1
1989+ * Copyright 2009, The Dojo Foundation
1990+ * Released under the MIT, BSD, and GPL Licenses.
1991+ * More information: http://sizzlejs.com/
1992+ */
1993+(function(){
1994+
1995+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,
1996+ done = 0,
1997+ toString = Object.prototype.toString;
1998+
1999+var Sizzle = function(selector, context, results, seed) {
2000+ results = results || [];
2001+ context = context || document;
2002+
2003+ if ( context.nodeType !== 1 && context.nodeType !== 9 )
2004+ return [];
2005+
2006+ if ( !selector || typeof selector !== "string" ) {
2007+ return results;
2008+ }
2009+
2010+ var parts = [], m, set, checkSet, check, mode, extra, prune = true;
2011+
2012+ // Reset the position of the chunker regexp (start from head)
2013+ chunker.lastIndex = 0;
2014+
2015+ while ( (m = chunker.exec(selector)) !== null ) {
2016+ parts.push( m[1] );
2017+
2018+ if ( m[2] ) {
2019+ extra = RegExp.rightContext;
2020+ break;
2021+ }
2022+ }
2023+
2024+ if ( parts.length > 1 && Expr.match.POS.exec( selector ) ) {
2025+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
2026+ var later = "", match;
2027+
2028+ // Position selectors must be done after the filter
2029+ while ( (match = Expr.match.POS.exec( selector )) ) {
2030+ later += match[0];
2031+ selector = selector.replace( Expr.match.POS, "" );
2032+ }
2033+
2034+ set = Sizzle.filter( later, Sizzle( /\s$/.test(selector) ? selector + "*" : selector, context ) );
2035+ } else {
2036+ set = Expr.relative[ parts[0] ] ?
2037+ [ context ] :
2038+ Sizzle( parts.shift(), context );
2039+
2040+ while ( parts.length ) {
2041+ var tmpSet = [];
2042+
2043+ selector = parts.shift();
2044+ if ( Expr.relative[ selector ] )
2045+ selector += parts.shift();
2046+
2047+ for ( var i = 0, l = set.length; i < l; i++ ) {
2048+ Sizzle( selector, set[i], tmpSet );
2049+ }
2050+
2051+ set = tmpSet;
2052+ }
2053+ }
2054+ } else {
2055+ var ret = seed ?
2056+ { expr: parts.pop(), set: makeArray(seed) } :
2057+ Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context );
2058+ set = Sizzle.filter( ret.expr, ret.set );
2059+
2060+ if ( parts.length > 0 ) {
2061+ checkSet = makeArray(set);
2062+ } else {
2063+ prune = false;
2064+ }
2065+
2066+ while ( parts.length ) {
2067+ var cur = parts.pop(), pop = cur;
2068+
2069+ if ( !Expr.relative[ cur ] ) {
2070+ cur = "";
2071+ } else {
2072+ pop = parts.pop();
2073+ }
2074+
2075+ if ( pop == null ) {
2076+ pop = context;
2077+ }
2078+
2079+ Expr.relative[ cur ]( checkSet, pop, isXML(context) );
2080+ }
2081+ }
2082+
2083+ if ( !checkSet ) {
2084+ checkSet = set;
2085+ }
2086+
2087+ if ( !checkSet ) {
2088+ throw "Syntax error, unrecognized expression: " + (cur || selector);
2089+ }
2090+
2091+ if ( toString.call(checkSet) === "[object Array]" ) {
2092+ if ( !prune ) {
2093+ results.push.apply( results, checkSet );
2094+ } else if ( context.nodeType === 1 ) {
2095+ for ( var i = 0; checkSet[i] != null; i++ ) {
2096+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
2097+ results.push( set[i] );
2098+ }
2099+ }
2100+ } else {
2101+ for ( var i = 0; checkSet[i] != null; i++ ) {
2102+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
2103+ results.push( set[i] );
2104+ }
2105+ }
2106+ }
2107+ } else {
2108+ makeArray( checkSet, results );
2109+ }
2110+
2111+ if ( extra ) {
2112+ Sizzle( extra, context, results, seed );
2113+ }
2114+
2115+ return results;
2116+};
2117+
2118+Sizzle.matches = function(expr, set){
2119+ return Sizzle(expr, null, null, set);
2120+};
2121+
2122+Sizzle.find = function(expr, context){
2123+ var set, match;
2124+
2125+ if ( !expr ) {
2126+ return [];
2127+ }
2128+
2129+ for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
2130+ var type = Expr.order[i], match;
2131+
2132+ if ( (match = Expr.match[ type ].exec( expr )) ) {
2133+ var left = RegExp.leftContext;
2134+
2135+ if ( left.substr( left.length - 1 ) !== "\\" ) {
2136+ match[1] = (match[1] || "").replace(/\\/g, "");
2137+ set = Expr.find[ type ]( match, context );
2138+ if ( set != null ) {
2139+ expr = expr.replace( Expr.match[ type ], "" );
2140+ break;
2141+ }
2142+ }
2143+ }
2144+ }
2145+
2146+ if ( !set ) {
2147+ set = context.getElementsByTagName("*");
2148+ }
2149+
2150+ return {set: set, expr: expr};
2151+};
2152+
2153+Sizzle.filter = function(expr, set, inplace, not){
2154+ var old = expr, result = [], curLoop = set, match, anyFound;
2155+
2156+ while ( expr && set.length ) {
2157+ for ( var type in Expr.filter ) {
2158+ if ( (match = Expr.match[ type ].exec( expr )) != null ) {
2159+ var filter = Expr.filter[ type ], goodArray = null, goodPos = 0, found, item;
2160+ anyFound = false;
2161+
2162+ if ( curLoop == result ) {
2163+ result = [];
2164+ }
2165+
2166+ if ( Expr.preFilter[ type ] ) {
2167+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not );
2168+
2169+ if ( !match ) {
2170+ anyFound = found = true;
2171+ } else if ( match === true ) {
2172+ continue;
2173+ } else if ( match[0] === true ) {
2174+ goodArray = [];
2175+ var last = null, elem;
2176+ for ( var i = 0; (elem = curLoop[i]) !== undefined; i++ ) {
2177+ if ( elem && last !== elem ) {
2178+ goodArray.push( elem );
2179+ last = elem;
2180+ }
2181+ }
2182+ }
2183+ }
2184+
2185+ if ( match ) {
2186+ for ( var i = 0; (item = curLoop[i]) !== undefined; i++ ) {
2187+ if ( item ) {
2188+ if ( goodArray && item != goodArray[goodPos] ) {
2189+ goodPos++;
2190+ }
2191+
2192+ found = filter( item, match, goodPos, goodArray );
2193+ var pass = not ^ !!found;
2194+
2195+ if ( inplace && found != null ) {
2196+ if ( pass ) {
2197+ anyFound = true;
2198+ } else {
2199+ curLoop[i] = false;
2200+ }
2201+ } else if ( pass ) {
2202+ result.push( item );
2203+ anyFound = true;
2204+ }
2205+ }
2206+ }
2207+ }
2208+
2209+ if ( found !== undefined ) {
2210+ if ( !inplace ) {
2211+ curLoop = result;
2212+ }
2213+
2214+ expr = expr.replace( Expr.match[ type ], "" );
2215+
2216+ if ( !anyFound ) {
2217+ return [];
2218+ }
2219+
2220+ break;
2221+ }
2222+ }
2223+ }
2224+
2225+ expr = expr.replace(/\s*,\s*/, "");
2226+
2227+ // Improper expression
2228+ if ( expr == old ) {
2229+ if ( anyFound == null ) {
2230+ throw "Syntax error, unrecognized expression: " + expr;
2231+ } else {
2232+ break;
2233+ }
2234+ }
2235+
2236+ old = expr;
2237+ }
2238+
2239+ return curLoop;
2240+};
2241+
2242+var Expr = Sizzle.selectors = {
2243+ order: [ "ID", "NAME", "TAG" ],
2244+ match: {
2245+ ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
2246+ CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
2247+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,
2248+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
2249+ TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,
2250+ CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
2251+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
2252+ PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
2253+ },
2254+ attrMap: {
2255+ "class": "className",
2256+ "for": "htmlFor"
2257+ },
2258+ attrHandle: {
2259+ href: function(elem){
2260+ return elem.getAttribute("href");
2261+ }
2262+ },
2263+ relative: {
2264+ "+": function(checkSet, part){
2265+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
2266+ var elem = checkSet[i];
2267+ if ( elem ) {
2268+ var cur = elem.previousSibling;
2269+ while ( cur && cur.nodeType !== 1 ) {
2270+ cur = cur.previousSibling;
2271+ }
2272+ checkSet[i] = typeof part === "string" ?
2273+ cur || false :
2274+ cur === part;
2275+ }
2276+ }
2277+
2278+ if ( typeof part === "string" ) {
2279+ Sizzle.filter( part, checkSet, true );
2280+ }
2281+ },
2282+ ">": function(checkSet, part, isXML){
2283+ if ( typeof part === "string" && !/\W/.test(part) ) {
2284+ part = isXML ? part : part.toUpperCase();
2285+
2286+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
2287+ var elem = checkSet[i];
2288+ if ( elem ) {
2289+ var parent = elem.parentNode;
2290+ checkSet[i] = parent.nodeName === part ? parent : false;
2291+ }
2292+ }
2293+ } else {
2294+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
2295+ var elem = checkSet[i];
2296+ if ( elem ) {
2297+ checkSet[i] = typeof part === "string" ?
2298+ elem.parentNode :
2299+ elem.parentNode === part;
2300+ }
2301+ }
2302+
2303+ if ( typeof part === "string" ) {
2304+ Sizzle.filter( part, checkSet, true );
2305+ }
2306+ }
2307+ },
2308+ "": function(checkSet, part, isXML){
2309+ var doneName = "done" + (done++), checkFn = dirCheck;
2310+
2311+ if ( !part.match(/\W/) ) {
2312+ var nodeCheck = part = isXML ? part : part.toUpperCase();
2313+ checkFn = dirNodeCheck;
2314+ }
2315+
2316+ checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
2317+ },
2318+ "~": function(checkSet, part, isXML){
2319+ var doneName = "done" + (done++), checkFn = dirCheck;
2320+
2321+ if ( typeof part === "string" && !part.match(/\W/) ) {
2322+ var nodeCheck = part = isXML ? part : part.toUpperCase();
2323+ checkFn = dirNodeCheck;
2324+ }
2325+
2326+ checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
2327+ }
2328+ },
2329+ find: {
2330+ ID: function(match, context){
2331+ if ( context.getElementById ) {
2332+ var m = context.getElementById(match[1]);
2333+ return m ? [m] : [];
2334+ }
2335+ },
2336+ NAME: function(match, context){
2337+ return context.getElementsByName ? context.getElementsByName(match[1]) : null;
2338+ },
2339+ TAG: function(match, context){
2340+ return context.getElementsByTagName(match[1]);
2341+ }
2342+ },
2343+ preFilter: {
2344+ CLASS: function(match, curLoop, inplace, result, not){
2345+ match = " " + match[1].replace(/\\/g, "") + " ";
2346+
2347+ for ( var i = 0; curLoop[i]; i++ ) {
2348+ if ( not ^ (" " + curLoop[i].className + " ").indexOf(match) >= 0 ) {
2349+ if ( !inplace )
2350+ result.push( curLoop[i] );
2351+ } else if ( inplace ) {
2352+ curLoop[i] = false;
2353+ }
2354+ }
2355+
2356+ return false;
2357+ },
2358+ ID: function(match){
2359+ return match[1].replace(/\\/g, "");
2360+ },
2361+ TAG: function(match, curLoop){
2362+ for ( var i = 0; !curLoop[i]; i++ ){}
2363+ return isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
2364+ },
2365+ CHILD: function(match){
2366+ if ( match[1] == "nth" ) {
2367+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
2368+ var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
2369+ match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
2370+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
2371+
2372+ // calculate the numbers (first)n+(last) including if they are negative
2373+ match[2] = (test[1] + (test[2] || 1)) - 0;
2374+ match[3] = test[3] - 0;
2375+ }
2376+
2377+ // TODO: Move to normal caching system
2378+ match[0] = "done" + (done++);
2379+
2380+ return match;
2381+ },
2382+ ATTR: function(match){
2383+ var name = match[1];
2384+
2385+ if ( Expr.attrMap[name] ) {
2386+ match[1] = Expr.attrMap[name];
2387+ }
2388+
2389+ if ( match[2] === "~=" ) {
2390+ match[4] = " " + match[4] + " ";
2391+ }
2392+
2393+ return match;
2394+ },
2395+ PSEUDO: function(match, curLoop, inplace, result, not){
2396+ if ( match[1] === "not" ) {
2397+ // If we're dealing with a complex expression, or a simple one
2398+ if ( match[3].match(chunker).length > 1 ) {
2399+ match[3] = Sizzle(match[3], null, null, curLoop);
2400+ } else {
2401+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
2402+ if ( !inplace ) {
2403+ result.push.apply( result, ret );
2404+ }
2405+ return false;
2406+ }
2407+ } else if ( Expr.match.POS.test( match[0] ) ) {
2408+ return true;
2409+ }
2410+
2411+ return match;
2412+ },
2413+ POS: function(match){
2414+ match.unshift( true );
2415+ return match;
2416+ }
2417+ },
2418+ filters: {
2419+ enabled: function(elem){
2420+ return elem.disabled === false && elem.type !== "hidden";
2421+ },
2422+ disabled: function(elem){
2423+ return elem.disabled === true;
2424+ },
2425+ checked: function(elem){
2426+ return elem.checked === true;
2427+ },
2428+ selected: function(elem){
2429+ // Accessing this property makes selected-by-default
2430+ // options in Safari work properly
2431+ elem.parentNode.selectedIndex;
2432+ return elem.selected === true;
2433+ },
2434+ parent: function(elem){
2435+ return !!elem.firstChild;
2436+ },
2437+ empty: function(elem){
2438+ return !elem.firstChild;
2439+ },
2440+ has: function(elem, i, match){
2441+ return !!Sizzle( match[3], elem ).length;
2442+ },
2443+ header: function(elem){
2444+ return /h\d/i.test( elem.nodeName );
2445+ },
2446+ text: function(elem){
2447+ return "text" === elem.type;
2448+ },
2449+ radio: function(elem){
2450+ return "radio" === elem.type;
2451+ },
2452+ checkbox: function(elem){
2453+ return "checkbox" === elem.type;
2454+ },
2455+ file: function(elem){
2456+ return "file" === elem.type;
2457+ },
2458+ password: function(elem){
2459+ return "password" === elem.type;
2460+ },
2461+ submit: function(elem){
2462+ return "submit" === elem.type;
2463+ },
2464+ image: function(elem){
2465+ return "image" === elem.type;
2466+ },
2467+ reset: function(elem){
2468+ return "reset" === elem.type;
2469+ },
2470+ button: function(elem){
2471+ return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
2472+ },
2473+ input: function(elem){
2474+ return /input|select|textarea|button/i.test(elem.nodeName);
2475+ }
2476+ },
2477+ setFilters: {
2478+ first: function(elem, i){
2479+ return i === 0;
2480+ },
2481+ last: function(elem, i, match, array){
2482+ return i === array.length - 1;
2483+ },
2484+ even: function(elem, i){
2485+ return i % 2 === 0;
2486+ },
2487+ odd: function(elem, i){
2488+ return i % 2 === 1;
2489+ },
2490+ lt: function(elem, i, match){
2491+ return i < match[3] - 0;
2492+ },
2493+ gt: function(elem, i, match){
2494+ return i > match[3] - 0;
2495+ },
2496+ nth: function(elem, i, match){
2497+ return match[3] - 0 == i;
2498+ },
2499+ eq: function(elem, i, match){
2500+ return match[3] - 0 == i;
2501+ }
2502+ },
2503+ filter: {
2504+ CHILD: function(elem, match){
2505+ var type = match[1], parent = elem.parentNode;
2506+
2507+ var doneName = "child" + parent.childNodes.length;
2508+
2509+ if ( parent && (!parent[ doneName ] || !elem.nodeIndex) ) {
2510+ var count = 1;
2511+
2512+ for ( var node = parent.firstChild; node; node = node.nextSibling ) {
2513+ if ( node.nodeType == 1 ) {
2514+ node.nodeIndex = count++;
2515+ }
2516+ }
2517+
2518+ parent[ doneName ] = count - 1;
2519+ }
2520+
2521+ if ( type == "first" ) {
2522+ return elem.nodeIndex == 1;
2523+ } else if ( type == "last" ) {
2524+ return elem.nodeIndex == parent[ doneName ];
2525+ } else if ( type == "only" ) {
2526+ return parent[ doneName ] == 1;
2527+ } else if ( type == "nth" ) {
2528+ var add = false, first = match[2], last = match[3];
2529+
2530+ if ( first == 1 && last == 0 ) {
2531+ return true;
2532+ }
2533+
2534+ if ( first == 0 ) {
2535+ if ( elem.nodeIndex == last ) {
2536+ add = true;
2537+ }
2538+ } else if ( (elem.nodeIndex - last) % first == 0 && (elem.nodeIndex - last) / first >= 0 ) {
2539+ add = true;
2540+ }
2541+
2542+ return add;
2543+ }
2544+ },
2545+ PSEUDO: function(elem, match, i, array){
2546+ var name = match[1], filter = Expr.filters[ name ];
2547+
2548+ if ( filter ) {
2549+ return filter( elem, i, match, array );
2550+ } else if ( name === "contains" ) {
2551+ return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
2552+ } else if ( name === "not" ) {
2553+ var not = match[3];
2554+
2555+ for ( var i = 0, l = not.length; i < l; i++ ) {
2556+ if ( not[i] === elem ) {
2557+ return false;
2558+ }
2559+ }
2560+
2561+ return true;
2562+ }
2563+ },
2564+ ID: function(elem, match){
2565+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
2566+ },
2567+ TAG: function(elem, match){
2568+ return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
2569+ },
2570+ CLASS: function(elem, match){
2571+ return match.test( elem.className );
2572+ },
2573+ ATTR: function(elem, match){
2574+ var result = Expr.attrHandle[ match[1] ] ? Expr.attrHandle[ match[1] ]( elem ) : elem[ match[1] ] || elem.getAttribute( match[1] ), value = result + "", type = match[2], check = match[4];
2575+ return result == null ?
2576+ false :
2577+ type === "=" ?
2578+ value === check :
2579+ type === "*=" ?
2580+ value.indexOf(check) >= 0 :
2581+ type === "~=" ?
2582+ (" " + value + " ").indexOf(check) >= 0 :
2583+ !match[4] ?
2584+ result :
2585+ type === "!=" ?
2586+ value != check :
2587+ type === "^=" ?
2588+ value.indexOf(check) === 0 :
2589+ type === "$=" ?
2590+ value.substr(value.length - check.length) === check :
2591+ type === "|=" ?
2592+ value === check || value.substr(0, check.length + 1) === check + "-" :
2593+ false;
2594+ },
2595+ POS: function(elem, match, i, array){
2596+ var name = match[2], filter = Expr.setFilters[ name ];
2597+
2598+ if ( filter ) {
2599+ return filter( elem, i, match, array );
2600+ }
2601+ }
2602+ }
2603+};
2604+
2605+for ( var type in Expr.match ) {
2606+ Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
2607+}
2608+
2609+var makeArray = function(array, results) {
2610+ array = Array.prototype.slice.call( array );
2611+
2612+ if ( results ) {
2613+ results.push.apply( results, array );
2614+ return results;
2615+ }
2616+
2617+ return array;
2618+};
2619+
2620+// Perform a simple check to determine if the browser is capable of
2621+// converting a NodeList to an array using builtin methods.
2622+try {
2623+ Array.prototype.slice.call( document.documentElement.childNodes );
2624+
2625+// Provide a fallback method if it does not work
2626+} catch(e){
2627+ makeArray = function(array, results) {
2628+ var ret = results || [];
2629+
2630+ if ( toString.call(array) === "[object Array]" ) {
2631+ Array.prototype.push.apply( ret, array );
2632+ } else {
2633+ if ( typeof array.length === "number" ) {
2634+ for ( var i = 0, l = array.length; i < l; i++ ) {
2635+ ret.push( array[i] );
2636+ }
2637+ } else {
2638+ for ( var i = 0; array[i]; i++ ) {
2639+ ret.push( array[i] );
2640+ }
2641+ }
2642+ }
2643+
2644+ return ret;
2645+ };
2646+}
2647+
2648+// Check to see if the browser returns elements by name when
2649+// querying by getElementById (and provide a workaround)
2650+(function(){
2651+ // We're going to inject a fake input element with a specified name
2652+ var form = document.createElement("form"),
2653+ id = "script" + (new Date).getTime();
2654+ form.innerHTML = "<input name='" + id + "'/>";
2655+
2656+ // Inject it into the root element, check its status, and remove it quickly
2657+ var root = document.documentElement;
2658+ root.insertBefore( form, root.firstChild );
2659+
2660+ // The workaround has to do additional checks after a getElementById
2661+ // Which slows things down for other browsers (hence the branching)
2662+ if ( !!document.getElementById( id ) ) {
2663+ Expr.find.ID = function(match, context){
2664+ if ( context.getElementById ) {
2665+ var m = context.getElementById(match[1]);
2666+ return m ? m.id === match[1] || m.getAttributeNode && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
2667+ }
2668+ };
2669+
2670+ Expr.filter.ID = function(elem, match){
2671+ var node = elem.getAttributeNode && elem.getAttributeNode("id");
2672+ return elem.nodeType === 1 && node && node.nodeValue === match;
2673+ };
2674+ }
2675+
2676+ root.removeChild( form );
2677+})();
2678+
2679+(function(){
2680+ // Check to see if the browser returns only elements
2681+ // when doing getElementsByTagName("*")
2682+
2683+ // Create a fake element
2684+ var div = document.createElement("div");
2685+ div.appendChild( document.createComment("") );
2686+
2687+ // Make sure no comments are found
2688+ if ( div.getElementsByTagName("*").length > 0 ) {
2689+ Expr.find.TAG = function(match, context){
2690+ var results = context.getElementsByTagName(match[1]);
2691+
2692+ // Filter out possible comments
2693+ if ( match[1] === "*" ) {
2694+ var tmp = [];
2695+
2696+ for ( var i = 0; results[i]; i++ ) {
2697+ if ( results[i].nodeType === 1 ) {
2698+ tmp.push( results[i] );
2699+ }
2700+ }
2701+
2702+ results = tmp;
2703+ }
2704+
2705+ return results;
2706+ };
2707+ }
2708+
2709+ // Check to see if an attribute returns normalized href attributes
2710+ div.innerHTML = "<a href='#'></a>";
2711+ if ( div.firstChild.getAttribute("href") !== "#" ) {
2712+ Expr.attrHandle.href = function(elem){
2713+ return elem.getAttribute("href", 2);
2714+ };
2715+ }
2716+})();
2717+
2718+if ( document.querySelectorAll ) (function(){
2719+ var oldSizzle = Sizzle;
2720+
2721+ Sizzle = function(query, context, extra, seed){
2722+ context = context || document;
2723+
2724+ if ( !seed && context.nodeType === 9 ) {
2725+ try {
2726+ return makeArray( context.querySelectorAll(query), extra );
2727+ } catch(e){}
2728+ }
2729+
2730+ return oldSizzle(query, context, extra, seed);
2731+ };
2732+
2733+ Sizzle.find = oldSizzle.find;
2734+ Sizzle.filter = oldSizzle.filter;
2735+ Sizzle.selectors = oldSizzle.selectors;
2736+ Sizzle.matches = oldSizzle.matches;
2737+})();
2738+
2739+if ( document.documentElement.getElementsByClassName ) {
2740+ Expr.order.splice(1, 0, "CLASS");
2741+ Expr.find.CLASS = function(match, context) {
2742+ return context.getElementsByClassName(match[1]);
2743+ };
2744+}
2745+
2746+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
2747+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
2748+ var elem = checkSet[i];
2749+ if ( elem ) {
2750+ elem = elem[dir];
2751+ var match = false;
2752+
2753+ while ( elem && elem.nodeType ) {
2754+ var done = elem[doneName];
2755+ if ( done ) {
2756+ match = checkSet[ done ];
2757+ break;
2758+ }
2759+
2760+ if ( elem.nodeType === 1 && !isXML )
2761+ elem[doneName] = i;
2762+
2763+ if ( elem.nodeName === cur ) {
2764+ match = elem;
2765+ break;
2766+ }
2767+
2768+ elem = elem[dir];
2769+ }
2770+
2771+ checkSet[i] = match;
2772+ }
2773+ }
2774+}
2775+
2776+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
2777+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
2778+ var elem = checkSet[i];
2779+ if ( elem ) {
2780+ elem = elem[dir];
2781+ var match = false;
2782+
2783+ while ( elem && elem.nodeType ) {
2784+ if ( elem[doneName] ) {
2785+ match = checkSet[ elem[doneName] ];
2786+ break;
2787+ }
2788+
2789+ if ( elem.nodeType === 1 ) {
2790+ if ( !isXML )
2791+ elem[doneName] = i;
2792+
2793+ if ( typeof cur !== "string" ) {
2794+ if ( elem === cur ) {
2795+ match = true;
2796+ break;
2797+ }
2798+
2799+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
2800+ match = elem;
2801+ break;
2802+ }
2803+ }
2804+
2805+ elem = elem[dir];
2806+ }
2807+
2808+ checkSet[i] = match;
2809+ }
2810+ }
2811+}
2812+
2813+var contains = document.compareDocumentPosition ? function(a, b){
2814+ return a.compareDocumentPosition(b) & 16;
2815+} : function(a, b){
2816+ return a !== b && (a.contains ? a.contains(b) : true);
2817+};
2818+
2819+var isXML = function(elem){
2820+ return elem.documentElement && !elem.body ||
2821+ elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
2822+};
2823+
2824+// EXPOSE
2825+jQuery.find = Sizzle;
2826+jQuery.filter = Sizzle.filter;
2827+jQuery.expr = Sizzle.selectors;
2828+jQuery.expr[":"] = jQuery.expr.filters;
2829+
2830+Sizzle.selectors.filters.hidden = function(elem){
2831+ return "hidden" === elem.type ||
2832+ jQuery.css(elem, "display") === "none" ||
2833+ jQuery.css(elem, "visibility") === "hidden";
2834+};
2835+
2836+Sizzle.selectors.filters.visible = function(elem){
2837+ return "hidden" !== elem.type &&
2838+ jQuery.css(elem, "display") !== "none" &&
2839+ jQuery.css(elem, "visibility") !== "hidden";
2840+};
2841+
2842+Sizzle.selectors.filters.animated = function(elem){
2843+ return jQuery.grep(jQuery.timers, function(fn){
2844+ return elem === fn.elem;
2845+ }).length;
2846+};
2847+
2848+jQuery.multiFilter = function( expr, elems, not ) {
2849+ if ( not ) {
2850+ expr = ":not(" + expr + ")";
2851+ }
2852+
2853+ return Sizzle.matches(expr, elems);
2854+};
2855+
2856+jQuery.dir = function( elem, dir ){
2857+ var matched = [], cur = elem[dir];
2858+ while ( cur && cur != document ) {
2859+ if ( cur.nodeType == 1 )
2860+ matched.push( cur );
2861+ cur = cur[dir];
2862+ }
2863+ return matched;
2864+};
2865+
2866+jQuery.nth = function(cur, result, dir, elem){
2867+ result = result || 1;
2868+ var num = 0;
2869+
2870+ for ( ; cur; cur = cur[dir] )
2871+ if ( cur.nodeType == 1 && ++num == result )
2872+ break;
2873+
2874+ return cur;
2875+};
2876+
2877+jQuery.sibling = function(n, elem){
2878+ var r = [];
2879+
2880+ for ( ; n; n = n.nextSibling ) {
2881+ if ( n.nodeType == 1 && n != elem )
2882+ r.push( n );
2883+ }
2884+
2885+ return r;
2886+};
2887+
2888+return;
2889+
2890+window.Sizzle = Sizzle;
2891+
2892+})();
2893+/*
2894+ * A number of helper functions used for managing events.
2895+ * Many of the ideas behind this code originated from
2896+ * Dean Edwards' addEvent library.
2897+ */
2898+jQuery.event = {
2899+
2900+ // Bind an event to an element
2901+ // Original by Dean Edwards
2902+ add: function(elem, types, handler, data) {
2903+ if ( elem.nodeType == 3 || elem.nodeType == 8 )
2904+ return;
2905+
2906+ // For whatever reason, IE has trouble passing the window object
2907+ // around, causing it to be cloned in the process
2908+ if ( elem.setInterval && elem != window )
2909+ elem = window;
2910+
2911+ // Make sure that the function being executed has a unique ID
2912+ if ( !handler.guid )
2913+ handler.guid = this.guid++;
2914+
2915+ // if data is passed, bind to handler
2916+ if ( data !== undefined ) {
2917+ // Create temporary function pointer to original handler
2918+ var fn = handler;
2919+
2920+ // Create unique handler function, wrapped around original handler
2921+ handler = this.proxy( fn );
2922+
2923+ // Store data in unique handler
2924+ handler.data = data;
2925+ }
2926+
2927+ // Init the element's event structure
2928+ var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
2929+ handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
2930+ // Handle the second event of a trigger and when
2931+ // an event is called after a page has unloaded
2932+ return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
2933+ jQuery.event.handle.apply(arguments.callee.elem, arguments) :
2934+ undefined;
2935+ });
2936+ // Add elem as a property of the handle function
2937+ // This is to prevent a memory leak with non-native
2938+ // event in IE.
2939+ handle.elem = elem;
2940+
2941+ // Handle multiple events separated by a space
2942+ // jQuery(...).bind("mouseover mouseout", fn);
2943+ jQuery.each(types.split(/\s+/), function(index, type) {
2944+ // Namespaced event handlers
2945+ var namespaces = type.split(".");
2946+ type = namespaces.shift();
2947+ handler.type = namespaces.slice().sort().join(".");
2948+
2949+ // Get the current list of functions bound to this event
2950+ var handlers = events[type];
2951+
2952+ if ( jQuery.event.specialAll[type] )
2953+ jQuery.event.specialAll[type].setup.call(elem, data, namespaces);
2954+
2955+ // Init the event handler queue
2956+ if (!handlers) {
2957+ handlers = events[type] = {};
2958+
2959+ // Check for a special event handler
2960+ // Only use addEventListener/attachEvent if the special
2961+ // events handler returns false
2962+ if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) {
2963+ // Bind the global event handler to the element
2964+ if (elem.addEventListener)
2965+ elem.addEventListener(type, handle, false);
2966+ else if (elem.attachEvent)
2967+ elem.attachEvent("on" + type, handle);
2968+ }
2969+ }
2970+
2971+ // Add the function to the element's handler list
2972+ handlers[handler.guid] = handler;
2973+
2974+ // Keep track of which events have been used, for global triggering
2975+ jQuery.event.global[type] = true;
2976+ });
2977+
2978+ // Nullify elem to prevent memory leaks in IE
2979+ elem = null;
2980+ },
2981+
2982+ guid: 1,
2983+ global: {},
2984+
2985+ // Detach an event or set of events from an element
2986+ remove: function(elem, types, handler) {
2987+ // don't do events on text and comment nodes
2988+ if ( elem.nodeType == 3 || elem.nodeType == 8 )
2989+ return;
2990+
2991+ var events = jQuery.data(elem, "events"), ret, index;
2992+
2993+ if ( events ) {
2994+ // Unbind all events for the element
2995+ if ( types === undefined || (typeof types === "string" && types.charAt(0) == ".") )
2996+ for ( var type in events )
2997+ this.remove( elem, type + (types || "") );
2998+ else {
2999+ // types is actually an event object here
3000+ if ( types.type ) {
3001+ handler = types.handler;
3002+ types = types.type;
3003+ }
3004+
3005+ // Handle multiple events seperated by a space
3006+ // jQuery(...).unbind("mouseover mouseout", fn);
3007+ jQuery.each(types.split(/\s+/), function(index, type){
3008+ // Namespaced event handlers
3009+ var namespaces = type.split(".");
3010+ type = namespaces.shift();
3011+ var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
3012+
3013+ if ( events[type] ) {
3014+ // remove the given handler for the given type
3015+ if ( handler )
3016+ delete events[type][handler.guid];
3017+
3018+ // remove all handlers for the given type
3019+ else
3020+ for ( var handle in events[type] )
3021+ // Handle the removal of namespaced events
3022+ if ( namespace.test(events[type][handle].type) )
3023+ delete events[type][handle];
3024+
3025+ if ( jQuery.event.specialAll[type] )
3026+ jQuery.event.specialAll[type].teardown.call(elem, namespaces);
3027+
3028+ // remove generic event handler if no more handlers exist
3029+ for ( ret in events[type] ) break;
3030+ if ( !ret ) {
3031+ if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) {
3032+ if (elem.removeEventListener)
3033+ elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
3034+ else if (elem.detachEvent)
3035+ elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
3036+ }
3037+ ret = null;
3038+ delete events[type];
3039+ }
3040+ }
3041+ });
3042+ }
3043+
3044+ // Remove the expando if it's no longer used
3045+ for ( ret in events ) break;
3046+ if ( !ret ) {
3047+ var handle = jQuery.data( elem, "handle" );
3048+ if ( handle ) handle.elem = null;
3049+ jQuery.removeData( elem, "events" );
3050+ jQuery.removeData( elem, "handle" );
3051+ }
3052+ }
3053+ },
3054+
3055+ // bubbling is internal
3056+ trigger: function( event, data, elem, bubbling ) {
3057+ // Event object or event type
3058+ var type = event.type || event;
3059+
3060+ if( !bubbling ){
3061+ event = typeof event === "object" ?
3062+ // jQuery.Event object
3063+ event[expando] ? event :
3064+ // Object literal
3065+ jQuery.extend( jQuery.Event(type), event ) :
3066+ // Just the event type (string)
3067+ jQuery.Event(type);
3068+
3069+ if ( type.indexOf("!") >= 0 ) {
3070+ event.type = type = type.slice(0, -1);
3071+ event.exclusive = true;
3072+ }
3073+
3074+ // Handle a global trigger
3075+ if ( !elem ) {
3076+ // Don't bubble custom events when global (to avoid too much overhead)
3077+ event.stopPropagation();
3078+ // Only trigger if we've ever bound an event for it
3079+ if ( this.global[type] )
3080+ jQuery.each( jQuery.cache, function(){
3081+ if ( this.events && this.events[type] )
3082+ jQuery.event.trigger( event, data, this.handle.elem );
3083+ });
3084+ }
3085+
3086+ // Handle triggering a single element
3087+
3088+ // don't do events on text and comment nodes
3089+ if ( !elem || elem.nodeType == 3 || elem.nodeType == 8 )
3090+ return undefined;
3091+
3092+ // Clean up in case it is reused
3093+ event.result = undefined;
3094+ event.target = elem;
3095+
3096+ // Clone the incoming data, if any
3097+ data = jQuery.makeArray(data);
3098+ data.unshift( event );
3099+ }
3100+
3101+ event.currentTarget = elem;
3102+
3103+ // Trigger the event, it is assumed that "handle" is a function
3104+ var handle = jQuery.data(elem, "handle");
3105+ if ( handle )
3106+ handle.apply( elem, data );
3107+
3108+ // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
3109+ if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
3110+ event.result = false;
3111+
3112+ // Trigger the native events (except for clicks on links)
3113+ if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
3114+ this.triggered = true;
3115+ try {
3116+ elem[ type ]();
3117+ // prevent IE from throwing an error for some hidden elements
3118+ } catch (e) {}
3119+ }
3120+
3121+ this.triggered = false;
3122+
3123+ if ( !event.isPropagationStopped() ) {
3124+ var parent = elem.parentNode || elem.ownerDocument;
3125+ if ( parent )
3126+ jQuery.event.trigger(event, data, parent, true);
3127+ }
3128+ },
3129+
3130+ handle: function(event) {
3131+ // returned undefined or false
3132+ var all, handlers;
3133+
3134+ event = arguments[0] = jQuery.event.fix( event || window.event );
3135+
3136+ // Namespaced event handlers
3137+ var namespaces = event.type.split(".");
3138+ event.type = namespaces.shift();
3139+
3140+ // Cache this now, all = true means, any handler
3141+ all = !namespaces.length && !event.exclusive;
3142+
3143+ var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
3144+
3145+ handlers = ( jQuery.data(this, "events") || {} )[event.type];
3146+
3147+ for ( var j in handlers ) {
3148+ var handler = handlers[j];
3149+
3150+ // Filter the functions by class
3151+ if ( all || namespace.test(handler.type) ) {
3152+ // Pass in a reference to the handler function itself
3153+ // So that we can later remove it
3154+ event.handler = handler;
3155+ event.data = handler.data;
3156+
3157+ var ret = handler.apply(this, arguments);
3158+
3159+ if( ret !== undefined ){
3160+ event.result = ret;
3161+ if ( ret === false ) {
3162+ event.preventDefault();
3163+ event.stopPropagation();
3164+ }
3165+ }
3166+
3167+ if( event.isImmediatePropagationStopped() )
3168+ break;
3169+
3170+ }
3171+ }
3172+ },
3173+
3174+ props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
3175+
3176+ fix: function(event) {
3177+ if ( event[expando] )
3178+ return event;
3179+
3180+ // store a copy of the original event object
3181+ // and "clone" to set read-only properties
3182+ var originalEvent = event;
3183+ event = jQuery.Event( originalEvent );
3184+
3185+ for ( var i = this.props.length, prop; i; ){
3186+ prop = this.props[ --i ];
3187+ event[ prop ] = originalEvent[ prop ];
3188+ }
3189+
3190+ // Fix target property, if necessary
3191+ if ( !event.target )
3192+ event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
3193+
3194+ // check if target is a textnode (safari)
3195+ if ( event.target.nodeType == 3 )
3196+ event.target = event.target.parentNode;
3197+
3198+ // Add relatedTarget, if necessary
3199+ if ( !event.relatedTarget && event.fromElement )
3200+ event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
3201+
3202+ // Calculate pageX/Y if missing and clientX/Y available
3203+ if ( event.pageX == null && event.clientX != null ) {
3204+ var doc = document.documentElement, body = document.body;
3205+ event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
3206+ event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
3207+ }
3208+
3209+ // Add which for key events
3210+ if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
3211+ event.which = event.charCode || event.keyCode;
3212+
3213+ // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
3214+ if ( !event.metaKey && event.ctrlKey )
3215+ event.metaKey = event.ctrlKey;
3216+
3217+ // Add which for click: 1 == left; 2 == middle; 3 == right
3218+ // Note: button is not normalized, so don't use it
3219+ if ( !event.which && event.button )
3220+ event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
3221+
3222+ return event;
3223+ },
3224+
3225+ proxy: function( fn, proxy ){
3226+ proxy = proxy || function(){ return fn.apply(this, arguments); };
3227+ // Set the guid of unique handler to the same of original handler, so it can be removed
3228+ proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
3229+ // So proxy can be declared as an argument
3230+ return proxy;
3231+ },
3232+
3233+ special: {
3234+ ready: {
3235+ // Make sure the ready event is setup
3236+ setup: bindReady,
3237+ teardown: function() {}
3238+ }
3239+ },
3240+
3241+ specialAll: {
3242+ live: {
3243+ setup: function( selector, namespaces ){
3244+ jQuery.event.add( this, namespaces[0], liveHandler );
3245+ },
3246+ teardown: function( namespaces ){
3247+ if ( namespaces.length ) {
3248+ var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");
3249+
3250+ jQuery.each( (jQuery.data(this, "events").live || {}), function(){
3251+ if ( name.test(this.type) )
3252+ remove++;
3253+ });
3254+
3255+ if ( remove < 1 )
3256+ jQuery.event.remove( this, namespaces[0], liveHandler );
3257+ }
3258+ }
3259+ }
3260+ }
3261+};
3262+
3263+jQuery.Event = function( src ){
3264+ // Allow instantiation without the 'new' keyword
3265+ if( !this.preventDefault )
3266+ return new jQuery.Event(src);
3267+
3268+ // Event object
3269+ if( src && src.type ){
3270+ this.originalEvent = src;
3271+ this.type = src.type;
3272+ this.timeStamp = src.timeStamp;
3273+ // Event type
3274+ }else
3275+ this.type = src;
3276+
3277+ if( !this.timeStamp )
3278+ this.timeStamp = now();
3279+
3280+ // Mark it as fixed
3281+ this[expando] = true;
3282+};
3283+
3284+function returnFalse(){
3285+ return false;
3286+}
3287+function returnTrue(){
3288+ return true;
3289+}
3290+
3291+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
3292+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
3293+jQuery.Event.prototype = {
3294+ preventDefault: function() {
3295+ this.isDefaultPrevented = returnTrue;
3296+
3297+ var e = this.originalEvent;
3298+ if( !e )
3299+ return;
3300+ // if preventDefault exists run it on the original event
3301+ if (e.preventDefault)
3302+ e.preventDefault();
3303+ // otherwise set the returnValue property of the original event to false (IE)
3304+ e.returnValue = false;
3305+ },
3306+ stopPropagation: function() {
3307+ this.isPropagationStopped = returnTrue;
3308+
3309+ var e = this.originalEvent;
3310+ if( !e )
3311+ return;
3312+ // if stopPropagation exists run it on the original event
3313+ if (e.stopPropagation)
3314+ e.stopPropagation();
3315+ // otherwise set the cancelBubble property of the original event to true (IE)
3316+ e.cancelBubble = true;
3317+ },
3318+ stopImmediatePropagation:function(){
3319+ this.isImmediatePropagationStopped = returnTrue;
3320+ this.stopPropagation();
3321+ },
3322+ isDefaultPrevented: returnFalse,
3323+ isPropagationStopped: returnFalse,
3324+ isImmediatePropagationStopped: returnFalse
3325+};
3326+// Checks if an event happened on an element within another element
3327+// Used in jQuery.event.special.mouseenter and mouseleave handlers
3328+var withinElement = function(event) {
3329+ // Check if mouse(over|out) are still within the same parent element
3330+ var parent = event.relatedTarget;
3331+ // Traverse up the tree
3332+ while ( parent && parent != this )
3333+ try { parent = parent.parentNode; }
3334+ catch(e) { parent = this; }
3335+
3336+ if( parent != this ){
3337+ // set the correct event type
3338+ event.type = event.data;
3339+ // handle event if we actually just moused on to a non sub-element
3340+ jQuery.event.handle.apply( this, arguments );
3341+ }
3342+};
3343+
3344+jQuery.each({
3345+ mouseover: 'mouseenter',
3346+ mouseout: 'mouseleave'
3347+}, function( orig, fix ){
3348+ jQuery.event.special[ fix ] = {
3349+ setup: function(){
3350+ jQuery.event.add( this, orig, withinElement, fix );
3351+ },
3352+ teardown: function(){
3353+ jQuery.event.remove( this, orig, withinElement );
3354+ }
3355+ };
3356+});
3357+
3358+jQuery.fn.extend({
3359+ bind: function( type, data, fn ) {
3360+ return type == "unload" ? this.one(type, data, fn) : this.each(function(){
3361+ jQuery.event.add( this, type, fn || data, fn && data );
3362+ });
3363+ },
3364+
3365+ one: function( type, data, fn ) {
3366+ var one = jQuery.event.proxy( fn || data, function(event) {
3367+ jQuery(this).unbind(event, one);
3368+ return (fn || data).apply( this, arguments );
3369+ });
3370+ return this.each(function(){
3371+ jQuery.event.add( this, type, one, fn && data);
3372+ });
3373+ },
3374+
3375+ unbind: function( type, fn ) {
3376+ return this.each(function(){
3377+ jQuery.event.remove( this, type, fn );
3378+ });
3379+ },
3380+
3381+ trigger: function( type, data ) {
3382+ return this.each(function(){
3383+ jQuery.event.trigger( type, data, this );
3384+ });
3385+ },
3386+
3387+ triggerHandler: function( type, data ) {
3388+ if( this[0] ){
3389+ var event = jQuery.Event(type);
3390+ event.preventDefault();
3391+ event.stopPropagation();
3392+ jQuery.event.trigger( event, data, this[0] );
3393+ return event.result;
3394+ }
3395+ },
3396+
3397+ toggle: function( fn ) {
3398+ // Save reference to arguments for access in closure
3399+ var args = arguments, i = 1;
3400+
3401+ // link all the functions, so any of them can unbind this click handler
3402+ while( i < args.length )
3403+ jQuery.event.proxy( fn, args[i++] );
3404+
3405+ return this.click( jQuery.event.proxy( fn, function(event) {
3406+ // Figure out which function to execute
3407+ this.lastToggle = ( this.lastToggle || 0 ) % i;
3408+
3409+ // Make sure that clicks stop
3410+ event.preventDefault();
3411+
3412+ // and execute the function
3413+ return args[ this.lastToggle++ ].apply( this, arguments ) || false;
3414+ }));
3415+ },
3416+
3417+ hover: function(fnOver, fnOut) {
3418+ return this.mouseenter(fnOver).mouseleave(fnOut);
3419+ },
3420+
3421+ ready: function(fn) {
3422+ // Attach the listeners
3423+ bindReady();
3424+
3425+ // If the DOM is already ready
3426+ if ( jQuery.isReady )
3427+ // Execute the function immediately
3428+ fn.call( document, jQuery );
3429+
3430+ // Otherwise, remember the function for later
3431+ else
3432+ // Add the function to the wait list
3433+ jQuery.readyList.push( fn );
3434+
3435+ return this;
3436+ },
3437+
3438+ live: function( type, fn ){
3439+ var proxy = jQuery.event.proxy( fn );
3440+ proxy.guid += this.selector + type;
3441+
3442+ jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy );
3443+
3444+ return this;
3445+ },
3446+
3447+ die: function( type, fn ){
3448+ jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null );
3449+ return this;
3450+ }
3451+});
3452+
3453+function liveHandler( event ){
3454+ var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"),
3455+ stop = true,
3456+ elems = [];
3457+
3458+ jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){
3459+ if ( check.test(fn.type) ) {
3460+ var elem = jQuery(event.target).closest(fn.data)[0];
3461+ if ( elem )
3462+ elems.push({ elem: elem, fn: fn });
3463+ }
3464+ });
3465+
3466+ jQuery.each(elems, function(){
3467+ if ( !event.isImmediatePropagationStopped() &&
3468+ this.fn.call(this.elem, event, this.fn.data) === false )
3469+ stop = false;
3470+ });
3471+
3472+ return stop;
3473+}
3474+
3475+function liveConvert(type, selector){
3476+ return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");
3477+}
3478+
3479+jQuery.extend({
3480+ isReady: false,
3481+ readyList: [],
3482+ // Handle when the DOM is ready
3483+ ready: function() {
3484+ // Make sure that the DOM is not already loaded
3485+ if ( !jQuery.isReady ) {
3486+ // Remember that the DOM is ready
3487+ jQuery.isReady = true;
3488+
3489+ // If there are functions bound, to execute
3490+ if ( jQuery.readyList ) {
3491+ // Execute all of them
3492+ jQuery.each( jQuery.readyList, function(){
3493+ this.call( document, jQuery );
3494+ });
3495+
3496+ // Reset the list of functions
3497+ jQuery.readyList = null;
3498+ }
3499+
3500+ // Trigger any bound ready events
3501+ jQuery(document).triggerHandler("ready");
3502+ }
3503+ }
3504+});
3505+
3506+var readyBound = false;
3507+
3508+function bindReady(){
3509+ if ( readyBound ) return;
3510+ readyBound = true;
3511+
3512+ // Mozilla, Opera and webkit nightlies currently support this event
3513+ if ( document.addEventListener ) {
3514+ // Use the handy event callback
3515+ document.addEventListener( "DOMContentLoaded", function(){
3516+ document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
3517+ jQuery.ready();
3518+ }, false );
3519+
3520+ // If IE event model is used
3521+ } else if ( document.attachEvent ) {
3522+ // ensure firing before onload,
3523+ // maybe late but safe also for iframes
3524+ document.attachEvent("onreadystatechange", function(){
3525+ if ( document.readyState === "complete" ) {
3526+ document.detachEvent( "onreadystatechange", arguments.callee );
3527+ jQuery.ready();
3528+ }
3529+ });
3530+
3531+ // If IE and not an iframe
3532+ // continually check to see if the document is ready
3533+ if ( document.documentElement.doScroll && !window.frameElement ) (function(){
3534+ if ( jQuery.isReady ) return;
3535+
3536+ try {
3537+ // If IE is used, use the trick by Diego Perini
3538+ // http://javascript.nwbox.com/IEContentLoaded/
3539+ document.documentElement.doScroll("left");
3540+ } catch( error ) {
3541+ setTimeout( arguments.callee, 0 );
3542+ return;
3543+ }
3544+
3545+ // and execute any waiting functions
3546+ jQuery.ready();
3547+ })();
3548+ }
3549+
3550+ // A fallback to window.onload, that will always work
3551+ jQuery.event.add( window, "load", jQuery.ready );
3552+}
3553+
3554+jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
3555+ "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," +
3556+ "change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){
3557+
3558+ // Handle event binding
3559+ jQuery.fn[name] = function(fn){
3560+ return fn ? this.bind(name, fn) : this.trigger(name);
3561+ };
3562+});
3563+
3564+// Prevent memory leaks in IE
3565+// And prevent errors on refresh with events like mouseover in other browsers
3566+// Window isn't included so as not to unbind existing unload events
3567+jQuery( window ).bind( 'unload', function(){
3568+ for ( var id in jQuery.cache )
3569+ // Skip the window
3570+ if ( id != 1 && jQuery.cache[ id ].handle )
3571+ jQuery.event.remove( jQuery.cache[ id ].handle.elem );
3572+});
3573+(function(){
3574+
3575+ jQuery.support = {};
3576+
3577+ var root = document.documentElement,
3578+ script = document.createElement("script"),
3579+ div = document.createElement("div"),
3580+ id = "script" + (new Date).getTime();
3581+
3582+ div.style.display = "none";
3583+ div.innerHTML = ' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';
3584+
3585+ var all = div.getElementsByTagName("*"),
3586+ a = div.getElementsByTagName("a")[0];
3587+
3588+ // Can't get basic test support
3589+ if ( !all || !all.length || !a ) {
3590+ return;
3591+ }
3592+
3593+ jQuery.support = {
3594+ // IE strips leading whitespace when .innerHTML is used
3595+ leadingWhitespace: div.firstChild.nodeType == 3,
3596+
3597+ // Make sure that tbody elements aren't automatically inserted
3598+ // IE will insert them into empty tables
3599+ tbody: !div.getElementsByTagName("tbody").length,
3600+
3601+ // Make sure that you can get all elements in an <object> element
3602+ // IE 7 always returns no results
3603+ objectAll: !!div.getElementsByTagName("object")[0]
3604+ .getElementsByTagName("*").length,
3605+
3606+ // Make sure that link elements get serialized correctly by innerHTML
3607+ // This requires a wrapper element in IE
3608+ htmlSerialize: !!div.getElementsByTagName("link").length,
3609+
3610+ // Get the style information from getAttribute
3611+ // (IE uses .cssText insted)
3612+ style: /red/.test( a.getAttribute("style") ),
3613+
3614+ // Make sure that URLs aren't manipulated
3615+ // (IE normalizes it by default)
3616+ hrefNormalized: a.getAttribute("href") === "/a",
3617+
3618+ // Make sure that element opacity exists
3619+ // (IE uses filter instead)
3620+ opacity: a.style.opacity === "0.5",
3621+
3622+ // Verify style float existence
3623+ // (IE uses styleFloat instead of cssFloat)
3624+ cssFloat: !!a.style.cssFloat,
3625+
3626+ // Will be defined later
3627+ scriptEval: false,
3628+ noCloneEvent: true,
3629+ boxModel: null
3630+ };
3631+
3632+ script.type = "text/javascript";
3633+ try {
3634+ script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
3635+ } catch(e){}
3636+
3637+ root.insertBefore( script, root.firstChild );
3638+
3639+ // Make sure that the execution of code works by injecting a script
3640+ // tag with appendChild/createTextNode
3641+ // (IE doesn't support this, fails, and uses .text instead)
3642+ if ( window[ id ] ) {
3643+ jQuery.support.scriptEval = true;
3644+ delete window[ id ];
3645+ }
3646+
3647+ root.removeChild( script );
3648+
3649+ if ( div.attachEvent && div.fireEvent ) {
3650+ div.attachEvent("onclick", function(){
3651+ // Cloning a node shouldn't copy over any
3652+ // bound event handlers (IE does this)
3653+ jQuery.support.noCloneEvent = false;
3654+ div.detachEvent("onclick", arguments.callee);
3655+ });
3656+ div.cloneNode(true).fireEvent("onclick");
3657+ }
3658+
3659+ // Figure out if the W3C box model works as expected
3660+ // document.body must exist before we can do this
3661+ jQuery(function(){
3662+ var div = document.createElement("div");
3663+ div.style.width = "1px";
3664+ div.style.paddingLeft = "1px";
3665+
3666+ document.body.appendChild( div );
3667+ jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
3668+ document.body.removeChild( div );
3669+ });
3670+})();
3671+
3672+var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";
3673+
3674+jQuery.props = {
3675+ "for": "htmlFor",
3676+ "class": "className",
3677+ "float": styleFloat,
3678+ cssFloat: styleFloat,
3679+ styleFloat: styleFloat,
3680+ readonly: "readOnly",
3681+ maxlength: "maxLength",
3682+ cellspacing: "cellSpacing",
3683+ rowspan: "rowSpan",
3684+ tabindex: "tabIndex"
3685+};
3686+jQuery.fn.extend({
3687+ // Keep a copy of the old load
3688+ _load: jQuery.fn.load,
3689+
3690+ load: function( url, params, callback ) {
3691+ if ( typeof url !== "string" )
3692+ return this._load( url );
3693+
3694+ var off = url.indexOf(" ");
3695+ if ( off >= 0 ) {
3696+ var selector = url.slice(off, url.length);
3697+ url = url.slice(0, off);
3698+ }
3699+
3700+ // Default to a GET request
3701+ var type = "GET";
3702+
3703+ // If the second parameter was provided
3704+ if ( params )
3705+ // If it's a function
3706+ if ( jQuery.isFunction( params ) ) {
3707+ // We assume that it's the callback
3708+ callback = params;
3709+ params = null;
3710+
3711+ // Otherwise, build a param string
3712+ } else if( typeof params === "object" ) {
3713+ params = jQuery.param( params );
3714+ type = "POST";
3715+ }
3716+
3717+ var self = this;
3718+
3719+ // Request the remote document
3720+ jQuery.ajax({
3721+ url: url,
3722+ type: type,
3723+ dataType: "html",
3724+ data: params,
3725+ complete: function(res, status){
3726+ // If successful, inject the HTML into all the matched elements
3727+ if ( status == "success" || status == "notmodified" )
3728+ // See if a selector was specified
3729+ self.html( selector ?
3730+ // Create a dummy div to hold the results
3731+ jQuery("<div/>")
3732+ // inject the contents of the document in, removing the scripts
3733+ // to avoid any 'Permission Denied' errors in IE
3734+ .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
3735+
3736+ // Locate the specified elements
3737+ .find(selector) :
3738+
3739+ // If not, just inject the full result
3740+ res.responseText );
3741+
3742+ if( callback )
3743+ self.each( callback, [res.responseText, status, res] );
3744+ }
3745+ });
3746+ return this;
3747+ },
3748+
3749+ serialize: function() {
3750+ return jQuery.param(this.serializeArray());
3751+ },
3752+ serializeArray: function() {
3753+ return this.map(function(){
3754+ return this.elements ? jQuery.makeArray(this.elements) : this;
3755+ })
3756+ .filter(function(){
3757+ return this.name && !this.disabled &&
3758+ (this.checked || /select|textarea/i.test(this.nodeName) ||
3759+ /text|hidden|password/i.test(this.type));
3760+ })
3761+ .map(function(i, elem){
3762+ var val = jQuery(this).val();
3763+ return val == null ? null :
3764+ jQuery.isArray(val) ?
3765+ jQuery.map( val, function(val, i){
3766+ return {name: elem.name, value: val};
3767+ }) :
3768+ {name: elem.name, value: val};
3769+ }).get();
3770+ }
3771+});
3772+
3773+// Attach a bunch of functions for handling common AJAX events
3774+jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
3775+ jQuery.fn[o] = function(f){
3776+ return this.bind(o, f);
3777+ };
3778+});
3779+
3780+var jsc = now();
3781+
3782+jQuery.extend({
3783+
3784+ get: function( url, data, callback, type ) {
3785+ // shift arguments if data argument was ommited
3786+ if ( jQuery.isFunction( data ) ) {
3787+ callback = data;
3788+ data = null;
3789+ }
3790+
3791+ return jQuery.ajax({
3792+ type: "GET",
3793+ url: url,
3794+ data: data,
3795+ success: callback,
3796+ dataType: type
3797+ });
3798+ },
3799+
3800+ getScript: function( url, callback ) {
3801+ return jQuery.get(url, null, callback, "script");
3802+ },
3803+
3804+ getJSON: function( url, data, callback ) {
3805+ return jQuery.get(url, data, callback, "json");
3806+ },
3807+
3808+ post: function( url, data, callback, type ) {
3809+ if ( jQuery.isFunction( data ) ) {
3810+ callback = data;
3811+ data = {};
3812+ }
3813+
3814+ return jQuery.ajax({
3815+ type: "POST",
3816+ url: url,
3817+ data: data,
3818+ success: callback,
3819+ dataType: type
3820+ });
3821+ },
3822+
3823+ ajaxSetup: function( settings ) {
3824+ jQuery.extend( jQuery.ajaxSettings, settings );
3825+ },
3826+
3827+ ajaxSettings: {
3828+ url: location.href,
3829+ global: true,
3830+ type: "GET",
3831+ contentType: "application/x-www-form-urlencoded",
3832+ processData: true,
3833+ async: true,
3834+ /*
3835+ timeout: 0,
3836+ data: null,
3837+ username: null,
3838+ password: null,
3839+ */
3840+ // Create the request object; Microsoft failed to properly
3841+ // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
3842+ // This function can be overriden by calling jQuery.ajaxSetup
3843+ xhr:function(){
3844+ return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
3845+ },
3846+ accepts: {
3847+ xml: "application/xml, text/xml",
3848+ html: "text/html",
3849+ script: "text/javascript, application/javascript",
3850+ json: "application/json, text/javascript",
3851+ text: "text/plain",
3852+ _default: "*/*"
3853+ }
3854+ },
3855+
3856+ // Last-Modified header cache for next request
3857+ lastModified: {},
3858+
3859+ ajax: function( s ) {
3860+ // Extend the settings, but re-extend 's' so that it can be
3861+ // checked again later (in the test suite, specifically)
3862+ s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
3863+
3864+ var jsonp, jsre = /=\?(&|$)/g, status, data,
3865+ type = s.type.toUpperCase();
3866+
3867+ // convert data if not already a string
3868+ if ( s.data && s.processData && typeof s.data !== "string" )
3869+ s.data = jQuery.param(s.data);
3870+
3871+ // Handle JSONP Parameter Callbacks
3872+ if ( s.dataType == "jsonp" ) {
3873+ if ( type == "GET" ) {
3874+ if ( !s.url.match(jsre) )
3875+ s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
3876+ } else if ( !s.data || !s.data.match(jsre) )
3877+ s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
3878+ s.dataType = "json";
3879+ }
3880+
3881+ // Build temporary JSONP function
3882+ if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
3883+ jsonp = "jsonp" + jsc++;
3884+
3885+ // Replace the =? sequence both in the query string and the data
3886+ if ( s.data )
3887+ s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
3888+ s.url = s.url.replace(jsre, "=" + jsonp + "$1");
3889+
3890+ // We need to make sure
3891+ // that a JSONP style response is executed properly
3892+ s.dataType = "script";
3893+
3894+ // Handle JSONP-style loading
3895+ window[ jsonp ] = function(tmp){
3896+ data = tmp;
3897+ success();
3898+ complete();
3899+ // Garbage collect
3900+ window[ jsonp ] = undefined;
3901+ try{ delete window[ jsonp ]; } catch(e){}
3902+ if ( head )
3903+ head.removeChild( script );
3904+ };
3905+ }
3906+
3907+ if ( s.dataType == "script" && s.cache == null )
3908+ s.cache = false;
3909+
3910+ if ( s.cache === false && type == "GET" ) {
3911+ var ts = now();
3912+ // try replacing _= if it is there
3913+ var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
3914+ // if nothing was replaced, add timestamp to the end
3915+ s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
3916+ }
3917+
3918+ // If data is available, append data to url for get requests
3919+ if ( s.data && type == "GET" ) {
3920+ s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
3921+
3922+ // IE likes to send both get and post data, prevent this
3923+ s.data = null;
3924+ }
3925+
3926+ // Watch for a new set of requests
3927+ if ( s.global && ! jQuery.active++ )
3928+ jQuery.event.trigger( "ajaxStart" );
3929+
3930+ // Matches an absolute URL, and saves the domain
3931+ var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url );
3932+
3933+ // If we're requesting a remote document
3934+ // and trying to load JSON or Script with a GET
3935+ if ( s.dataType == "script" && type == "GET" && parts
3936+ && ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){
3937+
3938+ var head = document.getElementsByTagName("head")[0];
3939+ var script = document.createElement("script");
3940+ script.src = s.url;
3941+ if (s.scriptCharset)
3942+ script.charset = s.scriptCharset;
3943+
3944+ // Handle Script loading
3945+ if ( !jsonp ) {
3946+ var done = false;
3947+
3948+ // Attach handlers for all browsers
3949+ script.onload = script.onreadystatechange = function(){
3950+ if ( !done && (!this.readyState ||
3951+ this.readyState == "loaded" || this.readyState == "complete") ) {
3952+ done = true;
3953+ success();
3954+ complete();
3955+ head.removeChild( script );
3956+ }
3957+ };
3958+ }
3959+
3960+ head.appendChild(script);
3961+
3962+ // We handle everything using the script element injection
3963+ return undefined;
3964+ }
3965+
3966+ var requestDone = false;
3967+
3968+ // Create the request object
3969+ var xhr = s.xhr();
3970+
3971+ // Open the socket
3972+ // Passing null username, generates a login popup on Opera (#2865)
3973+ if( s.username )
3974+ xhr.open(type, s.url, s.async, s.username, s.password);
3975+ else
3976+ xhr.open(type, s.url, s.async);
3977+
3978+ // Need an extra try/catch for cross domain requests in Firefox 3
3979+ try {
3980+ // Set the correct header, if data is being sent
3981+ if ( s.data )
3982+ xhr.setRequestHeader("Content-Type", s.contentType);
3983+
3984+ // Set the If-Modified-Since header, if ifModified mode.
3985+ if ( s.ifModified )
3986+ xhr.setRequestHeader("If-Modified-Since",
3987+ jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
3988+
3989+ // Set header so the called script knows that it's an XMLHttpRequest
3990+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
3991+
3992+ // Set the Accepts header for the server, depending on the dataType
3993+ xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
3994+ s.accepts[ s.dataType ] + ", */*" :
3995+ s.accepts._default );
3996+ } catch(e){}
3997+
3998+ // Allow custom headers/mimetypes and early abort
3999+ if ( s.beforeSend && s.beforeSend(xhr, s) === false ) {
4000+ // Handle the global AJAX counter
4001+ if ( s.global && ! --jQuery.active )
4002+ jQuery.event.trigger( "ajaxStop" );
4003+ // close opended socket
4004+ xhr.abort();
4005+ return false;
4006+ }
4007+
4008+ if ( s.global )
4009+ jQuery.event.trigger("ajaxSend", [xhr, s]);
4010+
4011+ // Wait for a response to come back
4012+ var onreadystatechange = function(isTimeout){
4013+ // The request was aborted, clear the interval and decrement jQuery.active
4014+ if (xhr.readyState == 0) {
4015+ if (ival) {
4016+ // clear poll interval
4017+ clearInterval(ival);
4018+ ival = null;
4019+ // Handle the global AJAX counter
4020+ if ( s.global && ! --jQuery.active )
4021+ jQuery.event.trigger( "ajaxStop" );
4022+ }
4023+ // The transfer is complete and the data is available, or the request timed out
4024+ } else if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {
4025+ requestDone = true;
4026+
4027+ // clear poll interval
4028+ if (ival) {
4029+ clearInterval(ival);
4030+ ival = null;
4031+ }
4032+
4033+ status = isTimeout == "timeout" ? "timeout" :
4034+ !jQuery.httpSuccess( xhr ) ? "error" :
4035+ s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" :
4036+ "success";
4037+
4038+ if ( status == "success" ) {
4039+ // Watch for, and catch, XML document parse errors
4040+ try {
4041+ // process the data (runs the xml through httpData regardless of callback)
4042+ data = jQuery.httpData( xhr, s.dataType, s );
4043+ } catch(e) {
4044+ status = "parsererror";
4045+ }
4046+ }
4047+
4048+ // Make sure that the request was successful or notmodified
4049+ if ( status == "success" ) {
4050+ // Cache Last-Modified header, if ifModified mode.
4051+ var modRes;
4052+ try {
4053+ modRes = xhr.getResponseHeader("Last-Modified");
4054+ } catch(e) {} // swallow exception thrown by FF if header is not available
4055+
4056+ if ( s.ifModified && modRes )
4057+ jQuery.lastModified[s.url] = modRes;
4058+
4059+ // JSONP handles its own success callback
4060+ if ( !jsonp )
4061+ success();
4062+ } else
4063+ jQuery.handleError(s, xhr, status);
4064+
4065+ // Fire the complete handlers
4066+ complete();
4067+
4068+ // Stop memory leaks
4069+ if ( s.async )
4070+ xhr = null;
4071+ }
4072+ };
4073+
4074+ if ( s.async ) {
4075+ // don't attach the handler to the request, just poll it instead
4076+ var ival = setInterval(onreadystatechange, 13);
4077+
4078+ // Timeout checker
4079+ if ( s.timeout > 0 )
4080+ setTimeout(function(){
4081+ // Check to see if the request is still happening
4082+ if ( xhr ) {
4083+ if( !requestDone )
4084+ onreadystatechange( "timeout" );
4085+
4086+ // Cancel the request
4087+ if ( xhr )
4088+ xhr.abort();
4089+ }
4090+ }, s.timeout);
4091+ }
4092+
4093+ // Send the data
4094+ try {
4095+ xhr.send(s.data);
4096+ } catch(e) {
4097+ jQuery.handleError(s, xhr, null, e);
4098+ }
4099+
4100+ // firefox 1.5 doesn't fire statechange for sync requests
4101+ if ( !s.async )
4102+ onreadystatechange();
4103+
4104+ function success(){
4105+ // If a local callback was specified, fire it and pass it the data
4106+ if ( s.success )
4107+ s.success( data, status );
4108+
4109+ // Fire the global callback
4110+ if ( s.global )
4111+ jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
4112+ }
4113+
4114+ function complete(){
4115+ // Process result
4116+ if ( s.complete )
4117+ s.complete(xhr, status);
4118+
4119+ // The request was completed
4120+ if ( s.global )
4121+ jQuery.event.trigger( "ajaxComplete", [xhr, s] );
4122+
4123+ // Handle the global AJAX counter
4124+ if ( s.global && ! --jQuery.active )
4125+ jQuery.event.trigger( "ajaxStop" );
4126+ }
4127+
4128+ // return XMLHttpRequest to allow aborting the request etc.
4129+ return xhr;
4130+ },
4131+
4132+ handleError: function( s, xhr, status, e ) {
4133+ // If a local callback was specified, fire it
4134+ if ( s.error ) s.error( xhr, status, e );
4135+
4136+ // Fire the global callback
4137+ if ( s.global )
4138+ jQuery.event.trigger( "ajaxError", [xhr, s, e] );
4139+ },
4140+
4141+ // Counter for holding the number of active queries
4142+ active: 0,
4143+
4144+ // Determines if an XMLHttpRequest was successful or not
4145+ httpSuccess: function( xhr ) {
4146+ try {
4147+ // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
4148+ return !xhr.status && location.protocol == "file:" ||
4149+ ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223;
4150+ } catch(e){}
4151+ return false;
4152+ },
4153+
4154+ // Determines if an XMLHttpRequest returns NotModified
4155+ httpNotModified: function( xhr, url ) {
4156+ try {
4157+ var xhrRes = xhr.getResponseHeader("Last-Modified");
4158+
4159+ // Firefox always returns 200. check Last-Modified date
4160+ return xhr.status == 304 || xhrRes == jQuery.lastModified[url];
4161+ } catch(e){}
4162+ return false;
4163+ },
4164+
4165+ httpData: function( xhr, type, s ) {
4166+ var ct = xhr.getResponseHeader("content-type"),
4167+ xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
4168+ data = xml ? xhr.responseXML : xhr.responseText;
4169+
4170+ if ( xml && data.documentElement.tagName == "parsererror" )
4171+ throw "parsererror";
4172+
4173+ // Allow a pre-filtering function to sanitize the response
4174+ // s != null is checked to keep backwards compatibility
4175+ if( s && s.dataFilter )
4176+ data = s.dataFilter( data, type );
4177+
4178+ // The filter can actually parse the response
4179+ if( typeof data === "string" ){
4180+
4181+ // If the type is "script", eval it in global context
4182+ if ( type == "script" )
4183+ jQuery.globalEval( data );
4184+
4185+ // Get the JavaScript object, if JSON is used.
4186+ if ( type == "json" )
4187+ data = window["eval"]("(" + data + ")");
4188+ }
4189+
4190+ return data;
4191+ },
4192+
4193+ // Serialize an array of form elements or a set of
4194+ // key/values into a query string
4195+ param: function( a ) {
4196+ var s = [ ];
4197+
4198+ function add( key, value ){
4199+ s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value);
4200+ };
4201+
4202+ // If an array was passed in, assume that it is an array
4203+ // of form elements
4204+ if ( jQuery.isArray(a) || a.jquery )
4205+ // Serialize the form elements
4206+ jQuery.each( a, function(){
4207+ add( this.name, this.value );
4208+ });
4209+
4210+ // Otherwise, assume that it's an object of key/value pairs
4211+ else
4212+ // Serialize the key/values
4213+ for ( var j in a )
4214+ // If the value is an array then the key names need to be repeated
4215+ if ( jQuery.isArray(a[j]) )
4216+ jQuery.each( a[j], function(){
4217+ add( j, this );
4218+ });
4219+ else
4220+ add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] );
4221+
4222+ // Return the resulting serialization
4223+ return s.join("&").replace(/%20/g, "+");
4224+ }
4225+
4226+});
4227+var elemdisplay = {},
4228+ fxAttrs = [
4229+ // height animations
4230+ [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
4231+ // width animations
4232+ [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
4233+ // opacity animations
4234+ [ "opacity" ]
4235+ ];
4236+
4237+function genFx( type, num ){
4238+ var obj = {};
4239+ jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function(){
4240+ obj[ this ] = type;
4241+ });
4242+ return obj;
4243+}
4244+
4245+jQuery.fn.extend({
4246+ show: function(speed,callback){
4247+ if ( speed ) {
4248+ return this.animate( genFx("show", 3), speed, callback);
4249+ } else {
4250+ for ( var i = 0, l = this.length; i < l; i++ ){
4251+ var old = jQuery.data(this[i], "olddisplay");
4252+
4253+ this[i].style.display = old || "";
4254+
4255+ if ( jQuery.css(this[i], "display") === "none" ) {
4256+ var tagName = this[i].tagName, display;
4257+
4258+ if ( elemdisplay[ tagName ] ) {
4259+ display = elemdisplay[ tagName ];
4260+ } else {
4261+ var elem = jQuery("<" + tagName + " />").appendTo("body");
4262+
4263+ display = elem.css("display");
4264+ if ( display === "none" )
4265+ display = "block";
4266+
4267+ elem.remove();
4268+
4269+ elemdisplay[ tagName ] = display;
4270+ }
4271+
4272+ this[i].style.display = jQuery.data(this[i], "olddisplay", display);
4273+ }
4274+ }
4275+
4276+ return this;
4277+ }
4278+ },
4279+
4280+ hide: function(speed,callback){
4281+ if ( speed ) {
4282+ return this.animate( genFx("hide", 3), speed, callback);
4283+ } else {
4284+ for ( var i = 0, l = this.length; i < l; i++ ){
4285+ var old = jQuery.data(this[i], "olddisplay");
4286+ if ( !old && old !== "none" )
4287+ jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
4288+ this[i].style.display = "none";
4289+ }
4290+ return this;
4291+ }
4292+ },
4293+
4294+ // Save the old toggle function
4295+ _toggle: jQuery.fn.toggle,
4296+
4297+ toggle: function( fn, fn2 ){
4298+ var bool = typeof fn === "boolean";
4299+
4300+ return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
4301+ this._toggle.apply( this, arguments ) :
4302+ fn == null || bool ?
4303+ this.each(function(){
4304+ var state = bool ? fn : jQuery(this).is(":hidden");
4305+ jQuery(this)[ state ? "show" : "hide" ]();
4306+ }) :
4307+ this.animate(genFx("toggle", 3), fn, fn2);
4308+ },
4309+
4310+ fadeTo: function(speed,to,callback){
4311+ return this.animate({opacity: to}, speed, callback);
4312+ },
4313+
4314+ animate: function( prop, speed, easing, callback ) {
4315+ var optall = jQuery.speed(speed, easing, callback);
4316+
4317+ return this[ optall.queue === false ? "each" : "queue" ](function(){
4318+
4319+ var opt = jQuery.extend({}, optall), p,
4320+ hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),
4321+ self = this;
4322+
4323+ for ( p in prop ) {
4324+ if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
4325+ return opt.complete.call(this);
4326+
4327+ if ( ( p == "height" || p == "width" ) && this.style ) {
4328+ // Store display property
4329+ opt.display = jQuery.css(this, "display");
4330+
4331+ // Make sure that nothing sneaks out
4332+ opt.overflow = this.style.overflow;
4333+ }
4334+ }
4335+
4336+ if ( opt.overflow != null )
4337+ this.style.overflow = "hidden";
4338+
4339+ opt.curAnim = jQuery.extend({}, prop);
4340+
4341+ jQuery.each( prop, function(name, val){
4342+ var e = new jQuery.fx( self, opt, name );
4343+
4344+ if ( /toggle|show|hide/.test(val) )
4345+ e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
4346+ else {
4347+ var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
4348+ start = e.cur(true) || 0;
4349+
4350+ if ( parts ) {
4351+ var end = parseFloat(parts[2]),
4352+ unit = parts[3] || "px";
4353+
4354+ // We need to compute starting value
4355+ if ( unit != "px" ) {
4356+ self.style[ name ] = (end || 1) + unit;
4357+ start = ((end || 1) / e.cur(true)) * start;
4358+ self.style[ name ] = start + unit;
4359+ }
4360+
4361+ // If a +=/-= token was provided, we're doing a relative animation
4362+ if ( parts[1] )
4363+ end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
4364+
4365+ e.custom( start, end, unit );
4366+ } else
4367+ e.custom( start, val, "" );
4368+ }
4369+ });
4370+
4371+ // For JS strict compliance
4372+ return true;
4373+ });
4374+ },
4375+
4376+ stop: function(clearQueue, gotoEnd){
4377+ var timers = jQuery.timers;
4378+
4379+ if (clearQueue)
4380+ this.queue([]);
4381+
4382+ this.each(function(){
4383+ // go in reverse order so anything added to the queue during the loop is ignored
4384+ for ( var i = timers.length - 1; i >= 0; i-- )
4385+ if ( timers[i].elem == this ) {
4386+ if (gotoEnd)
4387+ // force the next step to be the last
4388+ timers[i](true);
4389+ timers.splice(i, 1);
4390+ }
4391+ });
4392+
4393+ // start the next in the queue if the last step wasn't forced
4394+ if (!gotoEnd)
4395+ this.dequeue();
4396+
4397+ return this;
4398+ }
4399+
4400+});
4401+
4402+// Generate shortcuts for custom animations
4403+jQuery.each({
4404+ slideDown: genFx("show", 1),
4405+ slideUp: genFx("hide", 1),
4406+ slideToggle: genFx("toggle", 1),
4407+ fadeIn: { opacity: "show" },
4408+ fadeOut: { opacity: "hide" }
4409+}, function( name, props ){
4410+ jQuery.fn[ name ] = function( speed, callback ){
4411+ return this.animate( props, speed, callback );
4412+ };
4413+});
4414+
4415+jQuery.extend({
4416+
4417+ speed: function(speed, easing, fn) {
4418+ var opt = typeof speed === "object" ? speed : {
4419+ complete: fn || !fn && easing ||
4420+ jQuery.isFunction( speed ) && speed,
4421+ duration: speed,
4422+ easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
4423+ };
4424+
4425+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
4426+ jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;
4427+
4428+ // Queueing
4429+ opt.old = opt.complete;
4430+ opt.complete = function(){
4431+ if ( opt.queue !== false )
4432+ jQuery(this).dequeue();
4433+ if ( jQuery.isFunction( opt.old ) )
4434+ opt.old.call( this );
4435+ };
4436+
4437+ return opt;
4438+ },
4439+
4440+ easing: {
4441+ linear: function( p, n, firstNum, diff ) {
4442+ return firstNum + diff * p;
4443+ },
4444+ swing: function( p, n, firstNum, diff ) {
4445+ return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
4446+ }
4447+ },
4448+
4449+ timers: [],
4450+ timerId: null,
4451+
4452+ fx: function( elem, options, prop ){
4453+ this.options = options;
4454+ this.elem = elem;
4455+ this.prop = prop;
4456+
4457+ if ( !options.orig )
4458+ options.orig = {};
4459+ }
4460+
4461+});
4462+
4463+jQuery.fx.prototype = {
4464+
4465+ // Simple function for setting a style value
4466+ update: function(){
4467+ if ( this.options.step )
4468+ this.options.step.call( this.elem, this.now, this );
4469+
4470+ (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
4471+
4472+ // Set display property to block for height/width animations
4473+ if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style )
4474+ this.elem.style.display = "block";
4475+ },
4476+
4477+ // Get the current size
4478+ cur: function(force){
4479+ if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) )
4480+ return this.elem[ this.prop ];
4481+
4482+ var r = parseFloat(jQuery.css(this.elem, this.prop, force));
4483+ return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
4484+ },
4485+
4486+ // Start an animation from one number to another
4487+ custom: function(from, to, unit){
4488+ this.startTime = now();
4489+ this.start = from;
4490+ this.end = to;
4491+ this.unit = unit || this.unit || "px";
4492+ this.now = this.start;
4493+ this.pos = this.state = 0;
4494+
4495+ var self = this;
4496+ function t(gotoEnd){
4497+ return self.step(gotoEnd);
4498+ }
4499+
4500+ t.elem = this.elem;
4501+
4502+ jQuery.timers.push(t);
4503+
4504+ if ( t() && jQuery.timerId == null ) {
4505+ jQuery.timerId = setInterval(function(){
4506+ var timers = jQuery.timers;
4507+
4508+ for ( var i = 0; i < timers.length; i++ )
4509+ if ( !timers[i]() )
4510+ timers.splice(i--, 1);
4511+
4512+ if ( !timers.length ) {
4513+ clearInterval( jQuery.timerId );
4514+ jQuery.timerId = null;
4515+ }
4516+ }, 13);
4517+ }
4518+ },
4519+
4520+ // Simple 'show' function
4521+ show: function(){
4522+ // Remember where we started, so that we can go back to it later
4523+ this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
4524+ this.options.show = true;
4525+
4526+ // Begin the animation
4527+ // Make sure that we start at a small width/height to avoid any
4528+ // flash of content
4529+ this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());
4530+
4531+ // Start by showing the element
4532+ jQuery(this.elem).show();
4533+ },
4534+
4535+ // Simple 'hide' function
4536+ hide: function(){
4537+ // Remember where we started, so that we can go back to it later
4538+ this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
4539+ this.options.hide = true;
4540+
4541+ // Begin the animation
4542+ this.custom(this.cur(), 0);
4543+ },
4544+
4545+ // Each step of an animation
4546+ step: function(gotoEnd){
4547+ var t = now();
4548+
4549+ if ( gotoEnd || t >= this.options.duration + this.startTime ) {
4550+ this.now = this.end;
4551+ this.pos = this.state = 1;
4552+ this.update();
4553+
4554+ this.options.curAnim[ this.prop ] = true;
4555+
4556+ var done = true;
4557+ for ( var i in this.options.curAnim )
4558+ if ( this.options.curAnim[i] !== true )
4559+ done = false;
4560+
4561+ if ( done ) {
4562+ if ( this.options.display != null ) {
4563+ // Reset the overflow
4564+ this.elem.style.overflow = this.options.overflow;
4565+
4566+ // Reset the display
4567+ this.elem.style.display = this.options.display;
4568+ if ( jQuery.css(this.elem, "display") == "none" )
4569+ this.elem.style.display = "block";
4570+ }
4571+
4572+ // Hide the element if the "hide" operation was done
4573+ if ( this.options.hide )
4574+ jQuery(this.elem).hide();
4575+
4576+ // Reset the properties, if the item has been hidden or shown
4577+ if ( this.options.hide || this.options.show )
4578+ for ( var p in this.options.curAnim )
4579+ jQuery.attr(this.elem.style, p, this.options.orig[p]);
4580+ }
4581+
4582+ if ( done )
4583+ // Execute the complete function
4584+ this.options.complete.call( this.elem );
4585+
4586+ return false;
4587+ } else {
4588+ var n = t - this.startTime;
4589+ this.state = n / this.options.duration;
4590+
4591+ // Perform the easing function, defaults to swing
4592+ this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
4593+ this.now = this.start + ((this.end - this.start) * this.pos);
4594+
4595+ // Perform the next step of the animation
4596+ this.update();
4597+ }
4598+
4599+ return true;
4600+ }
4601+
4602+};
4603+
4604+jQuery.extend( jQuery.fx, {
4605+ speeds:{
4606+ slow: 600,
4607+ fast: 200,
4608+ // Default speed
4609+ _default: 400
4610+ },
4611+ step: {
4612+
4613+ opacity: function(fx){
4614+ jQuery.attr(fx.elem.style, "opacity", fx.now);
4615+ },
4616+
4617+ _default: function(fx){
4618+ if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
4619+ fx.elem.style[ fx.prop ] = fx.now + fx.unit;
4620+ else
4621+ fx.elem[ fx.prop ] = fx.now;
4622+ }
4623+ }
4624+});
4625+if ( document.documentElement["getBoundingClientRect"] )
4626+ jQuery.fn.offset = function() {
4627+ if ( !this[0] ) return { top: 0, left: 0 };
4628+ if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
4629+ var box = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement,
4630+ clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
4631+ top = box.top + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop,
4632+ left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
4633+ return { top: top, left: left };
4634+ };
4635+else
4636+ jQuery.fn.offset = function() {
4637+ if ( !this[0] ) return { top: 0, left: 0 };
4638+ if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
4639+ jQuery.offset.initialized || jQuery.offset.initialize();
4640+
4641+ var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem,
4642+ doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
4643+ body = doc.body, defaultView = doc.defaultView,
4644+ prevComputedStyle = defaultView.getComputedStyle(elem, null),
4645+ top = elem.offsetTop, left = elem.offsetLeft;
4646+
4647+ while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
4648+ computedStyle = defaultView.getComputedStyle(elem, null);
4649+ top -= elem.scrollTop, left -= elem.scrollLeft;
4650+ if ( elem === offsetParent ) {
4651+ top += elem.offsetTop, left += elem.offsetLeft;
4652+ if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) )
4653+ top += parseInt( computedStyle.borderTopWidth, 10) || 0,
4654+ left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
4655+ prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
4656+ }
4657+ if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" )
4658+ top += parseInt( computedStyle.borderTopWidth, 10) || 0,
4659+ left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
4660+ prevComputedStyle = computedStyle;
4661+ }
4662+
4663+ if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" )
4664+ top += body.offsetTop,
4665+ left += body.offsetLeft;
4666+
4667+ if ( prevComputedStyle.position === "fixed" )
4668+ top += Math.max(docElem.scrollTop, body.scrollTop),
4669+ left += Math.max(docElem.scrollLeft, body.scrollLeft);
4670+
4671+ return { top: top, left: left };
4672+ };
4673+
4674+jQuery.offset = {
4675+ initialize: function() {
4676+ if ( this.initialized ) return;
4677+ var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop,
4678+ html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"cellpadding="0"cellspacing="0"><tr><td></td></tr></table>';
4679+
4680+ rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' };
4681+ for ( prop in rules ) container.style[prop] = rules[prop];
4682+
4683+ container.innerHTML = html;
4684+ body.insertBefore(container, body.firstChild);
4685+ innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild;
4686+
4687+ this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
4688+ this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
4689+
4690+ innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative';
4691+ this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
4692+
4693+ body.style.marginTop = '1px';
4694+ this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0);
4695+ body.style.marginTop = bodyMarginTop;
4696+
4697+ body.removeChild(container);
4698+ this.initialized = true;
4699+ },
4700+
4701+ bodyOffset: function(body) {
4702+ jQuery.offset.initialized || jQuery.offset.initialize();
4703+ var top = body.offsetTop, left = body.offsetLeft;
4704+ if ( jQuery.offset.doesNotIncludeMarginInBodyOffset )
4705+ top += parseInt( jQuery.curCSS(body, 'marginTop', true), 10 ) || 0,
4706+ left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0;
4707+ return { top: top, left: left };
4708+ }
4709+};
4710+
4711+
4712+jQuery.fn.extend({
4713+ position: function() {
4714+ var left = 0, top = 0, results;
4715+
4716+ if ( this[0] ) {
4717+ // Get *real* offsetParent
4718+ var offsetParent = this.offsetParent(),
4719+
4720+ // Get correct offsets
4721+ offset = this.offset(),
4722+ parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
4723+
4724+ // Subtract element margins
4725+ // note: when an element has margin: auto the offsetLeft and marginLeft
4726+ // are the same in Safari causing offset.left to incorrectly be 0
4727+ offset.top -= num( this, 'marginTop' );
4728+ offset.left -= num( this, 'marginLeft' );
4729+
4730+ // Add offsetParent borders
4731+ parentOffset.top += num( offsetParent, 'borderTopWidth' );
4732+ parentOffset.left += num( offsetParent, 'borderLeftWidth' );
4733+
4734+ // Subtract the two offsets
4735+ results = {
4736+ top: offset.top - parentOffset.top,
4737+ left: offset.left - parentOffset.left
4738+ };
4739+ }
4740+
4741+ return results;
4742+ },
4743+
4744+ offsetParent: function() {
4745+ var offsetParent = this[0].offsetParent || document.body;
4746+ while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )
4747+ offsetParent = offsetParent.offsetParent;
4748+ return jQuery(offsetParent);
4749+ }
4750+});
4751+
4752+
4753+// Create scrollLeft and scrollTop methods
4754+jQuery.each( ['Left', 'Top'], function(i, name) {
4755+ var method = 'scroll' + name;
4756+
4757+ jQuery.fn[ method ] = function(val) {
4758+ if (!this[0]) return null;
4759+
4760+ return val !== undefined ?
4761+
4762+ // Set the scroll offset
4763+ this.each(function() {
4764+ this == window || this == document ?
4765+ window.scrollTo(
4766+ !i ? val : jQuery(window).scrollLeft(),
4767+ i ? val : jQuery(window).scrollTop()
4768+ ) :
4769+ this[ method ] = val;
4770+ }) :
4771+
4772+ // Return the scroll offset
4773+ this[0] == window || this[0] == document ?
4774+ self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
4775+ jQuery.boxModel && document.documentElement[ method ] ||
4776+ document.body[ method ] :
4777+ this[0][ method ];
4778+ };
4779+});
4780+// Create innerHeight, innerWidth, outerHeight and outerWidth methods
4781+jQuery.each([ "Height", "Width" ], function(i, name){
4782+
4783+ var tl = i ? "Left" : "Top", // top or left
4784+ br = i ? "Right" : "Bottom"; // bottom or right
4785+
4786+ // innerHeight and innerWidth
4787+ jQuery.fn["inner" + name] = function(){
4788+ return this[ name.toLowerCase() ]() +
4789+ num(this, "padding" + tl) +
4790+ num(this, "padding" + br);
4791+ };
4792+
4793+ // outerHeight and outerWidth
4794+ jQuery.fn["outer" + name] = function(margin) {
4795+ return this["inner" + name]() +
4796+ num(this, "border" + tl + "Width") +
4797+ num(this, "border" + br + "Width") +
4798+ (margin ?
4799+ num(this, "margin" + tl) + num(this, "margin" + br) : 0);
4800+ };
4801+
4802+ var type = name.toLowerCase();
4803+
4804+ jQuery.fn[ type ] = function( size ) {
4805+ // Get window width or height
4806+ return this[0] == window ?
4807+ // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
4808+ document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] ||
4809+ document.body[ "client" + name ] :
4810+
4811+ // Get document width or height
4812+ this[0] == document ?
4813+ // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
4814+ Math.max(
4815+ document.documentElement["client" + name],
4816+ document.body["scroll" + name], document.documentElement["scroll" + name],
4817+ document.body["offset" + name], document.documentElement["offset" + name]
4818+ ) :
4819+
4820+ // Get or set width or height on the element
4821+ size === undefined ?
4822+ // Get width or height on the element
4823+ (this.length ? jQuery.css( this[0], type ) : null) :
4824+
4825+ // Set the width or height on the element (default to pixels if value is unitless)
4826+ this.css( type, typeof size === "string" ? size : size + "px" );
4827+ };
4828+
4829+});})();
4830
4831=== added file 'js/jquery-1.3.min.js'
4832--- js/jquery-1.3.min.js 1970-01-01 00:00:00 +0000
4833+++ js/jquery-1.3.min.js 2012-08-29 11:42:51 +0000
4834@@ -0,0 +1,19 @@
4835+/*
4836+ * jQuery JavaScript Library v1.3
4837+ * http://jquery.com/
4838+ *
4839+ * Copyright (c) 2009 John Resig
4840+ * Dual licensed under the MIT and GPL licenses.
4841+ * http://docs.jquery.com/License
4842+ *
4843+ * Date: 2009-01-13 12:50:31 -0500 (Tue, 13 Jan 2009)
4844+ * Revision: 6104
4845+ */
4846+(function(){var l=this,g,x=l.jQuery,o=l.$,n=l.jQuery=l.$=function(D,E){return new n.fn.init(D,E)},C=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;n.fn=n.prototype={init:function(D,G){D=D||document;if(D.nodeType){this[0]=D;this.length=1;this.context=D;return this}if(typeof D==="string"){var F=C.exec(D);if(F&&(F[1]||!G)){if(F[1]){D=n.clean([F[1]],G)}else{var H=document.getElementById(F[3]);if(H){if(H.id!=F[3]){return n().find(D)}var E=n(H);E.context=document;E.selector=D;return E}D=[]}}else{return n(G).find(D)}}else{if(n.isFunction(D)){return n(document).ready(D)}}if(D.selector&&D.context){this.selector=D.selector;this.context=D.context}return this.setArray(n.makeArray(D))},selector:"",jquery:"1.3",size:function(){return this.length},get:function(D){return D===g?n.makeArray(this):this[D]},pushStack:function(E,G,D){var F=n(E);F.prevObject=this;F.context=this.context;if(G==="find"){F.selector=this.selector+(this.selector?" ":"")+D}else{if(G){F.selector=this.selector+"."+G+"("+D+")"}}return F},setArray:function(D){this.length=0;Array.prototype.push.apply(this,D);return this},each:function(E,D){return n.each(this,E,D)},index:function(D){return n.inArray(D&&D.jquery?D[0]:D,this)},attr:function(E,G,F){var D=E;if(typeof E==="string"){if(G===g){return this[0]&&n[F||"attr"](this[0],E)}else{D={};D[E]=G}}return this.each(function(H){for(E in D){n.attr(F?this.style:this,E,n.prop(this,D[E],F,H,E))}})},css:function(D,E){if((D=="width"||D=="height")&&parseFloat(E)<0){E=g}return this.attr(D,E,"curCSS")},text:function(E){if(typeof E!=="object"&&E!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(E))}var D="";n.each(E||this,function(){n.each(this.childNodes,function(){if(this.nodeType!=8){D+=this.nodeType!=1?this.nodeValue:n.fn.text([this])}})});return D},wrapAll:function(D){if(this[0]){var E=n(D,this[0].ownerDocument).clone();if(this[0].parentNode){E.insertBefore(this[0])}E.map(function(){var F=this;while(F.firstChild){F=F.firstChild}return F}).append(this)}return this},wrapInner:function(D){return this.each(function(){n(this).contents().wrapAll(D)})},wrap:function(D){return this.each(function(){n(this).wrapAll(D)})},append:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.appendChild(D)}})},prepend:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.insertBefore(D,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this)})},after:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this.nextSibling)})},end:function(){return this.prevObject||n([])},push:[].push,find:function(D){if(this.length===1&&!/,/.test(D)){var F=this.pushStack([],"find",D);F.length=0;n.find(D,this[0],F);return F}else{var E=n.map(this,function(G){return n.find(D,G)});return this.pushStack(/[^+>] [^+>]/.test(D)?n.unique(E):E,"find",D)}},clone:function(E){var D=this.map(function(){if(!n.support.noCloneEvent&&!n.isXMLDoc(this)){var H=this.cloneNode(true),G=document.createElement("div");G.appendChild(H);return n.clean([G.innerHTML])[0]}else{return this.cloneNode(true)}});var F=D.find("*").andSelf().each(function(){if(this[h]!==g){this[h]=null}});if(E===true){this.find("*").andSelf().each(function(H){if(this.nodeType==3){return}var G=n.data(this,"events");for(var J in G){for(var I in G[J]){n.event.add(F[H],J,G[J][I],G[J][I].data)}}})}return D},filter:function(D){return this.pushStack(n.isFunction(D)&&n.grep(this,function(F,E){return D.call(F,E)})||n.multiFilter(D,n.grep(this,function(E){return E.nodeType===1})),"filter",D)},closest:function(D){var E=n.expr.match.POS.test(D)?n(D):null;return this.map(function(){var F=this;while(F&&F.ownerDocument){if(E?E.index(F)>-1:n(F).is(D)){return F}F=F.parentNode}})},not:function(D){if(typeof D==="string"){if(f.test(D)){return this.pushStack(n.multiFilter(D,this,true),"not",D)}else{D=n.multiFilter(D,this)}}var E=D.length&&D[D.length-1]!==g&&!D.nodeType;return this.filter(function(){return E?n.inArray(this,D)<0:this!=D})},add:function(D){return this.pushStack(n.unique(n.merge(this.get(),typeof D==="string"?n(D):n.makeArray(D))))},is:function(D){return !!D&&n.multiFilter(D,this).length>0},hasClass:function(D){return !!D&&this.is("."+D)},val:function(J){if(J===g){var D=this[0];if(D){if(n.nodeName(D,"option")){return(D.attributes.value||{}).specified?D.value:D.text}if(n.nodeName(D,"select")){var H=D.selectedIndex,K=[],L=D.options,G=D.type=="select-one";if(H<0){return null}for(var E=G?H:0,I=G?H+1:L.length;E<I;E++){var F=L[E];if(F.selected){J=n(F).val();if(G){return J}K.push(J)}}return K}return(D.value||"").replace(/\r/g,"")}return g}if(typeof J==="number"){J+=""}return this.each(function(){if(this.nodeType!=1){return}if(n.isArray(J)&&/radio|checkbox/.test(this.type)){this.checked=(n.inArray(this.value,J)>=0||n.inArray(this.name,J)>=0)}else{if(n.nodeName(this,"select")){var M=n.makeArray(J);n("option",this).each(function(){this.selected=(n.inArray(this.value,M)>=0||n.inArray(this.text,M)>=0)});if(!M.length){this.selectedIndex=-1}}else{this.value=J}}})},html:function(D){return D===g?(this[0]?this[0].innerHTML:null):this.empty().append(D)},replaceWith:function(D){return this.after(D).remove()},eq:function(D){return this.slice(D,+D+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(D){return this.pushStack(n.map(this,function(F,E){return D.call(F,E,F)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=n.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild,D=this.length>1?I.cloneNode(true):I;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),G>0?D.cloneNode(true):I)}}if(F){n.each(F,y)}}return this;function K(N,O){return M&&n.nodeName(N,"table")&&n.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};n.fn.init.prototype=n.fn;function y(D,E){if(E.src){n.ajax({url:E.src,async:false,dataType:"script"})}else{n.globalEval(E.text||E.textContent||E.innerHTML||"")}if(E.parentNode){E.parentNode.removeChild(E)}}function e(){return +new Date}n.extend=n.fn.extend=function(){var I=arguments[0]||{},G=1,H=arguments.length,D=false,F;if(typeof I==="boolean"){D=I;I=arguments[1]||{};G=2}if(typeof I!=="object"&&!n.isFunction(I)){I={}}if(H==G){I=this;--G}for(;G<H;G++){if((F=arguments[G])!=null){for(var E in F){var J=I[E],K=F[E];if(I===K){continue}if(D&&K&&typeof K==="object"&&!K.nodeType){I[E]=n.extend(D,J||(K.length!=null?[]:{}),K)}else{if(K!==g){I[E]=K}}}}}return I};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,p=document.defaultView||{},r=Object.prototype.toString;n.extend({noConflict:function(D){l.$=o;if(D){l.jQuery=x}return n},isFunction:function(D){return r.call(D)==="[object Function]"},isArray:function(D){return r.call(D)==="[object Array]"},isXMLDoc:function(D){return D.documentElement&&!D.body||D.tagName&&D.ownerDocument&&!D.ownerDocument.body},globalEval:function(F){F=n.trim(F);if(F){var E=document.getElementsByTagName("head")[0]||document.documentElement,D=document.createElement("script");D.type="text/javascript";if(n.support.scriptEval){D.appendChild(document.createTextNode(F))}else{D.text=F}E.insertBefore(D,E.firstChild);E.removeChild(D)}},nodeName:function(E,D){return E.nodeName&&E.nodeName.toUpperCase()==D.toUpperCase()},each:function(F,J,E){var D,G=0,H=F.length;if(E){if(H===g){for(D in F){if(J.apply(F[D],E)===false){break}}}else{for(;G<H;){if(J.apply(F[G++],E)===false){break}}}}else{if(H===g){for(D in F){if(J.call(F[D],D,F[D])===false){break}}}else{for(var I=F[0];G<H&&J.call(I,G,I)!==false;I=F[++G]){}}}return F},prop:function(G,H,F,E,D){if(n.isFunction(H)){H=H.call(G,E)}return typeof H==="number"&&F=="curCSS"&&!b.test(D)?H+"px":H},className:{add:function(D,E){n.each((E||"").split(/\s+/),function(F,G){if(D.nodeType==1&&!n.className.has(D.className,G)){D.className+=(D.className?" ":"")+G}})},remove:function(D,E){if(D.nodeType==1){D.className=E!==g?n.grep(D.className.split(/\s+/),function(F){return !n.className.has(E,F)}).join(" "):""}},has:function(E,D){return n.inArray(D,(E.className||E).toString().split(/\s+/))>-1}},swap:function(G,F,H){var D={};for(var E in F){D[E]=G.style[E];G.style[E]=F[E]}H.call(G);for(var E in F){G.style[E]=D[E]}},css:function(F,D,H){if(D=="width"||D=="height"){var J,E={position:"absolute",visibility:"hidden",display:"block"},I=D=="width"?["Left","Right"]:["Top","Bottom"];function G(){J=D=="width"?F.offsetWidth:F.offsetHeight;var L=0,K=0;n.each(I,function(){L+=parseFloat(n.curCSS(F,"padding"+this,true))||0;K+=parseFloat(n.curCSS(F,"border"+this+"Width",true))||0});J-=Math.round(L+K)}if(n(F).is(":visible")){G()}else{n.swap(F,E,G)}return Math.max(0,J)}return n.curCSS(F,D,H)},curCSS:function(H,E,F){var K,D=H.style;if(E=="opacity"&&!n.support.opacity){K=n.attr(D,"opacity");return K==""?"1":K}if(E.match(/float/i)){E=v}if(!F&&D&&D[E]){K=D[E]}else{if(p.getComputedStyle){if(E.match(/float/i)){E="float"}E=E.replace(/([A-Z])/g,"-$1").toLowerCase();var L=p.getComputedStyle(H,null);if(L){K=L.getPropertyValue(E)}if(E=="opacity"&&K==""){K="1"}}else{if(H.currentStyle){var I=E.replace(/\-(\w)/g,function(M,N){return N.toUpperCase()});K=H.currentStyle[E]||H.currentStyle[I];if(!/^\d+(px)?$/i.test(K)&&/^\d/.test(K)){var G=D.left,J=H.runtimeStyle.left;H.runtimeStyle.left=H.currentStyle.left;D.left=K||0;K=D.pixelLeft+"px";D.left=G;H.runtimeStyle.left=J}}}}return K},clean:function(E,J,H){J=J||document;if(typeof J.createElement==="undefined"){J=J.ownerDocument||J[0]&&J[0].ownerDocument||document}if(!H&&E.length===1&&typeof E[0]==="string"){var G=/^<(\w+)\s*\/?>$/.exec(E[0]);if(G){return[J.createElement(G[1])]}}var F=[],D=[],K=J.createElement("div");n.each(E,function(O,Q){if(typeof Q==="number"){Q+=""}if(!Q){return}if(typeof Q==="string"){Q=Q.replace(/(<(\w+)[^>]*?)\/>/g,function(S,T,R){return R.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?S:T+"></"+R+">"});var N=n.trim(Q).toLowerCase();var P=!N.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!N.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||N.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!N.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!N.indexOf("<td")||!N.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!N.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!n.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];K.innerHTML=P[1]+Q+P[2];while(P[0]--){K=K.lastChild}if(!n.support.tbody){var M=!N.indexOf("<table")&&N.indexOf("<tbody")<0?K.firstChild&&K.firstChild.childNodes:P[1]=="<table>"&&N.indexOf("<tbody")<0?K.childNodes:[];for(var L=M.length-1;L>=0;--L){if(n.nodeName(M[L],"tbody")&&!M[L].childNodes.length){M[L].parentNode.removeChild(M[L])}}}if(!n.support.leadingWhitespace&&/^\s/.test(Q)){K.insertBefore(J.createTextNode(Q.match(/^\s*/)[0]),K.firstChild)}Q=n.makeArray(K.childNodes)}if(Q.nodeType){F.push(Q)}else{F=n.merge(F,Q)}});if(H){for(var I=0;F[I];I++){if(n.nodeName(F[I],"script")&&(!F[I].type||F[I].type.toLowerCase()==="text/javascript")){D.push(F[I].parentNode?F[I].parentNode.removeChild(F[I]):F[I])}else{if(F[I].nodeType===1){F.splice.apply(F,[I+1,0].concat(n.makeArray(F[I].getElementsByTagName("script"))))}H.appendChild(F[I])}}return D}return F},attr:function(I,F,J){if(!I||I.nodeType==3||I.nodeType==8){return g}var G=!n.isXMLDoc(I),K=J!==g;F=G&&n.props[F]||F;if(I.tagName){var E=/href|src|style/.test(F);if(F=="selected"&&I.parentNode){I.parentNode.selectedIndex}if(F in I&&G&&!E){if(K){if(F=="type"&&n.nodeName(I,"input")&&I.parentNode){throw"type property can't be changed"}I[F]=J}if(n.nodeName(I,"form")&&I.getAttributeNode(F)){return I.getAttributeNode(F).nodeValue}if(F=="tabIndex"){var H=I.getAttributeNode("tabIndex");return H&&H.specified?H.value:I.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i)?0:g}return I[F]}if(!n.support.style&&G&&F=="style"){return n.attr(I.style,"cssText",J)}if(K){I.setAttribute(F,""+J)}var D=!n.support.hrefNormalized&&G&&E?I.getAttribute(F,2):I.getAttribute(F);return D===null?g:D}if(!n.support.opacity&&F=="opacity"){if(K){I.zoom=1;I.filter=(I.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(J)+""=="NaN"?"":"alpha(opacity="+J*100+")")}return I.filter&&I.filter.indexOf("opacity=")>=0?(parseFloat(I.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}F=F.replace(/-([a-z])/ig,function(L,M){return M.toUpperCase()});if(K){I[F]=J}return I[F]},trim:function(D){return(D||"").replace(/^\s+|\s+$/g,"")},makeArray:function(F){var D=[];if(F!=null){var E=F.length;if(E==null||typeof F==="string"||n.isFunction(F)||F.setInterval){D[0]=F}else{while(E){D[--E]=F[E]}}}return D},inArray:function(F,G){for(var D=0,E=G.length;D<E;D++){if(G[D]===F){return D}}return -1},merge:function(G,D){var E=0,F,H=G.length;if(!n.support.getAll){while((F=D[E++])!=null){if(F.nodeType!=8){G[H++]=F}}}else{while((F=D[E++])!=null){G[H++]=F}}return G},unique:function(J){var E=[],D={};try{for(var F=0,G=J.length;F<G;F++){var I=n.data(J[F]);if(!D[I]){D[I]=true;E.push(J[F])}}}catch(H){E=J}return E},grep:function(E,I,D){var F=[];for(var G=0,H=E.length;G<H;G++){if(!D!=!I(E[G],G)){F.push(E[G])}}return F},map:function(D,I){var E=[];for(var F=0,G=D.length;F<G;F++){var H=I(D[F],F);if(H!=null){E[E.length]=H}}return E.concat.apply([],E)}});var B=navigator.userAgent.toLowerCase();n.browser={version:(B.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(B),opera:/opera/.test(B),msie:/msie/.test(B)&&!/opera/.test(B),mozilla:/mozilla/.test(B)&&!/(compatible|webkit)/.test(B)};n.each({parent:function(D){return D.parentNode},parents:function(D){return n.dir(D,"parentNode")},next:function(D){return n.nth(D,2,"nextSibling")},prev:function(D){return n.nth(D,2,"previousSibling")},nextAll:function(D){return n.dir(D,"nextSibling")},prevAll:function(D){return n.dir(D,"previousSibling")},siblings:function(D){return n.sibling(D.parentNode.firstChild,D)},children:function(D){return n.sibling(D.firstChild)},contents:function(D){return n.nodeName(D,"iframe")?D.contentDocument||D.contentWindow.document:n.makeArray(D.childNodes)}},function(D,E){n.fn[D]=function(F){var G=n.map(this,E);if(F&&typeof F=="string"){G=n.multiFilter(F,G)}return this.pushStack(n.unique(G),D,F)}});n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(D,E){n.fn[D]=function(){var F=arguments;return this.each(function(){for(var G=0,H=F.length;G<H;G++){n(F[G])[E](this)}})}});n.each({removeAttr:function(D){n.attr(this,D,"");if(this.nodeType==1){this.removeAttribute(D)}},addClass:function(D){n.className.add(this,D)},removeClass:function(D){n.className.remove(this,D)},toggleClass:function(E,D){if(typeof D!=="boolean"){D=!n.className.has(this,E)}n.className[D?"add":"remove"](this,E)},remove:function(D){if(!D||n.filter(D,[this]).length){n("*",this).add([this]).each(function(){n.event.remove(this);n.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){n(">*",this).remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(D,E){n.fn[D]=function(){return this.each(E,arguments)}});function j(D,E){return D[0]&&parseInt(n.curCSS(D[0],E,true),10)||0}var h="jQuery"+e(),u=0,z={};n.extend({cache:{},data:function(E,D,F){E=E==l?z:E;var G=E[h];if(!G){G=E[h]=++u}if(D&&!n.cache[G]){n.cache[G]={}}if(F!==g){n.cache[G][D]=F}return D?n.cache[G][D]:G},removeData:function(E,D){E=E==l?z:E;var G=E[h];if(D){if(n.cache[G]){delete n.cache[G][D];D="";for(D in n.cache[G]){break}if(!D){n.removeData(E)}}}else{try{delete E[h]}catch(F){if(E.removeAttribute){E.removeAttribute(h)}}delete n.cache[G]}},queue:function(E,D,G){if(E){D=(D||"fx")+"queue";var F=n.data(E,D);if(!F||n.isArray(G)){F=n.data(E,D,n.makeArray(G))}else{if(G){F.push(G)}}}return F},dequeue:function(G,F){var D=n.queue(G,F),E=D.shift();if(!F||F==="fx"){E=D[0]}if(E!==g){E.call(G)}}});n.fn.extend({data:function(D,F){var G=D.split(".");G[1]=G[1]?"."+G[1]:"";if(F===g){var E=this.triggerHandler("getData"+G[1]+"!",[G[0]]);if(E===g&&this.length){E=n.data(this[0],D)}return E===g&&G[1]?this.data(G[0]):E}else{return this.trigger("setData"+G[1]+"!",[G[0],F]).each(function(){n.data(this,D,F)})}},removeData:function(D){return this.each(function(){n.removeData(this,D)})},queue:function(D,E){if(typeof D!=="string"){E=D;D="fx"}if(E===g){return n.queue(this[0],D)}return this.each(function(){var F=n.queue(this,D,E);if(D=="fx"&&F.length==1){F[0].call(this)}})},dequeue:function(D){return this.each(function(){n.dequeue(this,D)})}});
4847+/*
4848+ * Sizzle CSS Selector Engine - v0.9.1
4849+ * Copyright 2009, The Dojo Foundation
4850+ * Released under the MIT, BSD, and GPL Licenses.
4851+ * More information: http://sizzlejs.com/
4852+ */
4853+(function(){var N=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,I=0,F=Object.prototype.toString;var E=function(ae,S,aa,V){aa=aa||[];S=S||document;if(S.nodeType!==1&&S.nodeType!==9){return[]}if(!ae||typeof ae!=="string"){return aa}var ab=[],ac,Y,ah,ag,Z,R,Q=true;N.lastIndex=0;while((ac=N.exec(ae))!==null){ab.push(ac[1]);if(ac[2]){R=RegExp.rightContext;break}}if(ab.length>1&&G.match.POS.exec(ae)){if(ab.length===2&&G.relative[ab[0]]){var U="",X;while((X=G.match.POS.exec(ae))){U+=X[0];ae=ae.replace(G.match.POS,"")}Y=E.filter(U,E(/\s$/.test(ae)?ae+"*":ae,S))}else{Y=G.relative[ab[0]]?[S]:E(ab.shift(),S);while(ab.length){var P=[];ae=ab.shift();if(G.relative[ae]){ae+=ab.shift()}for(var af=0,ad=Y.length;af<ad;af++){E(ae,Y[af],P)}Y=P}}}else{var ai=V?{expr:ab.pop(),set:D(V)}:E.find(ab.pop(),ab.length===1&&S.parentNode?S.parentNode:S);Y=E.filter(ai.expr,ai.set);if(ab.length>0){ah=D(Y)}else{Q=false}while(ab.length){var T=ab.pop(),W=T;if(!G.relative[T]){T=""}else{W=ab.pop()}if(W==null){W=S}G.relative[T](ah,W,M(S))}}if(!ah){ah=Y}if(!ah){throw"Syntax error, unrecognized expression: "+(T||ae)}if(F.call(ah)==="[object Array]"){if(!Q){aa.push.apply(aa,ah)}else{if(S.nodeType===1){for(var af=0;ah[af]!=null;af++){if(ah[af]&&(ah[af]===true||ah[af].nodeType===1&&H(S,ah[af]))){aa.push(Y[af])}}}else{for(var af=0;ah[af]!=null;af++){if(ah[af]&&ah[af].nodeType===1){aa.push(Y[af])}}}}}else{D(ah,aa)}if(R){E(R,S,aa,V)}return aa};E.matches=function(P,Q){return E(P,null,null,Q)};E.find=function(V,S){var W,Q;if(!V){return[]}for(var R=0,P=G.order.length;R<P;R++){var T=G.order[R],Q;if((Q=G.match[T].exec(V))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){Q[1]=(Q[1]||"").replace(/\\/g,"");W=G.find[T](Q,S);if(W!=null){V=V.replace(G.match[T],"");break}}}}if(!W){W=S.getElementsByTagName("*")}return{set:W,expr:V}};E.filter=function(S,ac,ad,T){var Q=S,Y=[],ah=ac,V,ab;while(S&&ac.length){for(var U in G.filter){if((V=G.match[U].exec(S))!=null){var Z=G.filter[U],R=null,X=0,aa,ag;ab=false;if(ah==Y){Y=[]}if(G.preFilter[U]){V=G.preFilter[U](V,ah,ad,Y,T);if(!V){ab=aa=true}else{if(V===true){continue}else{if(V[0]===true){R=[];var W=null,af;for(var ae=0;(af=ah[ae])!==g;ae++){if(af&&W!==af){R.push(af);W=af}}}}}}if(V){for(var ae=0;(ag=ah[ae])!==g;ae++){if(ag){if(R&&ag!=R[X]){X++}aa=Z(ag,V,X,R);var P=T^!!aa;if(ad&&aa!=null){if(P){ab=true}else{ah[ae]=false}}else{if(P){Y.push(ag);ab=true}}}}}if(aa!==g){if(!ad){ah=Y}S=S.replace(G.match[U],"");if(!ab){return[]}break}}}S=S.replace(/\s*,\s*/,"");if(S==Q){if(ab==null){throw"Syntax error, unrecognized expression: "+S}else{break}}Q=S}return ah};var G=E.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(P){return P.getAttribute("href")}},relative:{"+":function(T,Q){for(var R=0,P=T.length;R<P;R++){var S=T[R];if(S){var U=S.previousSibling;while(U&&U.nodeType!==1){U=U.previousSibling}T[R]=typeof Q==="string"?U||false:U===Q}}if(typeof Q==="string"){E.filter(Q,T,true)}},">":function(U,Q,V){if(typeof Q==="string"&&!/\W/.test(Q)){Q=V?Q:Q.toUpperCase();for(var R=0,P=U.length;R<P;R++){var T=U[R];if(T){var S=T.parentNode;U[R]=S.nodeName===Q?S:false}}}else{for(var R=0,P=U.length;R<P;R++){var T=U[R];if(T){U[R]=typeof Q==="string"?T.parentNode:T.parentNode===Q}}if(typeof Q==="string"){E.filter(Q,U,true)}}},"":function(S,Q,U){var R="done"+(I++),P=O;if(!Q.match(/\W/)){var T=Q=U?Q:Q.toUpperCase();P=L}P("parentNode",Q,R,S,T,U)},"~":function(S,Q,U){var R="done"+(I++),P=O;if(typeof Q==="string"&&!Q.match(/\W/)){var T=Q=U?Q:Q.toUpperCase();P=L}P("previousSibling",Q,R,S,T,U)}},find:{ID:function(Q,R){if(R.getElementById){var P=R.getElementById(Q[1]);return P?[P]:[]}},NAME:function(P,Q){return Q.getElementsByName?Q.getElementsByName(P[1]):null},TAG:function(P,Q){return Q.getElementsByTagName(P[1])}},preFilter:{CLASS:function(S,Q,R,P,U){S=" "+S[1].replace(/\\/g,"")+" ";for(var T=0;Q[T];T++){if(U^(" "+Q[T].className+" ").indexOf(S)>=0){if(!R){P.push(Q[T])}}else{if(R){Q[T]=false}}}return false},ID:function(P){return P[1].replace(/\\/g,"")},TAG:function(Q,P){for(var R=0;!P[R];R++){}return M(P[R])?Q[1]:Q[1].toUpperCase()},CHILD:function(P){if(P[1]=="nth"){var Q=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(P[2]=="even"&&"2n"||P[2]=="odd"&&"2n+1"||!/\D/.test(P[2])&&"0n+"+P[2]||P[2]);P[2]=(Q[1]+(Q[2]||1))-0;P[3]=Q[3]-0}P[0]="done"+(I++);return P},ATTR:function(Q){var P=Q[1];if(G.attrMap[P]){Q[1]=G.attrMap[P]}if(Q[2]==="~="){Q[4]=" "+Q[4]+" "}return Q},PSEUDO:function(T,Q,R,P,U){if(T[1]==="not"){if(T[3].match(N).length>1){T[3]=E(T[3],null,null,Q)}else{var S=E.filter(T[3],Q,R,true^U);if(!R){P.push.apply(P,S)}return false}}else{if(G.match.POS.test(T[0])){return true}}return T},POS:function(P){P.unshift(true);return P}},filters:{enabled:function(P){return P.disabled===false&&P.type!=="hidden"},disabled:function(P){return P.disabled===true},checked:function(P){return P.checked===true},selected:function(P){P.parentNode.selectedIndex;return P.selected===true},parent:function(P){return !!P.firstChild},empty:function(P){return !P.firstChild},has:function(R,Q,P){return !!E(P[3],R).length},header:function(P){return/h\d/i.test(P.nodeName)},text:function(P){return"text"===P.type},radio:function(P){return"radio"===P.type},checkbox:function(P){return"checkbox"===P.type},file:function(P){return"file"===P.type},password:function(P){return"password"===P.type},submit:function(P){return"submit"===P.type},image:function(P){return"image"===P.type},reset:function(P){return"reset"===P.type},button:function(P){return"button"===P.type||P.nodeName.toUpperCase()==="BUTTON"},input:function(P){return/input|select|textarea|button/i.test(P.nodeName)}},setFilters:{first:function(Q,P){return P===0},last:function(R,Q,P,S){return Q===S.length-1},even:function(Q,P){return P%2===0},odd:function(Q,P){return P%2===1},lt:function(R,Q,P){return Q<P[3]-0},gt:function(R,Q,P){return Q>P[3]-0},nth:function(R,Q,P){return P[3]-0==Q},eq:function(R,Q,P){return P[3]-0==Q}},filter:{CHILD:function(P,S){var V=S[1],W=P.parentNode;var U="child"+W.childNodes.length;if(W&&(!W[U]||!P.nodeIndex)){var T=1;for(var Q=W.firstChild;Q;Q=Q.nextSibling){if(Q.nodeType==1){Q.nodeIndex=T++}}W[U]=T-1}if(V=="first"){return P.nodeIndex==1}else{if(V=="last"){return P.nodeIndex==W[U]}else{if(V=="only"){return W[U]==1}else{if(V=="nth"){var Y=false,R=S[2],X=S[3];if(R==1&&X==0){return true}if(R==0){if(P.nodeIndex==X){Y=true}}else{if((P.nodeIndex-X)%R==0&&(P.nodeIndex-X)/R>=0){Y=true}}return Y}}}}},PSEUDO:function(V,R,S,W){var Q=R[1],T=G.filters[Q];if(T){return T(V,S,R,W)}else{if(Q==="contains"){return(V.textContent||V.innerText||"").indexOf(R[3])>=0}else{if(Q==="not"){var U=R[3];for(var S=0,P=U.length;S<P;S++){if(U[S]===V){return false}}return true}}}},ID:function(Q,P){return Q.nodeType===1&&Q.getAttribute("id")===P},TAG:function(Q,P){return(P==="*"&&Q.nodeType===1)||Q.nodeName===P},CLASS:function(Q,P){return P.test(Q.className)},ATTR:function(T,R){var P=G.attrHandle[R[1]]?G.attrHandle[R[1]](T):T[R[1]]||T.getAttribute(R[1]),U=P+"",S=R[2],Q=R[4];return P==null?false:S==="="?U===Q:S==="*="?U.indexOf(Q)>=0:S==="~="?(" "+U+" ").indexOf(Q)>=0:!R[4]?P:S==="!="?U!=Q:S==="^="?U.indexOf(Q)===0:S==="$="?U.substr(U.length-Q.length)===Q:S==="|="?U===Q||U.substr(0,Q.length+1)===Q+"-":false},POS:function(T,Q,R,U){var P=Q[2],S=G.setFilters[P];if(S){return S(T,R,Q,U)}}}};for(var K in G.match){G.match[K]=RegExp(G.match[K].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var D=function(Q,P){Q=Array.prototype.slice.call(Q);if(P){P.push.apply(P,Q);return P}return Q};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(J){D=function(T,S){var Q=S||[];if(F.call(T)==="[object Array]"){Array.prototype.push.apply(Q,T)}else{if(typeof T.length==="number"){for(var R=0,P=T.length;R<P;R++){Q.push(T[R])}}else{for(var R=0;T[R];R++){Q.push(T[R])}}}return Q}}(function(){var Q=document.createElement("form"),R="script"+(new Date).getTime();Q.innerHTML="<input name='"+R+"'/>";var P=document.documentElement;P.insertBefore(Q,P.firstChild);if(!!document.getElementById(R)){G.find.ID=function(T,U){if(U.getElementById){var S=U.getElementById(T[1]);return S?S.id===T[1]||S.getAttributeNode&&S.getAttributeNode("id").nodeValue===T[1]?[S]:g:[]}};G.filter.ID=function(U,S){var T=U.getAttributeNode&&U.getAttributeNode("id");return U.nodeType===1&&T&&T.nodeValue===S}}P.removeChild(Q)})();(function(){var P=document.createElement("div");P.appendChild(document.createComment(""));if(P.getElementsByTagName("*").length>0){G.find.TAG=function(Q,U){var T=U.getElementsByTagName(Q[1]);if(Q[1]==="*"){var S=[];for(var R=0;T[R];R++){if(T[R].nodeType===1){S.push(T[R])}}T=S}return T}}P.innerHTML="<a href='#'></a>";if(P.firstChild.getAttribute("href")!=="#"){G.attrHandle.href=function(Q){return Q.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var P=E;E=function(T,S,Q,R){S=S||document;if(!R&&S.nodeType===9){try{return D(S.querySelectorAll(T),Q)}catch(U){}}return P(T,S,Q,R)};E.find=P.find;E.filter=P.filter;E.selectors=P.selectors;E.matches=P.matches})()}if(document.documentElement.getElementsByClassName){G.order.splice(1,0,"CLASS");G.find.CLASS=function(P,Q){return Q.getElementsByClassName(P[1])}}function L(Q,W,V,Z,X,Y){for(var T=0,R=Z.length;T<R;T++){var P=Z[T];if(P){P=P[Q];var U=false;while(P&&P.nodeType){var S=P[V];if(S){U=Z[S];break}if(P.nodeType===1&&!Y){P[V]=T}if(P.nodeName===W){U=P;break}P=P[Q]}Z[T]=U}}}function O(Q,V,U,Y,W,X){for(var S=0,R=Y.length;S<R;S++){var P=Y[S];if(P){P=P[Q];var T=false;while(P&&P.nodeType){if(P[U]){T=Y[P[U]];break}if(P.nodeType===1){if(!X){P[U]=S}if(typeof V!=="string"){if(P===V){T=true;break}}else{if(E.filter(V,[P]).length>0){T=P;break}}}P=P[Q]}Y[S]=T}}}var H=document.compareDocumentPosition?function(Q,P){return Q.compareDocumentPosition(P)&16}:function(Q,P){return Q!==P&&(Q.contains?Q.contains(P):true)};var M=function(P){return P.documentElement&&!P.body||P.tagName&&P.ownerDocument&&!P.ownerDocument.body};n.find=E;n.filter=E.filter;n.expr=E.selectors;n.expr[":"]=n.expr.filters;E.selectors.filters.hidden=function(P){return"hidden"===P.type||n.css(P,"display")==="none"||n.css(P,"visibility")==="hidden"};E.selectors.filters.visible=function(P){return"hidden"!==P.type&&n.css(P,"display")!=="none"&&n.css(P,"visibility")!=="hidden"};E.selectors.filters.animated=function(P){return n.grep(n.timers,function(Q){return P===Q.elem}).length};n.multiFilter=function(R,P,Q){if(Q){R=":not("+R+")"}return E.matches(R,P)};n.dir=function(R,Q){var P=[],S=R[Q];while(S&&S!=document){if(S.nodeType==1){P.push(S)}S=S[Q]}return P};n.nth=function(T,P,R,S){P=P||1;var Q=0;for(;T;T=T[R]){if(T.nodeType==1&&++Q==P){break}}return T};n.sibling=function(R,Q){var P=[];for(;R;R=R.nextSibling){if(R.nodeType==1&&R!=Q){P.push(R)}}return P};return;l.Sizzle=E})();n.event={add:function(H,E,G,J){if(H.nodeType==3||H.nodeType==8){return}if(H.setInterval&&H!=l){H=l}if(!G.guid){G.guid=this.guid++}if(J!==g){var F=G;G=this.proxy(F);G.data=J}var D=n.data(H,"events")||n.data(H,"events",{}),I=n.data(H,"handle")||n.data(H,"handle",function(){return typeof n!=="undefined"&&!n.event.triggered?n.event.handle.apply(arguments.callee.elem,arguments):g});I.elem=H;n.each(E.split(/\s+/),function(L,M){var N=M.split(".");M=N.shift();G.type=N.slice().sort().join(".");var K=D[M];if(n.event.specialAll[M]){n.event.specialAll[M].setup.call(H,J,N)}if(!K){K=D[M]={};if(!n.event.special[M]||n.event.special[M].setup.call(H,J,N)===false){if(H.addEventListener){H.addEventListener(M,I,false)}else{if(H.attachEvent){H.attachEvent("on"+M,I)}}}}K[G.guid]=G;n.event.global[M]=true});H=null},guid:1,global:{},remove:function(J,G,I){if(J.nodeType==3||J.nodeType==8){return}var F=n.data(J,"events"),E,D;if(F){if(G===g||(typeof G==="string"&&G.charAt(0)==".")){for(var H in F){this.remove(J,H+(G||""))}}else{if(G.type){I=G.handler;G=G.type}n.each(G.split(/\s+/),function(L,N){var P=N.split(".");N=P.shift();var M=RegExp("(^|\\.)"+P.slice().sort().join(".*\\.")+"(\\.|$)");if(F[N]){if(I){delete F[N][I.guid]}else{for(var O in F[N]){if(M.test(F[N][O].type)){delete F[N][O]}}}if(n.event.specialAll[N]){n.event.specialAll[N].teardown.call(J,P)}for(E in F[N]){break}if(!E){if(!n.event.special[N]||n.event.special[N].teardown.call(J,P)===false){if(J.removeEventListener){J.removeEventListener(N,n.data(J,"handle"),false)}else{if(J.detachEvent){J.detachEvent("on"+N,n.data(J,"handle"))}}}E=null;delete F[N]}}})}for(E in F){break}if(!E){var K=n.data(J,"handle");if(K){K.elem=null}n.removeData(J,"events");n.removeData(J,"handle")}}},trigger:function(H,J,G,D){var F=H.type||H;if(!D){H=typeof H==="object"?H[h]?H:n.extend(n.Event(F),H):n.Event(F);if(F.indexOf("!")>=0){H.type=F=F.slice(0,-1);H.exclusive=true}if(!G){H.stopPropagation();if(this.global[F]){n.each(n.cache,function(){if(this.events&&this.events[F]){n.event.trigger(H,J,this.handle.elem)}})}}if(!G||G.nodeType==3||G.nodeType==8){return g}H.result=g;H.target=G;J=n.makeArray(J);J.unshift(H)}H.currentTarget=G;var I=n.data(G,"handle");if(I){I.apply(G,J)}if((!G[F]||(n.nodeName(G,"a")&&F=="click"))&&G["on"+F]&&G["on"+F].apply(G,J)===false){H.result=false}if(!D&&G[F]&&!H.isDefaultPrevented()&&!(n.nodeName(G,"a")&&F=="click")){this.triggered=true;try{G[F]()}catch(K){}}this.triggered=false;if(!H.isPropagationStopped()){var E=G.parentNode||G.ownerDocument;if(E){n.event.trigger(H,J,E,true)}}},handle:function(J){var I,D;J=arguments[0]=n.event.fix(J||l.event);var K=J.type.split(".");J.type=K.shift();I=!K.length&&!J.exclusive;var H=RegExp("(^|\\.)"+K.slice().sort().join(".*\\.")+"(\\.|$)");D=(n.data(this,"events")||{})[J.type];for(var F in D){var G=D[F];if(I||H.test(G.type)){J.handler=G;J.data=G.data;var E=G.apply(this,arguments);if(E!==g){J.result=E;if(E===false){J.preventDefault();J.stopPropagation()}}if(J.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(G){if(G[h]){return G}var E=G;G=n.Event(E);for(var F=this.props.length,I;F;){I=this.props[--F];G[I]=E[I]}if(!G.target){G.target=G.srcElement||document}if(G.target.nodeType==3){G.target=G.target.parentNode}if(!G.relatedTarget&&G.fromElement){G.relatedTarget=G.fromElement==G.target?G.toElement:G.fromElement}if(G.pageX==null&&G.clientX!=null){var H=document.documentElement,D=document.body;G.pageX=G.clientX+(H&&H.scrollLeft||D&&D.scrollLeft||0)-(H.clientLeft||0);G.pageY=G.clientY+(H&&H.scrollTop||D&&D.scrollTop||0)-(H.clientTop||0)}if(!G.which&&((G.charCode||G.charCode===0)?G.charCode:G.keyCode)){G.which=G.charCode||G.keyCode}if(!G.metaKey&&G.ctrlKey){G.metaKey=G.ctrlKey}if(!G.which&&G.button){G.which=(G.button&1?1:(G.button&2?3:(G.button&4?2:0)))}return G},proxy:function(E,D){D=D||function(){return E.apply(this,arguments)};D.guid=E.guid=E.guid||D.guid||this.guid++;return D},special:{ready:{setup:A,teardown:function(){}}},specialAll:{live:{setup:function(D,E){n.event.add(this,E[0],c)},teardown:function(F){if(F.length){var D=0,E=RegExp("(^|\\.)"+F[0]+"(\\.|$)");n.each((n.data(this,"events").live||{}),function(){if(E.test(this.type)){D++}});if(D<1){n.event.remove(this,F[0],c)}}}}}};n.Event=function(D){if(!this.preventDefault){return new n.Event(D)}if(D&&D.type){this.originalEvent=D;this.type=D.type;this.timeStamp=D.timeStamp}else{this.type=D}if(!this.timeStamp){this.timeStamp=e()}this[h]=true};function k(){return false}function t(){return true}n.Event.prototype={preventDefault:function(){this.isDefaultPrevented=t;var D=this.originalEvent;if(!D){return}if(D.preventDefault){D.preventDefault()}D.returnValue=false},stopPropagation:function(){this.isPropagationStopped=t;var D=this.originalEvent;if(!D){return}if(D.stopPropagation){D.stopPropagation()}D.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=t;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(E){var D=E.relatedTarget;while(D&&D!=this){try{D=D.parentNode}catch(F){D=this}}if(D!=this){E.type=E.data;n.event.handle.apply(this,arguments)}};n.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(E,D){n.event.special[D]={setup:function(){n.event.add(this,E,a,D)},teardown:function(){n.event.remove(this,E,a)}}});n.fn.extend({bind:function(E,F,D){return E=="unload"?this.one(E,F,D):this.each(function(){n.event.add(this,E,D||F,D&&F)})},one:function(F,G,E){var D=n.event.proxy(E||G,function(H){n(this).unbind(H,D);return(E||G).apply(this,arguments)});return this.each(function(){n.event.add(this,F,D,E&&G)})},unbind:function(E,D){return this.each(function(){n.event.remove(this,E,D)})},trigger:function(D,E){return this.each(function(){n.event.trigger(D,E,this)})},triggerHandler:function(D,F){if(this[0]){var E=n.Event(D);E.preventDefault();E.stopPropagation();n.event.trigger(E,F,this[0]);return E.result}},toggle:function(F){var D=arguments,E=1;while(E<D.length){n.event.proxy(F,D[E++])}return this.click(n.event.proxy(F,function(G){this.lastToggle=(this.lastToggle||0)%E;G.preventDefault();return D[this.lastToggle++].apply(this,arguments)||false}))},hover:function(D,E){return this.mouseenter(D).mouseleave(E)},ready:function(D){A();if(n.isReady){D.call(document,n)}else{n.readyList.push(D)}return this},live:function(F,E){var D=n.event.proxy(E);D.guid+=this.selector+F;n(document).bind(i(F,this.selector),this.selector,D);return this},die:function(E,D){n(document).unbind(i(E,this.selector),D?{guid:D.guid+this.selector+E}:null);return this}});function c(G){var D=RegExp("(^|\\.)"+G.type+"(\\.|$)"),F=true,E=[];n.each(n.data(this,"events").live||[],function(H,I){if(D.test(I.type)){var J=n(G.target).closest(I.data)[0];if(J){E.push({elem:J,fn:I})}}});n.each(E,function(){if(!G.isImmediatePropagationStopped()&&this.fn.call(this.elem,G,this.fn.data)===false){F=false}});return F}function i(E,D){return["live",E,D.replace(/\./g,"`").replace(/ /g,"|")].join(".")}n.extend({isReady:false,readyList:[],ready:function(){if(!n.isReady){n.isReady=true;if(n.readyList){n.each(n.readyList,function(){this.call(document,n)});n.readyList=null}n(document).triggerHandler("ready")}}});var w=false;function A(){if(w){return}w=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);n.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);n.ready()}});if(document.documentElement.doScroll&&!l.frameElement){(function(){if(n.isReady){return}try{document.documentElement.doScroll("left")}catch(D){setTimeout(arguments.callee,0);return}n.ready()})()}}}n.event.add(l,"load",n.ready)}n.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(E,D){n.fn[D]=function(F){return F?this.bind(D,F):this.trigger(D)}});n(l).bind("unload",function(){for(var D in n.cache){if(D!=1&&n.cache[D].handle){n.event.remove(n.cache[D].handle.elem)}}});(function(){n.support={};var E=document.documentElement,F=document.createElement("script"),J=document.createElement("div"),I="script"+(new Date).getTime();J.style.display="none";J.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var G=J.getElementsByTagName("*"),D=J.getElementsByTagName("a")[0];if(!G||!G.length||!D){return}n.support={leadingWhitespace:J.firstChild.nodeType==3,tbody:!J.getElementsByTagName("tbody").length,objectAll:!!J.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!J.getElementsByTagName("link").length,style:/red/.test(D.getAttribute("style")),hrefNormalized:D.getAttribute("href")==="/a",opacity:D.style.opacity==="0.5",cssFloat:!!D.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};F.type="text/javascript";try{F.appendChild(document.createTextNode("window."+I+"=1;"))}catch(H){}E.insertBefore(F,E.firstChild);if(l[I]){n.support.scriptEval=true;delete l[I]}E.removeChild(F);if(J.attachEvent&&J.fireEvent){J.attachEvent("onclick",function(){n.support.noCloneEvent=false;J.detachEvent("onclick",arguments.callee)});J.cloneNode(true).fireEvent("onclick")}n(function(){var K=document.createElement("div");K.style.width="1px";K.style.paddingLeft="1px";document.body.appendChild(K);n.boxModel=n.support.boxModel=K.offsetWidth===2;document.body.removeChild(K)})})();var v=n.support.cssFloat?"cssFloat":"styleFloat";n.props={"for":"htmlFor","class":"className","float":v,cssFloat:v,styleFloat:v,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};n.fn.extend({_load:n.fn.load,load:function(F,I,J){if(typeof F!=="string"){return this._load(F)}var H=F.indexOf(" ");if(H>=0){var D=F.slice(H,F.length);F=F.slice(0,H)}var G="GET";if(I){if(n.isFunction(I)){J=I;I=null}else{if(typeof I==="object"){I=n.param(I);G="POST"}}}var E=this;n.ajax({url:F,type:G,dataType:"html",data:I,complete:function(L,K){if(K=="success"||K=="notmodified"){E.html(D?n("<div/>").append(L.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(D):L.responseText)}if(J){E.each(J,[L.responseText,K,L])}}});return this},serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?n.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(D,E){var F=n(this).val();return F==null?null:n.isArray(F)?n.map(F,function(H,G){return{name:E.name,value:H}}):{name:E.name,value:F}}).get()}});n.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(D,E){n.fn[E]=function(F){return this.bind(E,F)}});var q=e();n.extend({get:function(D,F,G,E){if(n.isFunction(F)){G=F;F=null}return n.ajax({type:"GET",url:D,data:F,success:G,dataType:E})},getScript:function(D,E){return n.get(D,null,E,"script")},getJSON:function(D,E,F){return n.get(D,E,F,"json")},post:function(D,F,G,E){if(n.isFunction(F)){G=F;F={}}return n.ajax({type:"POST",url:D,data:F,success:G,dataType:E})},ajaxSetup:function(D){n.extend(n.ajaxSettings,D)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(L){L=n.extend(true,L,n.extend(true,{},n.ajaxSettings,L));var V,E=/=\?(&|$)/g,Q,U,F=L.type.toUpperCase();if(L.data&&L.processData&&typeof L.data!=="string"){L.data=n.param(L.data)}if(L.dataType=="jsonp"){if(F=="GET"){if(!L.url.match(E)){L.url+=(L.url.match(/\?/)?"&":"?")+(L.jsonp||"callback")+"=?"}}else{if(!L.data||!L.data.match(E)){L.data=(L.data?L.data+"&":"")+(L.jsonp||"callback")+"=?"}}L.dataType="json"}if(L.dataType=="json"&&(L.data&&L.data.match(E)||L.url.match(E))){V="jsonp"+q++;if(L.data){L.data=(L.data+"").replace(E,"="+V+"$1")}L.url=L.url.replace(E,"="+V+"$1");L.dataType="script";l[V]=function(W){U=W;H();K();l[V]=g;try{delete l[V]}catch(X){}if(G){G.removeChild(S)}}}if(L.dataType=="script"&&L.cache==null){L.cache=false}if(L.cache===false&&F=="GET"){var D=e();var T=L.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+D+"$2");L.url=T+((T==L.url)?(L.url.match(/\?/)?"&":"?")+"_="+D:"")}if(L.data&&F=="GET"){L.url+=(L.url.match(/\?/)?"&":"?")+L.data;L.data=null}if(L.global&&!n.active++){n.event.trigger("ajaxStart")}var P=/^(\w+:)?\/\/([^\/?#]+)/.exec(L.url);if(L.dataType=="script"&&F=="GET"&&P&&(P[1]&&P[1]!=location.protocol||P[2]!=location.host)){var G=document.getElementsByTagName("head")[0];var S=document.createElement("script");S.src=L.url;if(L.scriptCharset){S.charset=L.scriptCharset}if(!V){var N=false;S.onload=S.onreadystatechange=function(){if(!N&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){N=true;H();K();G.removeChild(S)}}}G.appendChild(S);return g}var J=false;var I=L.xhr();if(L.username){I.open(F,L.url,L.async,L.username,L.password)}else{I.open(F,L.url,L.async)}try{if(L.data){I.setRequestHeader("Content-Type",L.contentType)}if(L.ifModified){I.setRequestHeader("If-Modified-Since",n.lastModified[L.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}I.setRequestHeader("X-Requested-With","XMLHttpRequest");I.setRequestHeader("Accept",L.dataType&&L.accepts[L.dataType]?L.accepts[L.dataType]+", */*":L.accepts._default)}catch(R){}if(L.beforeSend&&L.beforeSend(I,L)===false){if(L.global&&!--n.active){n.event.trigger("ajaxStop")}I.abort();return false}if(L.global){n.event.trigger("ajaxSend",[I,L])}var M=function(W){if(I.readyState==0){if(O){clearInterval(O);O=null;if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}}else{if(!J&&I&&(I.readyState==4||W=="timeout")){J=true;if(O){clearInterval(O);O=null}Q=W=="timeout"?"timeout":!n.httpSuccess(I)?"error":L.ifModified&&n.httpNotModified(I,L.url)?"notmodified":"success";if(Q=="success"){try{U=n.httpData(I,L.dataType,L)}catch(Y){Q="parsererror"}}if(Q=="success"){var X;try{X=I.getResponseHeader("Last-Modified")}catch(Y){}if(L.ifModified&&X){n.lastModified[L.url]=X}if(!V){H()}}else{n.handleError(L,I,Q)}K();if(L.async){I=null}}}};if(L.async){var O=setInterval(M,13);if(L.timeout>0){setTimeout(function(){if(I){if(!J){M("timeout")}if(I){I.abort()}}},L.timeout)}}try{I.send(L.data)}catch(R){n.handleError(L,I,null,R)}if(!L.async){M()}function H(){if(L.success){L.success(U,Q)}if(L.global){n.event.trigger("ajaxSuccess",[I,L])}}function K(){if(L.complete){L.complete(I,Q)}if(L.global){n.event.trigger("ajaxComplete",[I,L])}if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}return I},handleError:function(E,G,D,F){if(E.error){E.error(G,D,F)}if(E.global){n.event.trigger("ajaxError",[G,E,F])}},active:0,httpSuccess:function(E){try{return !E.status&&location.protocol=="file:"||(E.status>=200&&E.status<300)||E.status==304||E.status==1223}catch(D){}return false},httpNotModified:function(F,D){try{var G=F.getResponseHeader("Last-Modified");return F.status==304||G==n.lastModified[D]}catch(E){}return false},httpData:function(I,G,F){var E=I.getResponseHeader("content-type"),D=G=="xml"||!G&&E&&E.indexOf("xml")>=0,H=D?I.responseXML:I.responseText;if(D&&H.documentElement.tagName=="parsererror"){throw"parsererror"}if(F&&F.dataFilter){H=F.dataFilter(H,G)}if(typeof H==="string"){if(G=="script"){n.globalEval(H)}if(G=="json"){H=l["eval"]("("+H+")")}}return H},param:function(D){var F=[];function G(H,I){F[F.length]=encodeURIComponent(H)+"="+encodeURIComponent(I)}if(n.isArray(D)||D.jquery){n.each(D,function(){G(this.name,this.value)})}else{for(var E in D){if(n.isArray(D[E])){n.each(D[E],function(){G(E,this)})}else{G(E,n.isFunction(D[E])?D[E]():D[E])}}}return F.join("&").replace(/%20/g,"+")}});var m={},d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function s(E,D){var F={};n.each(d.concat.apply([],d.slice(0,D)),function(){F[this]=E});return F}n.fn.extend({show:function(I,K){if(I){return this.animate(s("show",3),I,K)}else{for(var G=0,E=this.length;G<E;G++){var D=n.data(this[G],"olddisplay");this[G].style.display=D||"";if(n.css(this[G],"display")==="none"){var F=this[G].tagName,J;if(m[F]){J=m[F]}else{var H=n("<"+F+" />").appendTo("body");J=H.css("display");if(J==="none"){J="block"}H.remove();m[F]=J}this[G].style.display=n.data(this[G],"olddisplay",J)}}return this}},hide:function(G,H){if(G){return this.animate(s("hide",3),G,H)}else{for(var F=0,E=this.length;F<E;F++){var D=n.data(this[F],"olddisplay");if(!D&&D!=="none"){n.data(this[F],"olddisplay",n.css(this[F],"display"))}this[F].style.display="none"}return this}},_toggle:n.fn.toggle,toggle:function(F,E){var D=typeof F==="boolean";return n.isFunction(F)&&n.isFunction(E)?this._toggle.apply(this,arguments):F==null||D?this.each(function(){var G=D?F:n(this).is(":hidden");n(this)[G?"show":"hide"]()}):this.animate(s("toggle",3),F,E)},fadeTo:function(D,F,E){return this.animate({opacity:F},D,E)},animate:function(H,E,G,F){var D=n.speed(E,G,F);return this[D.queue===false?"each":"queue"](function(){var J=n.extend({},D),L,K=this.nodeType==1&&n(this).is(":hidden"),I=this;for(L in H){if(H[L]=="hide"&&K||H[L]=="show"&&!K){return J.complete.call(this)}if((L=="height"||L=="width")&&this.style){J.display=n.css(this,"display");J.overflow=this.style.overflow}}if(J.overflow!=null){this.style.overflow="hidden"}J.curAnim=n.extend({},H);n.each(H,function(N,R){var Q=new n.fx(I,J,N);if(/toggle|show|hide/.test(R)){Q[R=="toggle"?K?"show":"hide":R](H)}else{var P=R.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),S=Q.cur(true)||0;if(P){var M=parseFloat(P[2]),O=P[3]||"px";if(O!="px"){I.style[N]=(M||1)+O;S=((M||1)/Q.cur(true))*S;I.style[N]=S+O}if(P[1]){M=((P[1]=="-="?-1:1)*M)+S}Q.custom(S,M,O)}else{Q.custom(S,R,"")}}});return true})},stop:function(E,D){var F=n.timers;if(E){this.queue([])}this.each(function(){for(var G=F.length-1;G>=0;G--){if(F[G].elem==this){if(D){F[G](true)}F.splice(G,1)}}});if(!D){this.dequeue()}return this}});n.each({slideDown:s("show",1),slideUp:s("hide",1),slideToggle:s("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(D,E){n.fn[D]=function(F,G){return this.animate(E,F,G)}});n.extend({speed:function(F,G,E){var D=typeof F==="object"?F:{complete:E||!E&&G||n.isFunction(F)&&F,duration:F,easing:E&&G||G&&!n.isFunction(G)&&G};D.duration=n.fx.off?0:typeof D.duration==="number"?D.duration:n.fx.speeds[D.duration]||n.fx.speeds._default;D.old=D.complete;D.complete=function(){if(D.queue!==false){n(this).dequeue()}if(n.isFunction(D.old)){D.old.call(this)}};return D},easing:{linear:function(F,G,D,E){return D+E*F},swing:function(F,G,D,E){return((-Math.cos(F*Math.PI)/2)+0.5)*E+D}},timers:[],timerId:null,fx:function(E,D,F){this.options=D;this.elem=E;this.prop=F;if(!D.orig){D.orig={}}}});n.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(n.fx.step[this.prop]||n.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(E){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var D=parseFloat(n.css(this.elem,this.prop,E));return D&&D>-10000?D:parseFloat(n.curCSS(this.elem,this.prop))||0},custom:function(H,G,F){this.startTime=e();this.start=H;this.end=G;this.unit=F||this.unit||"px";this.now=this.start;this.pos=this.state=0;var D=this;function E(I){return D.step(I)}E.elem=this.elem;n.timers.push(E);if(E()&&n.timerId==null){n.timerId=setInterval(function(){var J=n.timers;for(var I=0;I<J.length;I++){if(!J[I]()){J.splice(I--,1)}}if(!J.length){clearInterval(n.timerId);n.timerId=null}},13)}},show:function(){this.options.orig[this.prop]=n.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());n(this.elem).show()},hide:function(){this.options.orig[this.prop]=n.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(G){var F=e();if(G||F>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var D=true;for(var E in this.options.curAnim){if(this.options.curAnim[E]!==true){D=false}}if(D){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(n.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){n(this.elem).hide()}if(this.options.hide||this.options.show){for(var H in this.options.curAnim){n.attr(this.elem.style,H,this.options.orig[H])}}}if(D){this.options.complete.call(this.elem)}return false}else{var I=F-this.startTime;this.state=I/this.options.duration;this.pos=n.easing[this.options.easing||(n.easing.swing?"swing":"linear")](this.state,I,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};n.extend(n.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(D){n.attr(D.elem.style,"opacity",D.now)},_default:function(D){if(D.elem.style&&D.elem.style[D.prop]!=null){D.elem.style[D.prop]=D.now+D.unit}else{D.elem[D.prop]=D.now}}}});if(document.documentElement.getBoundingClientRect){n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}var F=this[0].getBoundingClientRect(),I=this[0].ownerDocument,E=I.body,D=I.documentElement,K=D.clientTop||E.clientTop||0,J=D.clientLeft||E.clientLeft||0,H=F.top+(self.pageYOffset||n.boxModel&&D.scrollTop||E.scrollTop)-K,G=F.left+(self.pageXOffset||n.boxModel&&D.scrollLeft||E.scrollLeft)-J;return{top:H,left:G}}}else{n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}n.offset.initialized||n.offset.initialize();var I=this[0],F=I.offsetParent,E=I,N=I.ownerDocument,L,G=N.documentElement,J=N.body,K=N.defaultView,D=K.getComputedStyle(I,null),M=I.offsetTop,H=I.offsetLeft;while((I=I.parentNode)&&I!==J&&I!==G){L=K.getComputedStyle(I,null);M-=I.scrollTop,H-=I.scrollLeft;if(I===F){M+=I.offsetTop,H+=I.offsetLeft;if(n.offset.doesNotAddBorder&&!(n.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(I.tagName))){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}E=F,F=I.offsetParent}if(n.offset.subtractsBorderForOverflowNotVisible&&L.overflow!=="visible"){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}D=L}if(D.position==="relative"||D.position==="static"){M+=J.offsetTop,H+=J.offsetLeft}if(D.position==="fixed"){M+=Math.max(G.scrollTop,J.scrollTop),H+=Math.max(G.scrollLeft,J.scrollLeft)}return{top:M,left:H}}}n.offset={initialize:function(){if(this.initialized){return}var K=document.body,E=document.createElement("div"),G,F,M,H,L,D,I=K.style.marginTop,J='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"cellpadding="0"cellspacing="0"><tr><td></td></tr></table>';L={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(D in L){E.style[D]=L[D]}E.innerHTML=J;K.insertBefore(E,K.firstChild);G=E.firstChild,F=G.firstChild,H=G.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(F.offsetTop!==5);this.doesAddBorderForTableAndCells=(H.offsetTop===5);G.style.overflow="hidden",G.style.position="relative";this.subtractsBorderForOverflowNotVisible=(F.offsetTop===-5);K.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(K.offsetTop===0);K.style.marginTop=I;K.removeChild(E);this.initialized=true},bodyOffset:function(D){n.offset.initialized||n.offset.initialize();var F=D.offsetTop,E=D.offsetLeft;if(n.offset.doesNotIncludeMarginInBodyOffset){F+=parseInt(n.curCSS(D,"marginTop",true),10)||0,E+=parseInt(n.curCSS(D,"marginLeft",true),10)||0}return{top:F,left:E}}};n.fn.extend({position:function(){var H=0,G=0,E;if(this[0]){var F=this.offsetParent(),I=this.offset(),D=/^body|html$/i.test(F[0].tagName)?{top:0,left:0}:F.offset();I.top-=j(this,"marginTop");I.left-=j(this,"marginLeft");D.top+=j(F,"borderTopWidth");D.left+=j(F,"borderLeftWidth");E={top:I.top-D.top,left:I.left-D.left}}return E},offsetParent:function(){var D=this[0].offsetParent||document.body;while(D&&(!/^body|html$/i.test(D.tagName)&&n.css(D,"position")=="static")){D=D.offsetParent}return n(D)}});n.each(["Left","Top"],function(E,D){var F="scroll"+D;n.fn[F]=function(G){if(!this[0]){return null}return G!==g?this.each(function(){this==l||this==document?l.scrollTo(!E?G:n(l).scrollLeft(),E?G:n(l).scrollTop()):this[F]=G}):this[0]==l||this[0]==document?self[E?"pageYOffset":"pageXOffset"]||n.boxModel&&document.documentElement[F]||document.body[F]:this[0][F]}});n.each(["Height","Width"],function(G,E){var D=G?"Left":"Top",F=G?"Right":"Bottom";n.fn["inner"+E]=function(){return this[E.toLowerCase()]()+j(this,"padding"+D)+j(this,"padding"+F)};n.fn["outer"+E]=function(I){return this["inner"+E]()+j(this,"border"+D+"Width")+j(this,"border"+F+"Width")+(I?j(this,"margin"+D)+j(this,"margin"+F):0)};var H=E.toLowerCase();n.fn[H]=function(I){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+E]||document.body["client"+E]:this[0]==document?Math.max(document.documentElement["client"+E],document.body["scroll"+E],document.documentElement["scroll"+E],document.body["offset"+E],document.documentElement["offset"+E]):I===g?(this.length?n.css(this[0],H):null):this.css(H,typeof I==="string"?I:I+"px")}})})();
4854\ No newline at end of file
4855
4856=== added file 'themes/canonical/templates/milestone_list.html'
4857--- themes/canonical/templates/milestone_list.html 1970-01-01 00:00:00 +0000
4858+++ themes/canonical/templates/milestone_list.html 2012-08-29 11:42:51 +0000
4859@@ -0,0 +1,118 @@
4860+<%inherit file="body.html"/>
4861+<%namespace name="util" file="util.html"/>
4862+
4863+<%def name="title()">
4864+Milestones
4865+</%def>
4866+
4867+ <link rel="stylesheet" href="core.css" type="text/css" />
4868+
4869+ <script src="jquery-1.3.min.js" type="text/javascript"></script>
4870+ <script src="jMonthCalendar.js" type="text/javascript"></script>
4871+
4872+
4873+ <style type="text/css" media="screen">
4874+ #jMonthCalendar .Meeting { background-color: #DDFFFF;}
4875+ </style>
4876+
4877+
4878+ <script type="text/javascript">
4879+ $().ready(function() {
4880+ var options = {
4881+ height: 450,
4882+ width: 800,
4883+ navHeight: 25,
4884+ labelHeight: 25,
4885+ onMonthChanging: function(dateIn) {
4886+ //this could be an Ajax call to the backend to get this months events
4887+ //$.jMonthCalendar.ReplaceEventCollection(events);
4888+ return true;
4889+ },
4890+ onEventLinkClick: function(event) {
4891+ //alert("event link click");
4892+ return true;
4893+ },
4894+ onEventBlockClick: function(event) {
4895+ //alert("block clicked");
4896+ return true;
4897+ },
4898+ onEventBlockOver: function(event) {
4899+ //alert(event.Title + " - " + event.Description);
4900+ return true;
4901+ },
4902+ onEventBlockOut: function(event) {
4903+ return true;
4904+ },
4905+ onDayLinkClick: function(date) {
4906+ alert(date.toLocaleDateString());
4907+ return true;
4908+ },
4909+ onDayCellClick: function(date) {
4910+ alert(date.toLocaleDateString());
4911+ return true;
4912+ }
4913+ };
4914+
4915+
4916+ var events = [];
4917+ var eventid = 1
4918+% if milestone_groups:
4919+% for group in milestone_groups:
4920+% for milestone in group.milestones:
4921+ events.push({ "EventID": eventid, "Date": "${group.due_date}", "Title": "${milestone.name}", "URL": "${util.url(milestone.link)}", "Description": "${milestone.name}", "CssClass": "Meeting" })
4922+ eventid++
4923+% endfor
4924+% endfor
4925+% else:
4926+ <p>No milestones!</p>
4927+% endif
4928+ $.jMonthCalendar.Initialize(options, events);
4929+
4930+ });
4931+ </script>
4932+
4933+
4934+<h1>Milestones</h1>
4935+
4936+<p>Here is a calendar and timeline views of all the milestones during the current cycle. Click on any one of them to see
4937+the tasks that are assigned to be completed by that milestone.</p>
4938+
4939+<table>
4940+ <tr style="height:830px;">
4941+ <td>
4942+ <div id="jMonthCalendar"></div>
4943+ </td>
4944+ </tr>
4945+</table>
4946+
4947+% if milestone_groups:
4948+<table id="milestones" style="padding-top:100px;">
4949+<% last_group = None %>
4950+% for group in milestone_groups:
4951+<tr
4952+## Make the height of the row proportional to the duration between this milestone
4953+## and the previous. The height will not shrink below the contents though, so
4954+## there is no worry about very short durations.
4955+% if last_group is not None:
4956+height="${(group.due_date.toordinal() - last_group.due_date.toordinal())*2}px"
4957+% endif
4958+
4959+>
4960+ <td class="current_date_marker">
4961+## Point at the first milestone that is after the current date
4962+% if group.due_date >= current_date and (last_group is None or last_group.due_date < current_date):
4963+&gt;
4964+% endif
4965+ </td>
4966+ <td class="date"><span class="connector">-</span> <a href="${util.url(group.due_date_str+".html")}">${group.due_date}</a></td>
4967+ <td class="milestones">
4968+% for milestone in group.milestones:
4969+- <a href="${util.url(milestone.link)}">${milestone.name}</a>
4970+% endfor
4971+ </td>
4972+<% last_group = group %>
4973+% endfor
4974+</table>
4975+% else:
4976+<p>No milestones!</p>
4977+% endif

Subscribers

People subscribed via source and target branches

to all changes: