Merge lp:~keegan-csmith/umonya-website/application-forms into lp:~umonya/umonya-website/umonya-website

Proposed by Keegan Carruthers-Smith
Status: Needs review
Proposed branch: lp:~keegan-csmith/umonya-website/application-forms
Merge into: lp:~umonya/umonya-website/umonya-website
Diff against target: 1809 lines (+1382/-165)
32 files modified
.bzrignore (+1/-0)
README (+28/-0)
misc/db.txt (+93/-0)
misc/history_and_team (+60/-0)
requirements.txt (+3/-0)
umonya/apply/admin.py (+13/-0)
umonya/apply/forms.py (+50/-0)
umonya/apply/models.py (+126/-54)
umonya/apply/static/js/jquery.min.js (+154/-0)
umonya/apply/templates/apply.html (+20/-0)
umonya/apply/templates/events.html (+29/-0)
umonya/apply/tests.py (+0/-23)
umonya/apply/urls.py (+3/-1)
umonya/apply/views.py (+114/-6)
umonya/content/admin.py (+5/-0)
umonya/content/fixtures/initial_data.json (+68/-0)
umonya/content/models.py (+16/-0)
umonya/content/static/css/style.css (+206/-0)
umonya/content/templates/about-us.html (+49/-0)
umonya/content/templates/contact-us.html (+13/-0)
umonya/content/templates/get-involved.html (+55/-0)
umonya/content/templates/home.html (+39/-0)
umonya/content/templates/media.html (+14/-0)
umonya/content/templates/resources.html (+34/-0)
umonya/content/templates/sponsors.html (+28/-0)
umonya/content/urls.py (+16/-0)
umonya/content/views.py (+11/-0)
umonya/form.html (+0/-10)
umonya/manage.py (+1/-1)
umonya/settings.py (+74/-52)
umonya/templates/base.html (+43/-0)
umonya/urls.py (+16/-18)
To merge this branch: bzr merge lp:~keegan-csmith/umonya-website/application-forms
Reviewer Review Type Date Requested Status
Umonya Pending
Review via email: mp+68996@code.launchpad.net

Description of the change

Most important change is the content is merged in.

Other Important Changes
-----------------------

* Use Django 1.3

* Some code for events/workshops, but not complete. This will not affect the website unless an event is added through the admin interface.

Things that are missing which might be a blocker
------------------------------------------------

* Contact form just has a link to the email

* Contributor info is incomplete, so is not added

* CSS needs to be fixed for Sponsor pages. Images overflow at the moment.

To post a comment you must log in.

Unmerged revisions

45. By Keegan Carruthers-Smith

Use uni-form for pretty HTML forms.

44. By Keegan Carruthers-Smith

Merged in content branch.

43. By Keegan Carruthers-Smith

Added workshop blurb to events page.

42. By Keegan Carruthers-Smith

Updated about-us.html

41. By Keegan Carruthers-Smith

Commented out boilerplate in media.html

40. By Keegan Carruthers-Smith

Updated get-involved.html

39. By Keegan Carruthers-Smith

Updated resources.html

38. By Keegan Carruthers-Smith

Made sponsor page database backed.

S1 is still missing a logo, and Silicon Cape is missing a description. The CSS
also needs to be fixed to prevent overflow of logo.

37. By Keegan Carruthers-Smith

Renamed skeleton.html to the more conventional base.html

36. By Keegan Carruthers-Smith

Removed the messages app, since it is unused.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file '.bzrignore'
2--- .bzrignore 1970-01-01 00:00:00 +0000
3+++ .bzrignore 2011-07-24 15:31:18 +0000
4@@ -0,0 +1,1 @@
5+umonya.db
6
7=== added file 'README'
8--- README 1970-01-01 00:00:00 +0000
9+++ README 2011-07-24 15:31:18 +0000
10@@ -0,0 +1,28 @@
11+.. -*- mode: rst -*-
12+
13+================
14+ Umonya Website
15+================
16+
17+This repository stores the code for http://umonya.co.za/
18+
19+The canonical location for this repository is at
20+http://code.launchpad.net/umonya-website/ [bzr].
21+
22+Alternative mirrors:
23+
24+* https://bitbucket.org/keegan_csmith/umonya-website [hg]
25+* https://github.com/keegancsmith/Umonya-Website [git]
26+
27+
28+Deployment
29+==========
30+
31+It is expected that this website is deployed using a virtual environment. You
32+can install the requirements using::
33+
34+ pip install -r requirements.txt
35+
36+Hosting can then be done using any webserver that supports WSGI. There are
37+alternative methods of deploying this website, see the Django documentation
38+for more options.
39
40=== added directory 'misc'
41=== added file 'misc/db.txt'
42--- misc/db.txt 1970-01-01 00:00:00 +0000
43+++ misc/db.txt 2011-07-24 15:31:18 +0000
44@@ -0,0 +1,93 @@
45+learner_tb
46+---------
47+learner_id - (GUID) char(??)
48+first_name - varchar(30)
49+last_name - varchar(30)
50+school_id - int
51+alt_event(false) - boolean
52+grade - unsigned shortint
53+email - varchar(50)
54+contact_no - varchar(20)
55+alt_contact_no - varchar(20)
56+active_ind(true) - boolean
57+
58+teacher_tb
59+----------
60+teacher_id - (GUID) char(??)
61+first_name - varchar(30)
62+last_name - varchar(30)
63+school_id - int
64+email - varchar(50)
65+contact_no - varchar(20)
66+active_ind(true) - boolean
67+
68+application_tb
69+--------------
70+learner_id - (GUID) char(??)
71+event_id - int
72+created_datetime - datetime
73+motivation - varchar(1000)
74+[special_motivation] - varchar(1000)
75+referral_source_id - int
76+[teacher_id] - (GUID) char(??)
77+status_id(Incomplete)- int
78+[status_reviewer_id] - int
79+active_ind(true) - boolean
80+
81+event_tb
82+--------
83+event_id - int
84+start_datetime - datetime
85+end_datetime - datetime
86+location_id - int
87+application_deadline - datetime
88+url - varchar(100)
89+active_ind(true) - boolean
90+
91+status_tb
92+---------
93+status_id - int
94+description - varchar(100)
95+
96+schools_tb
97+----------
98+school_id - int
99+name - varchar(100)
100+region_id - int
101+
102+referral_source_tb
103+------------------
104+referral_source_id - int
105+description - varchar(100)
106+
107+region_tb
108+---------
109+region_id - int
110+name - varchar(100)
111+
112+location_tb
113+-----------
114+location_id - int
115+region_id - int
116+address - varchar(100)
117+
118+reviewer_tb
119+-----------
120+reviewer_id - int
121+name - varchar(30)
122+email - varchar(50)
123+salt - char(10)
124+password_hash - char(??)
125+admin(false) - boolean
126+event_admin - many-to-many event_id
127+event_reviewer - many-to-many event_id
128+
129+review_tb
130+---------
131+student_id - int
132+event_id - int
133+created_datetime - datetime
134+reviewer_id - int
135+[status_id] - int
136+[comment] - varchar(300)
137+[rating] - unsigned shortint
138
139=== added file 'misc/history_and_team'
140--- misc/history_and_team 1970-01-01 00:00:00 +0000
141+++ misc/history_and_team 2011-07-24 15:31:18 +0000
142@@ -0,0 +1,60 @@
143+Umonya was born out of the UCT Algorithm Circle [link to website]. We began by introducing the Python programming language to a small group of learners from the UCT Maths Circle, who found the course immensely enjoyable. This first success prompted us to reach out to a larger number of learners; we decided to venture into new terrain and advertise to all schools in Cape Town.
144+
145+A week later we had received over a hundred applications from thirty schools. The response exceeded even our most abmitious expectations, and as such we had to limit our acceptance to fourty-five students. The response to this pilot was phenominal. The learners performed exceptionally under the guidance of their student tutors, who took great pleasure in the learners' progress. By the end of the workshop, attendees with no prior experience were able to write fully functioning programmes.
146+
147+#IFDEF CATCH_PHRASE
148+#include "As for us, one thing became readily apparent: Project Umonya was going to be far more than just a course, it was to be a community.h"
149+#ENDIF
150+
151+Following the succes of the pilot, we quickly realised the potential of Project Umonya and organised larger workshops in Cape Town and Stellenbosch. As part of its CS4HS initiative <link>, Google later awarded us funding to extend the reach of the project beyond the borders of the Western Cape. We have since grown from the initial ten volunteers to the full spectrum listed below:
152+
153+// TODO: formatting
154+TODO: This will need to be updated once we've restructured the core team
155+
156+Core team:
157+
158+Marco Gallotta: MSc student in bioinformatics. Umonya founder, lead organiser and lecturer.
159+http://www.gravatar.com/avatar/89cff7a629a2782ebc5805675fcb09f0?s=128&d=identicon&r=PG
160+Robert Ketteringham: 3rd Year Electonic Engineering student at Stellenbosch University. Course lectturer, tutor and coordinator?
161+Hayley McIntosh:
162+Steve Kroon: Senior Lecturer in Computer Science at Stellenbosch University. Course co-ordinator for past Stellenbosch courses. ( http://imgur.com/O1Wur )
163+Ryan Goosen: MSc(Med) Medical Biochemistry student (previous background in Comp. Sci). Umonya website development lead, lecturer, tutor.
164+
165+Lecturers:
166+
167+Michiel Baird:
168+Henk Joubert:
169+Graham Poulter:
170+Kosie van der Merwe: 2nd Year BSc student at University of Cape Town, with majors in Computer Science and Mathematics.( http://imgur.com/QEYms )
171+
172+-- in a scroll box --
173+Tutors:
174+
175+Gwylim Ashley
176+Jason Brownbridge
177+Jan Buys
178+Tslil Clingman
179+Kieren Davies
180+Roland Elliot
181+Rory Grandin
182+Maia Grotepass
183+Yaseen Hamdulay
184+Julian Kenwood
185+Graham Manuell
186+Vaughan Newton
187+Helge Reikeras
188+Stefano Rivera
189+Nina Schiff
190+Ben Steenhuisen
191+Flora Tasse
192+Alexander van Olst
193+Rizmari Versfeld
194+
195+Additional volunteers:
196+
197+Doug Kisbaka
198+Schalk-Willem Krüger
199+Matthew Laten
200+Francois Loubser
201+James Saunders
202+
203
204=== added file 'requirements.txt'
205--- requirements.txt 1970-01-01 00:00:00 +0000
206+++ requirements.txt 2011-07-24 15:31:18 +0000
207@@ -0,0 +1,3 @@
208+Django==1.3
209+django-annoying==0.7.6
210+django-uni-form==0.8.0
211
212=== removed file 'umonya/README'
213=== added file 'umonya/apply/admin.py'
214--- umonya/apply/admin.py 1970-01-01 00:00:00 +0000
215+++ umonya/apply/admin.py 2011-07-24 15:31:18 +0000
216@@ -0,0 +1,13 @@
217+from umonya.apply.models import *
218+from django.contrib import admin
219+
220+for model in (Student, Event, Teacher, Reviewer, Review,
221+ Location, Region, School):
222+ admin.site.register(model)
223+
224+
225+class ApplicationAdmin(admin.ModelAdmin):
226+ list_display = ('student', 'status', 'completed', 'email_sent',
227+ 'rsvped', 'active_ind')
228+ list_filter = ('completed', 'email_sent', 'rsvped', 'active_ind')
229+admin.site.register(Application, ApplicationAdmin)
230
231=== added file 'umonya/apply/forms.py'
232--- umonya/apply/forms.py 1970-01-01 00:00:00 +0000
233+++ umonya/apply/forms.py 2011-07-24 15:31:18 +0000
234@@ -0,0 +1,50 @@
235+from umonya.apply.models import *
236+
237+from django import forms
238+from uni_form.helpers import FormHelper, Submit
239+
240+
241+class UniFormSubmitForm(forms.Form):
242+
243+ @property
244+ def helper(self):
245+ helper = FormHelper()
246+ submit = Submit('submit', 'Submit your application')
247+ helper.add_input(submit)
248+ helper.form_action = self.form_action
249+ helper.form_method = 'POST'
250+ return helper
251+
252+
253+class StudentApplyForm(UniFormSubmitForm):
254+ first_name = forms.CharField(max_length=30)
255+ last_name = forms.CharField(max_length=30)
256+ school = forms.CharField(max_length=50)
257+ alt_event = forms.BooleanField(
258+ label='Would you like to receive an email about alternate events '
259+ 'if we can not accept you for this one?',
260+ required=False)
261+ grade = forms.IntegerField()
262+ email = forms.EmailField(label='Email address')
263+ contact_no = forms.CharField(max_length=20, label='Phone number')
264+ alt_contact_no = forms.CharField(
265+ max_length = 20,
266+ required = False,
267+ label = 'Parent\'s phone number')
268+ motivation = forms.CharField(
269+ widget = forms.widgets.Textarea(),
270+ max_length = 600,
271+ label = 'Please explain briefly (max. 600 characters) why you '
272+ 'think you should be considered for this course.')
273+
274+ form_action = 'apply'
275+
276+
277+class TeacherApplyForm(UniFormSubmitForm):
278+ first_name = forms.CharField(max_length=30)
279+ last_name = forms.CharField(max_length=30)
280+ school = forms.CharField(max_length=50)
281+ email = forms.EmailField(label='email address')
282+ contact_no = forms.CharField(max_length=20, label='Phone number')
283+
284+ form_action = 'apply'
285
286=== modified file 'umonya/apply/models.py'
287--- umonya/apply/models.py 2011-02-13 09:13:18 +0000
288+++ umonya/apply/models.py 2011-07-24 15:31:18 +0000
289@@ -1,74 +1,146 @@
290+import datetime
291+
292 from django.db import models
293
294 class Region(models.Model):
295 name = models.CharField(max_length=100)
296
297+ def __unicode__(self):
298+ return self.name
299+
300+
301+class Location(models.Model):
302+ region = models.ForeignKey(Region, related_name="locations")
303+ address = models.CharField(max_length=100)
304+
305+ def __unicode__(self):
306+ return self.address
307+
308+
309+class Status(models.Model):
310+ description = models.CharField(max_length=100)
311+
312+ def __unicode__(self):
313+ return self.description
314+
315+
316+class ReferralSource(models.Model):
317+ description = models.CharField(max_length=100)
318+
319+ def __unicode__(self):
320+ return self.description
321+
322+
323 class School(models.Model):
324- name = models.CharField(max_length=100)
325+ name = models.CharField(max_length=100)
326 region = models.ForeignKey(Region, related_name="schools")
327
328-class Location(models.Model):
329- region = models.ForeignKey(Region, related_name="locations")
330- address = models.CharField(max_length=100)
331+ def __unicode__(self):
332+ return self.name
333+
334+
335+class Student(models.Model):
336+ student_id = models.CharField(max_length=36, unique=True)
337+ first_name = models.CharField(max_length=30, null=True, blank=True)
338+ last_name = models.CharField(max_length=30, null=True, blank=True)
339+ school = models.ForeignKey(School, related_name="students", null=True, blank=True)
340+ alt_event = models.BooleanField(default=False)
341+ grade = models.IntegerField(null=True, blank=True)
342+ email = models.EmailField()
343+ contact_no = models.CharField(max_length=20, null=True, blank=True)
344+ alt_contact_no = models.CharField(max_length=20, null=True, blank=True)
345+ active_ind = models.BooleanField(default=True)
346+
347+ def __unicode__(self):
348+ return '%s %s (%s)' % (self.first_name, self.last_name, self.school.name)
349+
350
351 class Event(models.Model):
352- datetime = models.DateTimeField()
353- location = models.ForeignKey(Location, related_name="events")
354- url = models.URLField(max_length=100)
355+ start_datetime = models.DateTimeField()
356+ end_datetime = models.DateTimeField()
357+ location = models.ForeignKey(Location, related_name="events")
358+ url = models.URLField(max_length=100)
359+ active_ind = models.BooleanField(default=True)
360+
361+ @classmethod
362+ def get_by_slug(cls, slug):
363+ location, year, month, day = slug.rsplit('-', 4)
364+ try:
365+ return cls.objects.filter(location__address__exact=location,
366+ start_datetime__year=year,
367+ start_datetime__month=month,
368+ start_datetime__day=day).get()
369+ except ValueError:
370+ raise Event.DoesNotExist
371+
372+ @property
373+ def school_count(self):
374+ return (School.objects
375+ .filter(students__applications__event=self)
376+ .count())
377+
378+ @property
379+ def slug(self):
380+ return u'%s-%s' % (self.location.address,
381+ self.start_datetime.strftime('%Y-%m-%d'))
382+
383+ def __unicode__(self):
384+ return self.slug
385+
386
387 class Teacher(models.Model):
388- teacher_id = models.CharField(max_length=36)
389- first_name = models.CharField(max_length=30)
390- last_name = models.CharField(max_length=30)
391- school = models.ForeignKey(School, related_name="teachers")
392- email = models.EmailField()
393- concat_no = models.CharField(max_length=20)
394-
395-class Student(models.Model):
396- student_id = models.CharField(max_length=36)
397- first_name = models.CharField(max_length=30)
398- last_name = models.CharField(max_length=30)
399- school = models.ForeignKey(School, related_name="students")
400- alt_event = models.BooleanField()
401- grade = models.IntegerField()
402- email = models.EmailField()
403- contact_no = models.CharField(max_length=20)
404- alt_contact_no = models.CharField(max_length=20)
405- teacher = models.ForeignKey(Teacher, blank=True)
406-
407-class ReferralSource(models.Model):
408- description = models.CharField(max_length=100)
409-
410-class Status(models.Model):
411- description = models.CharField(max_length=100)
412+ teacher = models.CharField(max_length=36, unique=True)
413+ first_name = models.CharField(max_length=30, null=True, blank=True)
414+ last_name = models.CharField(max_length=30, null=True, blank=True)
415+ school = models.ForeignKey(School, related_name="teachers", null=True, blank=True)
416+ email = models.EmailField()
417+ contact_no = models.CharField(max_length=20, null=True, blank=True)
418+ active_ind = models.BooleanField(default=True)
419+
420+ def __unicode__(self):
421+ return '%s %s (%s)' % (self.first_name, self.last_name,
422+ self.school.name)
423+
424
425 # TODO: login
426 class Reviewer(models.Model):
427- name = models.CharField(max_length=30)
428- email = models.EmailField()
429- admin = models.BooleanField()
430- event_admin = models.ManyToManyField(Event, related_name="admins")
431+ name = models.CharField(max_length=30)
432+ email = models.EmailField()
433+ admin = models.BooleanField(default=False)
434+ event_admin = models.ManyToManyField(Event, related_name="admins")
435 event_reviewer = models.ManyToManyField(Event, related_name="reviewers")
436
437+ def __unicode__(self):
438+ return self.name
439+
440+
441 class Application(models.Model):
442- student = models.ForeignKey(Teacher, related_name="applications")
443- event = models.ForeignKey(Event, related_name="applications")
444- creation_time = models.DateTimeField()
445- motivation = models.TextField()
446- special_motivation = models.TextField(blank=True)
447- referral_source = models.ForeignKey(ReferralSource, related_name="applications")
448- teacher = models.ForeignKey(Teacher, related_name="student_applications")
449- status = models.ForeignKey(Status)
450- status_reviewer = models.ForeignKey(Reviewer, related_name="applications_reviewed")
451- completed = models.BooleanField(default=False)
452- email_sent = models.BooleanField(default=False)
453- rsvped = models.BooleanField(default=False)
454+ student = models.ForeignKey(Student, related_name="applications")
455+ event = models.ForeignKey(Event, related_name="applications")
456+ creation_datetime = models.DateTimeField(default = datetime.datetime.now)
457+ motivation = models.TextField(null=True, blank=True)
458+ special_motivation = models.TextField(null=True, blank=True)
459+ referral_source = models.ForeignKey(ReferralSource, related_name="applications")
460+ teacher = models.ForeignKey(Teacher, related_name="student_applications", null=True)
461+ status = models.ForeignKey(Status)
462+ status_reviewer = models.ForeignKey(Reviewer, related_name="applications_reviewed", null=True)
463+ completed = models.BooleanField(default=False)
464+ email_sent = models.BooleanField(default=False)
465+ rsvped = models.BooleanField(default=False)
466+ active_ind = models.BooleanField(default=True)
467+
468+ def __unicode__(self):
469+ return '%s for %s' % (unicode(self.student), unicode(self.event))
470+
471
472 class Review(models.Model):
473- application = models.ForeignKey(Application, related_name="reviews")
474- event = models.ForeignKey(Event, related_name="reviews")
475- creation_time = models.DateTimeField()
476- reviewer = models.ForeignKey(Reviewer, related_name="reviews")
477- status = models.ForeignKey(Status, blank=True)
478- comment = models.TextField(blank=True)
479- rating = models.IntegerField(blank=True)
480+ application = models.ForeignKey(Application, related_name="reviews")
481+ event = models.ForeignKey(Event, related_name="reviews")
482+ creation_datetime = models.DateTimeField()
483+ reviewer = models.ForeignKey(Reviewer, related_name="reviews")
484+ status = models.ForeignKey(Status, null=True, blank=True)
485+ comment = models.TextField(null=True, blank=True)
486+ rating = models.IntegerField(null=True, blank=True)
487+
488+ def __unicode__(self):
489+ return '%s - %s' % (unicode(self.status), unicode(self.application))
490
491=== added directory 'umonya/apply/static'
492=== added directory 'umonya/apply/static/js'
493=== added file 'umonya/apply/static/js/jquery.min.js'
494--- umonya/apply/static/js/jquery.min.js 1970-01-01 00:00:00 +0000
495+++ umonya/apply/static/js/jquery.min.js 2011-07-24 15:31:18 +0000
496@@ -0,0 +1,154 @@
497+/*!
498+ * jQuery JavaScript Library v1.4.2
499+ * http://jquery.com/
500+ *
501+ * Copyright 2010, John Resig
502+ * Dual licensed under the MIT or GPL Version 2 licenses.
503+ * http://jquery.org/license
504+ *
505+ * Includes Sizzle.js
506+ * http://sizzlejs.com/
507+ * Copyright 2010, The Dojo Foundation
508+ * Released under the MIT, BSD, and GPL Licenses.
509+ *
510+ * Date: Sat Feb 13 22:33:48 2010 -0500
511+ */
512+(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
513+e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
514+j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
515+"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
516+true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
517+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
518+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
519+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
520+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
521+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
522+c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
523+L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
524+"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
525+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
526+d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
527+a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
528+!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
529+true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
530+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
531+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
532+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
533+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
534+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
535+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
536+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
537+w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
538+cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
539+i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
540+" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
541+this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
542+e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
543+c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
544+a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
545+function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
546+k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
547+C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
548+null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
549+e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
550+f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
551+if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
552+fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
553+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
554+"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
555+a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
556+isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
557+{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
558+if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
559+e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
560+"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
561+d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
562+!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
563+toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
564+u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
565+function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
566+if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
567+e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
568+t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
569+g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
570+for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
571+1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
572+CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
573+relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
574+l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
575+h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
576+CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
577+g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
578+text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
579+setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
580+h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
581+m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
582+"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
583+h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
584+!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
585+h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
586+q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
587+if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
588+(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
589+function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
590+gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
591+c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
592+{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
593+"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
594+d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
595+a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
596+1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
597+a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
598+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
599+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
600+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
601+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
602+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
603+""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
604+this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
605+u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
606+1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
607+return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
608+""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
609+c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
610+c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
611+function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
612+Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
613+"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
614+a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
615+a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
616+"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
617+serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
618+function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
619+global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
620+e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
621+"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
622+false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
623+false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
624+c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
625+d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
626+g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
627+1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
628+"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
629+if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
630+this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
631+"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
632+animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
633+j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
634+this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
635+"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
636+c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
637+this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
638+this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
639+e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
640+c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
641+function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
642+this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
643+k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
644+f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
645+a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
646+c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
647+d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
648+f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
649+"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
650+e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
651
652=== added directory 'umonya/apply/templates'
653=== added file 'umonya/apply/templates/apply.html'
654--- umonya/apply/templates/apply.html 1970-01-01 00:00:00 +0000
655+++ umonya/apply/templates/apply.html 2011-07-24 15:31:18 +0000
656@@ -0,0 +1,20 @@
657+{% extends "base.html" %}
658+{% block extra_head %}
659+<script src="{{ STATIC_URL }}js/jquery.min.js" type="text/javascript"></script>
660+{% include "uni_form/includes.html" %}
661+{% endblock %}
662+
663+{% load uni_form_tags %}
664+
665+{% block content %}
666+ <div id="right-content">
667+
668+ </div>
669+ <div id="main-content">
670+ <h2>Apply</h2>
671+ <form method="post" action="apply" class="uniForm">
672+ {% csrf_token %}
673+ {% uni_form form form.helper %}
674+ </form>
675+ </div>
676+{% endblock %}
677
678=== added file 'umonya/apply/templates/events.html'
679--- umonya/apply/templates/events.html 1970-01-01 00:00:00 +0000
680+++ umonya/apply/templates/events.html 2011-07-24 15:31:18 +0000
681@@ -0,0 +1,29 @@
682+{% extends "base.html" %}
683+{% block content %}
684+ <div id="right-content">
685+ </div>
686+ <div id="main-content">
687+ <p>
688+ Workshops are run over a full weekend and are divided between lectures
689+ and practical sessions with lunch time providing an opportunity for our
690+ sponsors to provide insight into the programming industry. Lecturers
691+ will lead each session, demonstrating concepts and elaborating on the
692+ content of the notes with tutors available throughout for help on any
693+ problems that may be encountered.
694+ </p>
695+
696+ <h2>Upcoming workshops</h2>
697+ {% if events %}
698+ {% for event in events %}
699+ <h3>Event: {{ event.date }} - {{ event.location }}</h3>
700+ <p>{{ event.description }}</p>
701+ <p>{{ event.student_count }} learner{{ event.student_count|pluralize }} from {{ event.school_count }} school{{ event.school_count|pluralize }} have applied.</p>
702+ <p>{{ event.close_date|timeuntil }}</p>
703+ <a class="apply-button" href="{{ event.id }}/student-apply/">Apply</a>
704+ <a class="apply-button" href="{{ event.id }}/teacher-apply/">Apply as a teacher</a>
705+ {% endfor %}
706+ {% else %}
707+ <p>There are no upcoming events...</p>
708+ {% endif %}
709+ </div>
710+{% endblock %}
711
712=== removed file 'umonya/apply/tests.py'
713--- umonya/apply/tests.py 2011-02-13 09:13:18 +0000
714+++ umonya/apply/tests.py 1970-01-01 00:00:00 +0000
715@@ -1,23 +0,0 @@
716-"""
717-This file demonstrates two different styles of tests (one doctest and one
718-unittest). These will both pass when you run "manage.py test".
719-
720-Replace these with more appropriate tests for your application.
721-"""
722-
723-from django.test import TestCase
724-
725-class SimpleTest(TestCase):
726- def test_basic_addition(self):
727- """
728- Tests that 1 + 1 always equals 2.
729- """
730- self.failUnlessEqual(1 + 1, 2)
731-
732-__test__ = {"doctest": """
733-Another way to test that 1 + 1 is equal to 2.
734-
735->>> 1 + 1 == 2
736-True
737-"""}
738-
739
740=== modified file 'umonya/apply/urls.py'
741--- umonya/apply/urls.py 2011-02-13 09:34:55 +0000
742+++ umonya/apply/urls.py 2011-07-24 15:31:18 +0000
743@@ -2,5 +2,7 @@
744 from umonya.apply.views import *
745
746 urlpatterns = patterns('',
747- ('^$', apply)
748+ ('^([^/]+)/student-apply/', student_apply),
749+ ('^([^/]+)/teacher-apply/', teacher_apply),
750+ ('^$', list_events),
751 )
752
753=== modified file 'umonya/apply/views.py'
754--- umonya/apply/views.py 2011-02-13 10:01:28 +0000
755+++ umonya/apply/views.py 2011-07-24 15:31:18 +0000
756@@ -1,6 +1,114 @@
757-# Create your views here.
758-from django.http import HttpResponse
759-from umonya.apply.models import Student, Application
760-
761-def apply(request):
762- return HttpResponse('')
763+from umonya.apply.models import *
764+from umonya.apply.forms import *
765+
766+from datetime import datetime
767+
768+from annoying.decorators import render_to
769+from django import forms
770+from django.db import models, transaction
771+from django.http import Http404, HttpResponseRedirect
772+from django.shortcuts import render_to_response
773+from django.template import loader, Context
774+
775+
776+def add_update_student(data, event):
777+ '''
778+ Adds or updates an application, using the cleaned_data from a valid
779+ StudentApplyForm
780+ '''
781+ # method for random fields i don't understand the reason for existance
782+ import random
783+ def random_str(length):
784+ import string
785+ return ''.join(random.choice(string.ascii_lowercase)
786+ for i in range(length))
787+
788+ # XXX Some defaults until some discussion takes place on the db design, or
789+ # what to ask in the application form
790+ region = Region.objects.get_or_create(name = 'Western Cape')[0]
791+ referral_source = ReferralSource.objects.get_or_create(
792+ description = 'Trolling')[0]
793+ status = Status.objects.get_or_create(description = 'Noob')[0]
794+
795+ school = School.objects.get_or_create(name = data['school'],
796+ region = region)[0]
797+
798+ # XXX if a student already exists, should this create an error? At the
799+ # moment this just creates a new student with a different student id
800+ student = Student.objects.create(
801+ student_id = random_str(30),
802+ first_name = data['first_name'],
803+ last_name = data['last_name'],
804+ school = school,
805+ alt_event = data['alt_event'],
806+ grade = data['grade'],
807+ email = data['email'],
808+ contact_no = data['contact_no'],
809+ alt_contact_no = data['alt_contact_no'])
810+
811+
812+ application = Application.objects.create(
813+ student = student,
814+ event = event,
815+ motivation = data['motivation'],
816+ referral_source = referral_source,
817+ teacher = None,
818+ status = status,
819+ status_reviewer = None)
820+
821+
822+@render_to('apply.html')
823+@transaction.commit_on_success
824+def student_apply(request, event_slug):
825+ try:
826+ event = Event.get_by_slug(event_slug)
827+ except Event.DoesNotExist:
828+ raise Http404
829+
830+ if request.method == 'POST':
831+ form = StudentApplyForm(request.POST)
832+ if form.is_valid():
833+ add_update_student(form.cleaned_data, event)
834+
835+ # XXX where should the student go to after applying?
836+ return HttpResponseRedirect('/')
837+ else:
838+ form = StudentApplyForm()
839+
840+ return { 'form' : form }
841+
842+
843+@render_to('apply.html')
844+def teacher_apply(request, event):
845+ try:
846+ event = Event.get_by_slug(event_slug)
847+ except Event.DoesNotExist:
848+ raise Http404
849+
850+ if request.method == 'POST':
851+ form = TeacherApplyForm(request.POST)
852+ if form.is_valid():
853+ pass # TODO save results of form
854+ else:
855+ form = TeacherApplyForm()
856+
857+ return { 'form' : form }
858+
859+
860+@render_to('events.html')
861+def list_events(request):
862+ events = Event.objects.all()
863+ e = []
864+
865+ for x in events:
866+ e.append({
867+ 'date' : x.start_datetime,
868+ 'location' : x.location.address,
869+ 'description' : '',
870+ 'student_count' : x.applications.count(),
871+ 'school_count' : x.school_count,
872+ 'close_date' : x.end_datetime,
873+ 'id' : x.slug,
874+ })
875+
876+ return { 'events' : e }
877
878=== added directory 'umonya/content'
879=== added file 'umonya/content/__init__.py'
880=== added file 'umonya/content/admin.py'
881--- umonya/content/admin.py 1970-01-01 00:00:00 +0000
882+++ umonya/content/admin.py 2011-07-24 15:31:18 +0000
883@@ -0,0 +1,5 @@
884+from django.contrib import admin
885+
886+from umonya.content.models import Sponsor
887+
888+admin.site.register(Sponsor)
889
890=== added directory 'umonya/content/fixtures'
891=== added file 'umonya/content/fixtures/initial_data.json'
892--- umonya/content/fixtures/initial_data.json 1970-01-01 00:00:00 +0000
893+++ umonya/content/fixtures/initial_data.json 2011-07-24 15:31:18 +0000
894@@ -0,0 +1,68 @@
895+[
896+ {
897+ "pk": 1,
898+ "model": "content.sponsor",
899+ "fields": {
900+ "image_path": "/static/img/logos/google_logo.png",
901+ "years": "2011",
902+ "type": "Sponsor",
903+ "name": "Google",
904+ "description": "Their CS4HS and K-12 divisions have funded our growth and allowed us to expand beyond the Cape Town region"
905+ }
906+ },
907+ {
908+ "pk": 2,
909+ "model": "content.sponsor",
910+ "fields": {
911+ "image_path": "/static/img/logos/mih.jpg",
912+ "years": "2010",
913+ "type": "Sponsor",
914+ "name": "MIH Media Lab",
915+ "description": "Funded Stellenbosch University pilot workshop and gave a talk"
916+ }
917+ },
918+ {
919+ "pk": 3,
920+ "model": "content.sponsor",
921+ "fields": {
922+ "image_path": "/static/img/logos/google_logo.png",
923+ "years": "2010",
924+ "type": "Sponsor",
925+ "name": "S1",
926+ "description": "Funded two University of Cape Town workshops and gave talks"
927+ }
928+ },
929+ {
930+ "pk": 4,
931+ "model": "content.sponsor",
932+ "fields": {
933+ "image_path": "/static/img/logos/uctlogo.png",
934+ "years": "2010",
935+ "type": "Collaborator",
936+ "name": "University of Cape Town",
937+ "description": "Supplied facilities for workshops"
938+ }
939+ },
940+ {
941+ "pk": 5,
942+ "model": "content.sponsor",
943+ "fields": {
944+ "image_path": "/static/img/logos/sun_logo.png",
945+ "years": "2010",
946+ "type": "Collaborator",
947+ "name": "Stellenbosch University",
948+ "description": "Supplied facilities for workshops"
949+ }
950+ },
951+ {
952+ "pk": 6,
953+ "model": "content.sponsor",
954+ "fields": {
955+ "image_path": "/static/img/logos/siliconcape.jpg",
956+ "years": "2011",
957+ "type": "Collaborator",
958+ "name": "Silicon Cape",
959+ "description": ""
960+ }
961+ }
962+]
963\ No newline at end of file
964
965=== added file 'umonya/content/models.py'
966--- umonya/content/models.py 1970-01-01 00:00:00 +0000
967+++ umonya/content/models.py 2011-07-24 15:31:18 +0000
968@@ -0,0 +1,16 @@
969+from django.db import models
970+
971+
972+SPONSOR_TYPE_CHOICES = (
973+ ('Sponsor', 'Sponsor'),
974+ ('Collaborator', 'Collaborator'),
975+)
976+class Sponsor(models.Model):
977+ name = models.CharField(max_length=50)
978+ description = models.TextField(blank=True)
979+ image_path = models.CharField(max_length=100)
980+ years = models.CharField(max_length=50)
981+ type = models.CharField(max_length=15, choices=SPONSOR_TYPE_CHOICES)
982+
983+ def __unicode__(self):
984+ return '%s %s' % (self.type, self.name)
985
986=== added directory 'umonya/content/static'
987=== added directory 'umonya/content/static/css'
988=== added file 'umonya/content/static/css/style.css'
989--- umonya/content/static/css/style.css 1970-01-01 00:00:00 +0000
990+++ umonya/content/static/css/style.css 2011-07-24 15:31:18 +0000
991@@ -0,0 +1,206 @@
992+body {
993+ font-family: "Trebuchet MS", Arial, sans-serif;
994+ font-size: 12px;
995+ margin: 0;
996+}
997+
998+a {
999+ text-decoration: none;
1000+}
1001+
1002+h1 {
1003+ font-size: 32px;
1004+ margin-bottom: 0px;
1005+}
1006+
1007+h2 {
1008+ font-size: 20px;
1009+}
1010+
1011+h3 {
1012+ font-size: 16px;
1013+ font-weight: normal;
1014+}
1015+
1016+h4 {
1017+ font-size: 16px;
1018+ font-weight: normal;
1019+ margin-top: 0;
1020+}
1021+
1022+a, h1, h2 {
1023+ color: #417F9E;
1024+ font-weight: normal;
1025+}
1026+
1027+a img {
1028+ border: 0;
1029+}
1030+
1031+.content-wrap {
1032+ width: 900px;
1033+ margin: 0 auto;
1034+}
1035+
1036+#header-wrap {
1037+ background-color: #F7F7F7;
1038+ background-image: url('/static/img/header-bg2.png'); /* is it possible to get the URL from django? */
1039+ background-repeat: repeat-x;
1040+ border-bottom: 1px solid #DDD;
1041+ height: 126px;
1042+}
1043+
1044+#header {
1045+ padding: 16px 0;
1046+}
1047+
1048+.no-bullets {
1049+ padding-left: 0;
1050+}
1051+
1052+.no-bullets li {
1053+ list-style: none;
1054+}
1055+
1056+.menu {
1057+ float: right;
1058+ width: 150px;
1059+}
1060+
1061+.menu img {
1062+ display: block;
1063+}
1064+
1065+a.big-button {
1066+ font-size: 14px;
1067+ margin: 5px 0;
1068+ padding: 15px 5px;
1069+ text-align: center;
1070+ width: 300px;
1071+}
1072+
1073+a.big-button, a.apply-button {
1074+ -moz-border-radius: 10px;
1075+ -webkit-border-radius: 10px;
1076+ background-color: #EEE;
1077+ border: 2px solid #568399;
1078+ margin-top: 5px;
1079+ padding: 5px 15px;
1080+}
1081+
1082+a.big-button:hover, a.apply-button:hover {
1083+ background-color: #CCC;
1084+}
1085+
1086+.contributor-box {
1087+ /* background-color: #F9F9FF; */
1088+ border: 1px solid #C0C0FF;
1089+ float: left;
1090+ height: 300px;
1091+ margin: 5px;
1092+ overflow: hidden;
1093+ padding: 15px;
1094+ width: 140px;
1095+}
1096+
1097+.contributor-box img {
1098+ height: 130px;
1099+ margin: 0 auto;
1100+ display: block;
1101+}
1102+
1103+.menu li {
1104+ border-bottom: 1px dashed #999;
1105+ display: block;
1106+ padding: 2px 0;
1107+ width: 140px;
1108+}
1109+
1110+.menu a:hover {
1111+ color: navy;
1112+}
1113+
1114+.last-menu {
1115+ border: none !important;
1116+}
1117+
1118+a.apply-button {
1119+
1120+}
1121+
1122+.apply-button:hover {
1123+
1124+}
1125+
1126+#content {
1127+ padding: 0 0 10px 20px;
1128+}
1129+
1130+#main-content {
1131+ text-align: justify;
1132+ width: 560px;
1133+}
1134+
1135+#right-content {
1136+ float: right;
1137+ width: 300px;
1138+}
1139+
1140+#main-content h2, #media-content h2 {
1141+ border-bottom: 2px solid #417FAF;
1142+ padding-bottom: 10px;
1143+}
1144+
1145+.course-box {
1146+ margin: 10px 0;
1147+ padding: 15px;
1148+}
1149+
1150+.sponsor-box {
1151+ /* background-color: #F9F9FF; */
1152+ border: 1px solid #C0C0FF;
1153+ margin: 10px 0;
1154+ padding: 15px;
1155+}
1156+
1157+.sponsor-box img {
1158+ float: left;
1159+ margin: 0 10px 10px 10px;
1160+}
1161+
1162+#social-icons li {
1163+ display: inline;
1164+ padding-right: 5px;
1165+}
1166+
1167+#social-icons img {
1168+ width: 48px;
1169+}
1170+
1171+#logo-list img {
1172+ height: 48px;
1173+ margin: 5px;
1174+}
1175+
1176+#logo-list li {
1177+ display: inline;
1178+ margin: 2px;
1179+}
1180+
1181+.break {
1182+ clear: both;
1183+}
1184+
1185+#sponsors-logos {
1186+ border-top: 1px solid #CCC;
1187+ margin: 20px auto 0 auto;
1188+ padding: 20px 0;
1189+ text-align: center;
1190+}
1191+
1192+#footer {
1193+ border-top: 1px solid #CCC;
1194+ font-size: 11px;
1195+ padding-top: 16px;
1196+ text-align: center;
1197+}
1198
1199=== added directory 'umonya/content/static/img'
1200=== added file 'umonya/content/static/img/header-bg2.png'
1201Binary files umonya/content/static/img/header-bg2.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/header-bg2.png 2011-07-24 15:31:18 +0000 differ
1202=== added directory 'umonya/content/static/img/logos'
1203=== added file 'umonya/content/static/img/logos/google_logo.png'
1204Binary files umonya/content/static/img/logos/google_logo.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/logos/google_logo.png 2011-07-24 15:31:18 +0000 differ
1205=== added file 'umonya/content/static/img/logos/mih.jpg'
1206Binary files umonya/content/static/img/logos/mih.jpg 1970-01-01 00:00:00 +0000 and umonya/content/static/img/logos/mih.jpg 2011-07-24 15:31:18 +0000 differ
1207=== added file 'umonya/content/static/img/logos/python-logo.gif'
1208Binary files umonya/content/static/img/logos/python-logo.gif 1970-01-01 00:00:00 +0000 and umonya/content/static/img/logos/python-logo.gif 2011-07-24 15:31:18 +0000 differ
1209=== added file 'umonya/content/static/img/logos/python-logo.png'
1210Binary files umonya/content/static/img/logos/python-logo.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/logos/python-logo.png 2011-07-24 15:31:18 +0000 differ
1211=== added file 'umonya/content/static/img/logos/siliconcape.jpg'
1212Binary files umonya/content/static/img/logos/siliconcape.jpg 1970-01-01 00:00:00 +0000 and umonya/content/static/img/logos/siliconcape.jpg 2011-07-24 15:31:18 +0000 differ
1213=== added file 'umonya/content/static/img/logos/sun_logo.jpg'
1214Binary files umonya/content/static/img/logos/sun_logo.jpg 1970-01-01 00:00:00 +0000 and umonya/content/static/img/logos/sun_logo.jpg 2011-07-24 15:31:18 +0000 differ
1215=== added file 'umonya/content/static/img/logos/sun_logo.png'
1216Binary files umonya/content/static/img/logos/sun_logo.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/logos/sun_logo.png 2011-07-24 15:31:18 +0000 differ
1217=== added file 'umonya/content/static/img/logos/uctlogo.png'
1218Binary files umonya/content/static/img/logos/uctlogo.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/logos/uctlogo.png 2011-07-24 15:31:18 +0000 differ
1219=== added directory 'umonya/content/static/img/people'
1220=== added directory 'umonya/content/static/img/social'
1221=== added file 'umonya/content/static/img/social/facebook.png'
1222Binary files umonya/content/static/img/social/facebook.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/social/facebook.png 2011-07-24 15:31:18 +0000 differ
1223=== added file 'umonya/content/static/img/social/rss.png'
1224Binary files umonya/content/static/img/social/rss.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/social/rss.png 2011-07-24 15:31:18 +0000 differ
1225=== added file 'umonya/content/static/img/social/twitter.png'
1226Binary files umonya/content/static/img/social/twitter.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/social/twitter.png 2011-07-24 15:31:18 +0000 differ
1227=== added file 'umonya/content/static/img/umonya-sized-white.png'
1228Binary files umonya/content/static/img/umonya-sized-white.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/umonya-sized-white.png 2011-07-24 15:31:18 +0000 differ
1229=== added file 'umonya/content/static/img/umonya-sized.png'
1230Binary files umonya/content/static/img/umonya-sized.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/umonya-sized.png 2011-07-24 15:31:18 +0000 differ
1231=== added file 'umonya/content/static/img/umonya-small.png'
1232Binary files umonya/content/static/img/umonya-small.png 1970-01-01 00:00:00 +0000 and umonya/content/static/img/umonya-small.png 2011-07-24 15:31:18 +0000 differ
1233=== added directory 'umonya/content/templates'
1234=== added file 'umonya/content/templates/about-us.html'
1235--- umonya/content/templates/about-us.html 1970-01-01 00:00:00 +0000
1236+++ umonya/content/templates/about-us.html 2011-07-24 15:31:18 +0000
1237@@ -0,0 +1,49 @@
1238+{% extends "base.html" %}
1239+{% block content %}
1240+ <div id="right-content">
1241+
1242+ </div>
1243+ <div id="main-content">
1244+ <h2>Who we are</h2>
1245+ <div>
1246+ <p>
1247+ We are a group of experienced programmers who are enthusiastic about
1248+ computer programming. It was from this enthusiasm that the idea of
1249+ Umonya was born, with the goal of introducing the endless
1250+ possibilities afforded by computer programming to learners, in free
1251+ workshops.
1252+ </p>
1253+
1254+ <p>
1255+ Information Technology (IT) has become integral to many fields in the
1256+ modern world: academia, commerce and industry all require IT at
1257+ fundamental level to function efficiently. Unfortunately, not everyone
1258+ has had the opportunity to develop advanced IT skills, such as
1259+ computer programming. Through a collaborative effort, Umonya workshops
1260+ teach programming to those who have not yet had such an opportunity,
1261+ through the medium of the <a href="http://www.python.org/">Python</a>
1262+ language.
1263+ </p>
1264+
1265+ <p>
1266+ We don't teach leaners how to <strong>use</strong> software; we teach them how to
1267+ <strong>make</strong> software. For example, a participant should be
1268+ able use a web browser; we will teach the skills, which, if developed,
1269+ will enable them to write one. We do not intend to replace South
1270+ African IT curricula; rather, we offer a distinct means for learners
1271+ to discover what programming has to offer.
1272+ </p>
1273+
1274+ <p>
1275+ Umonya aims to make learning programming free and fun -- if you do not
1276+ have fun, we offer a double-your-money-back guarentee.
1277+ </p>
1278+
1279+ </div>
1280+
1281+ {% comment %} TODO
1282+ <h2>What people are saying:</h2>
1283+ {% endcomment %}
1284+ <div class="break"></div>
1285+ </div>
1286+{% endblock %}
1287
1288=== added file 'umonya/content/templates/contact-us.html'
1289--- umonya/content/templates/contact-us.html 1970-01-01 00:00:00 +0000
1290+++ umonya/content/templates/contact-us.html 2011-07-24 15:31:18 +0000
1291@@ -0,0 +1,13 @@
1292+{% extends "base.html" %}
1293+{% block content %}
1294+ <div id="right-content">
1295+
1296+ </div>
1297+ <div id="main-content">
1298+ <h2>Contact us</h2>
1299+ {# TODO Contact form? #}
1300+
1301+ You can email us
1302+ at <a href="mailto:admins@umonya.co.za">admins@umonya.co.za</a>.
1303+ </div>
1304+{% endblock %}
1305
1306=== added file 'umonya/content/templates/get-involved.html'
1307--- umonya/content/templates/get-involved.html 1970-01-01 00:00:00 +0000
1308+++ umonya/content/templates/get-involved.html 2011-07-24 15:31:18 +0000
1309@@ -0,0 +1,55 @@
1310+{% extends "base.html" %}
1311+{% block content %}
1312+ <div id="right-content">
1313+
1314+ </div>
1315+ <div id="main-content">
1316+ <h2>Volunteering for Umonya</h2>
1317+ <p>
1318+ The success of Umonya depends a wide spectrum of volunteers. If you are
1319+ a competent* programmer, consider volunteering as a tutor. Tutors engage
1320+ with participants on a one-to-one basis in order to help solidify their
1321+ understanding of lecture topics. You may also wish to help with the
1322+ writing of workshop coursework, or with website design and maintenance.
1323+ </p>
1324+ <p>
1325+ However, you do not need to be an experienced programmer to help, as we
1326+ require assistance with adminstrative tasks such as: coordinating
1327+ volunteers, transport, catering, advertising, accounting, liasing with
1328+ various universities, and coordinating sponsorship.
1329+ </p>
1330+
1331+ <h2>Running a club at school</h2>
1332+ <p>
1333+ We would like provide the opportunity for interested learners to be
1334+ introduced to programming and exposed to the types of things you can do
1335+ with computers. However, we are unable to hold workshops in all regions
1336+ of the country. If you are interested in running a workshop in your
1337+ region, we can assist by providing advice
1338+ and <a href="/resources/">workshop materials</a>.
1339+ </p>
1340+
1341+ <p>
1342+ For teachers or learners who would like set up a computer club at their
1343+ schools, we offer assistance in the form of resources and potential
1344+ contacts to professionals and other groups. We have experience in
1345+ working with teachers and can help to establish links with other
1346+ clubs. Although, for the purposes of the Umonya workshops our focus is
1347+ predominantly on Python programming, we are also willing and able to
1348+ provide help in other fields, such as other programming languages or
1349+ general computer-related topics.
1350+ </p>
1351+
1352+ <p>
1353+ Once a club has become established, members may wish to further apply
1354+ their new-found knowledge of programming. Umonya is eager to partner
1355+ with initiatives that facilitate this process. One such initiative is
1356+ the <a href="http://algorithm.cs.uct.ac.za">UCT Algorithm Circle</a>,
1357+ which hosts a wealth of reasources, lecture slides and discussions on
1358+ its website. Addtionally, learners in the proximity of the University of
1359+ Cape Town may benefit from attending Algorithm Circle lectures held at
1360+ the university. Should you know of another such initiative,
1361+ please <a href="/contact-us/">contact us</a> with further information.
1362+ </p>
1363+ </div>
1364+{% endblock %}
1365
1366=== added file 'umonya/content/templates/home.html'
1367--- umonya/content/templates/home.html 1970-01-01 00:00:00 +0000
1368+++ umonya/content/templates/home.html 2011-07-24 15:31:18 +0000
1369@@ -0,0 +1,39 @@
1370+{% extends "base.html" %}
1371+{% block content %}
1372+ <div id="right-content">
1373+ <div>
1374+ <h2>Whatever will be here</h2>
1375+ <p>The UCT Algorithm Circle is an outreach programme for high school and university st
1376+udents offered to those identified as having an aptitude for computer programming or those wh
1377+o are already strong at computer programming and want to go beyond what is taught at school.</p>
1378+
1379+ </div>
1380+ <div>
1381+ <ul id="social-icons" class="no-bullets">
1382+ <li><a href="http://twitter.com/umonya"><img alt="" src="{{ STATIC_URL}}/img/social/twitter.png"></a></li>
1383+ <li><a href="http://www.facebook.com/group.php?gid=158365057523359"><img alt="" src="{{ STATIC_URL }}/img/social/facebook.png"></a></li>
1384+ <li><a href="#"><img alt="" src="{{ STATIC_URL }}/img/social/rss.png"></a></li>
1385+ </ul>
1386+ </div>
1387+ </div>
1388+ <div id="main-content">
1389+ <h1>What is Umonya?</h1>
1390+ <h3>
1391+ Over the course of a fun-filled weekend, Umonya introduces computer programming to hundreds of school learners of all backgrounds with the help of passionate volunteers. Computer programming is a way to instruct a computer to do things for you. Learners need no prior programming experience to attend.
1392+We hold workshops throughout South Africa using the free and widely used Python programming language.
1393+ </h3>
1394+ <a class="big-button" href="/events/">You can apply here. It's free and fun</a> or <a class="big-button" href="/get-involved">Get involved</a>
1395+ </div>
1396+ <div class="break"></div>
1397+{% endblock %}
1398+
1399+{% block extra_content %}
1400+ <div id="sponsors-logos">
1401+ <ul id="logo-list" class="no-bullets">
1402+ <li><a href="http://www.google.com/"><img alt="" src="{{ STATIC_URL }}/img/logos/google_logo.png"></a></li>
1403+ <li><a href="http://www.python.org/"><img alt="" src="{{ STATIC_URL }}/img/logos/python-logo.png"></a></li>
1404+ <li><a href="http://www.sun.ac.za/"><img alt="" src="{{ STATIC_URL }}/img/logos/sun_logo.png"></a></li>
1405+ <li><a href="http://www.uct.ac.za/"><img alt="" src="{{ STATIC_URL }}/img/logos/uctlogo.png"></a></li>
1406+ </ul>
1407+ </div>
1408+{% endblock %}
1409
1410=== added file 'umonya/content/templates/media.html'
1411--- umonya/content/templates/media.html 1970-01-01 00:00:00 +0000
1412+++ umonya/content/templates/media.html 2011-07-24 15:31:18 +0000
1413@@ -0,0 +1,14 @@
1414+{% extends "base.html" %}
1415+{% block content %}
1416+ <div id="media-content">
1417+ <h1>Coming soon...</h1>
1418+ {% comment %} TODO
1419+ <h2>News Feeds</h2>
1420+ <div>Have a feed thing here</div>
1421+ <h2>Image Gallery</h2>
1422+ <div>Probably embedd flickr or have a link here</div>
1423+ <h2>Video Gallery Gallery</h2>
1424+ <div>Probably embedd a youtube player or have a link here</div>
1425+ {% endcomment %}
1426+ </div>
1427+{% endblock %}
1428
1429=== added file 'umonya/content/templates/resources.html'
1430--- umonya/content/templates/resources.html 1970-01-01 00:00:00 +0000
1431+++ umonya/content/templates/resources.html 2011-07-24 15:31:18 +0000
1432@@ -0,0 +1,34 @@
1433+{% extends "base.html" %}
1434+{% block content %}
1435+ <div id="right-content">
1436+
1437+ </div>
1438+ <div id="main-content">
1439+ <h2>Resources</h2>
1440+ <div>
1441+ <p>
1442+ As part of an ongiong effort to assist learners, the set of notes used
1443+ throughout the workshop is publicly avaliable and can be found
1444+ <a href="http://umonya.co.za/pb/">here</a>. Later workshops will make
1445+ use of a new set of notes which volunteers are currently hard at work
1446+ writing. If you feel that you could make a contribution to this effort
1447+ through any means, please contact us
1448+ at <a href="mailto:admins@umonya.co.za">admins@umonya.co.za</a>. Upon
1449+ completion, the new notes will similarly be made
1450+ avaliable <a href="http://umonya.co.za/pb/">here</a>.
1451+ </p>
1452+
1453+ <p>
1454+ If you have any further questions about the course, you can join us on
1455+ <a href="#TODO link to mibbit">#algorithm on Shadowfire</a>, an active
1456+ IRC channel which discusses programming, algorithms and related topics.
1457+ </p>
1458+
1459+ <p>
1460+ In line with our larger goals, we also aim to help eager learners to run
1461+ programming clubs at their schools. Watch this space for supporting
1462+ resources and further updates.
1463+ </p>
1464+ </div>
1465+ </div>
1466+{% endblock %}
1467
1468=== added file 'umonya/content/templates/sponsors.html'
1469--- umonya/content/templates/sponsors.html 1970-01-01 00:00:00 +0000
1470+++ umonya/content/templates/sponsors.html 2011-07-24 15:31:18 +0000
1471@@ -0,0 +1,28 @@
1472+{% extends "base.html" %}
1473+{% block content %}
1474+ <div id="right-content">
1475+
1476+ </div>
1477+ <div id="main-content">
1478+ <h2>Sponsors</h2>
1479+ {% for sponsor in sponsors %}
1480+ <div class="sponsor-box">
1481+ <h4>{{ sponsor.name }} ({{ sponsor.years }})</h4>
1482+ <img src="{{ sponsor.image_path }}">
1483+ <p>{{ sponsor.description }}</p>
1484+ <p></p>
1485+ </div>
1486+ {% endfor %}
1487+
1488+ <h2>Collaborators</h2>
1489+ {% for sponsor in collaborators %}
1490+ <div class="sponsor-box">
1491+ <h4>{{ sponsor.name }} ({{ sponsor.years }})</h4>
1492+ <img src="{{ sponsor.image_path }}">
1493+ <p>{{ sponsor.description }}</p>
1494+ <p></p>
1495+ </div>
1496+ {% endfor %}
1497+ </div>
1498+ <div class="break"></div>
1499+{% endblock %}
1500
1501=== added file 'umonya/content/urls.py'
1502--- umonya/content/urls.py 1970-01-01 00:00:00 +0000
1503+++ umonya/content/urls.py 2011-07-24 15:31:18 +0000
1504@@ -0,0 +1,16 @@
1505+from django.conf.urls.defaults import include, patterns
1506+from django.views.generic.simple import direct_to_template
1507+
1508+urlpatterns = patterns(
1509+ 'umonya.content.views',
1510+
1511+ (r'^sponsors' , 'sponsors'),
1512+
1513+ # Direct to template
1514+ (r'^$' , direct_to_template, {'template':'home.html'}),
1515+ (r'^contact-us' , direct_to_template, {'template':'contact-us.html'}),
1516+ (r'^get-involved' , direct_to_template, {'template':'get-involved.html'}),
1517+ (r'^media' , direct_to_template, {'template':'media.html'}),
1518+ (r'^resources' , direct_to_template, {'template':'resources.html'}),
1519+ (r'^about-us' , direct_to_template, {'template':'about-us.html'}),
1520+)
1521
1522=== added file 'umonya/content/views.py'
1523--- umonya/content/views.py 1970-01-01 00:00:00 +0000
1524+++ umonya/content/views.py 2011-07-24 15:31:18 +0000
1525@@ -0,0 +1,11 @@
1526+from annoying.decorators import render_to
1527+
1528+from umonya.content.models import Sponsor
1529+
1530+
1531+@render_to('sponsors.html')
1532+def sponsors(request):
1533+ return {
1534+ 'sponsors': Sponsor.objects.filter(type='Sponsor'),
1535+ 'collaborators': Sponsor.objects.filter(type='Collaborator'),
1536+ }
1537
1538=== removed file 'umonya/form.html'
1539--- umonya/form.html 2011-02-13 09:56:46 +0000
1540+++ umonya/form.html 1970-01-01 00:00:00 +0000
1541@@ -1,10 +0,0 @@
1542-{% extends "base.html" %}
1543-
1544-{% block content %}
1545-<form action="." method="post">
1546- <table class="form">
1547- {{ form }}
1548- </table>
1549- <input type="submit" value="submit" />
1550-</form>
1551-{% endblock %}
1552
1553=== modified file 'umonya/manage.py'
1554--- umonya/manage.py 2011-02-13 09:56:46 +0000
1555+++ umonya/manage.py 2011-07-24 15:31:18 +0000
1556@@ -1,4 +1,4 @@
1557-#!/usr/bin/python
1558+#!/usr/bin/python2
1559 from django.core.management import execute_manager
1560 try:
1561 import settings # Assumed to be in the same directory.
1562
1563=== modified file 'umonya/settings.py'
1564--- umonya/settings.py 2011-02-13 09:56:46 +0000
1565+++ umonya/settings.py 2011-07-24 15:31:18 +0000
1566@@ -1,80 +1,102 @@
1567 # Django settings for umonya project.
1568-
1569+# For settings relevant to deployment, search the document for the word DEPLOY
1570+
1571+import os.path
1572+project_dir = os.path.abspath(os.path.dirname(__file__))
1573+
1574+# DEPLOY set to False
1575 DEBUG = True
1576 TEMPLATE_DEBUG = DEBUG
1577
1578-ADMINS = (
1579- # ('Your Name', 'your_email@domain.com'),
1580-)
1581-
1582-MANAGERS = ADMINS
1583-
1584-DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
1585-DATABASE_NAME = '' # Or path to database file if using sqlite3.
1586-DATABASE_USER = '' # Not used with sqlite3.
1587-DATABASE_PASSWORD = '' # Not used with sqlite3.
1588-DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
1589-DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
1590-
1591-# Local time zone for this installation. Choices can be found here:
1592-# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
1593-# although not all choices may be available on all operating systems.
1594-# If running in a Windows environment this must be set to the same as your
1595-# system time zone.
1596-TIME_ZONE = 'America/Chicago'
1597-
1598-# Language code for this installation. All choices can be found here:
1599-# http://www.i18nguy.com/unicode/language-identifiers.html
1600-LANGUAGE_CODE = 'en-us'
1601-
1602-SITE_ID = 1
1603-
1604-# If you set this to False, Django will make some optimizations so as not
1605-# to load the internationalization machinery.
1606+# DEPLOY set this to the local postgresql or mysql db
1607+DATABASES = {
1608+ 'default': {
1609+ 'ENGINE': 'django.db.backends.sqlite3',
1610+ 'NAME': os.path.join(project_dir, 'umonya.db'),
1611+ 'USER': '',
1612+ 'PASSWORD': '',
1613+ 'HOST': '',
1614+ 'PORT': '',
1615+ }
1616+}
1617+
1618+# Locale
1619+TIME_ZONE = 'Africa/Johannesburg'
1620+LANGUAGE_CODE = 'en-za'
1621 USE_I18N = True
1622+USE_L10N = True
1623
1624-# Absolute path to the directory that holds media.
1625-# Example: "/home/media/media.lawrence.com/"
1626+# User uploaded files variables. Currently not used
1627 MEDIA_ROOT = ''
1628-
1629-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
1630-# trailing slash if there is a path component (optional in other cases).
1631-# Examples: "http://media.lawrence.com", "http://example.com/media/"
1632 MEDIA_URL = ''
1633
1634-# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
1635-# trailing slash.
1636-# Examples: "http://foo.com/media/", "/media/".
1637-ADMIN_MEDIA_PREFIX = '/media/'
1638+# Static file locations. DEPLOY The first two settings should be modified when
1639+# deploying static files to a seperate URL.
1640+STATIC_ROOT = ''
1641+STATIC_URL = '/static/'
1642+ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
1643+STATICFILES_DIRS = ()
1644+STATICFILES_FINDERS = (
1645+ 'django.contrib.staticfiles.finders.FileSystemFinder',
1646+ 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
1647+)
1648
1649-# Make this unique, and don't share it with anybody.
1650+# DEPLOY Change this value for actual deployed sites
1651 SECRET_KEY = 'mn=y5m0vfbcq1m6(84pkoove40&rel_^yzs$te4oq1c8ug^zsr'
1652
1653-# List of callables that know how to import templates from various sources.
1654+# Misc
1655+SITE_ID = 1
1656+ROOT_URLCONF = 'umonya.urls'
1657+ADMINS = (
1658+ ('Umonya Admins', 'admins@umonya.co.za'),
1659+)
1660+MANAGERS = ADMINS
1661+
1662+# Template Settings
1663 TEMPLATE_LOADERS = (
1664- 'django.template.loaders.filesystem.load_template_source',
1665- 'django.template.loaders.app_directories.load_template_source',
1666-# 'django.template.loaders.eggs.load_template_source',
1667-)
1668+ 'django.template.loaders.filesystem.Loader',
1669+ 'django.template.loaders.app_directories.Loader',
1670+)
1671+TEMPLATE_DIRS = (
1672+ os.path.join(project_dir, 'templates'),
1673+)
1674+
1675
1676 MIDDLEWARE_CLASSES = (
1677 'django.middleware.common.CommonMiddleware',
1678 'django.contrib.sessions.middleware.SessionMiddleware',
1679+ 'django.middleware.csrf.CsrfViewMiddleware',
1680 'django.contrib.auth.middleware.AuthenticationMiddleware',
1681 )
1682
1683-ROOT_URLCONF = 'umonya.urls'
1684-
1685-TEMPLATE_DIRS = (
1686- # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
1687- # Always use forward slashes, even on Windows.
1688- # Don't forget to use absolute paths, not relative paths.
1689-)
1690
1691 INSTALLED_APPS = (
1692 'django.contrib.auth',
1693 'django.contrib.contenttypes',
1694 'django.contrib.sessions',
1695 'django.contrib.sites',
1696+ 'django.contrib.staticfiles',
1697+ 'django.contrib.admin',
1698+ 'uni_form',
1699 'umonya.apply',
1700+ 'umonya.content',
1701 )
1702+
1703+
1704+LOGGING = {
1705+ 'version': 1,
1706+ 'disable_existing_loggers': False,
1707+ 'handlers': {
1708+ 'mail_admins': {
1709+ 'level': 'ERROR',
1710+ 'class': 'django.utils.log.AdminEmailHandler'
1711+ }
1712+ },
1713+ 'loggers': {
1714+ 'django.request': {
1715+ 'handlers': ['mail_admins'],
1716+ 'level': 'ERROR',
1717+ 'propagate': True,
1718+ },
1719+ }
1720+}
1721
1722=== added directory 'umonya/templates'
1723=== added file 'umonya/templates/base.html'
1724--- umonya/templates/base.html 1970-01-01 00:00:00 +0000
1725+++ umonya/templates/base.html 2011-07-24 15:31:18 +0000
1726@@ -0,0 +1,43 @@
1727+<!DOCTYPE html>
1728+<html>
1729+ <head>
1730+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1731+ <title>Umonya</title>
1732+ <link href="{{ STATIC_URL }}css/style.css" rel="stylesheet" type="text/css" media="screen">
1733+ {% block extra_head %}{% endblock %}
1734+ </head>
1735+ <body>
1736+ <!-- MENU -->
1737+ <div id="header-wrap">
1738+ <div id="header" class="content-wrap">
1739+ <a href="/"><img src="{{ STATIC_URL }}img/umonya-small.png"></a>
1740+ <ul class="menu no-bullets">
1741+ <li><a href="/get-involved">Get Involved</a></li>
1742+ <li><a href="/media">Media</a></li>
1743+ <li><a href="/about-us">About Us</a></li>
1744+ <li class="last-menu"><a href="/contact-us">Contact Us</a></li>
1745+ </ul>
1746+ <ul class="menu no-bullets">
1747+ <li><a href="/">Home</a></li>
1748+ <li><a href="/events">Events</a></li>
1749+ <li><a href="/sponsors">Sponsors &amp; Collaborators</a></li>
1750+ <li class="last-menu"><a href="/resources">Resources</a></li>
1751+ </ul>
1752+ </div>
1753+ </div>
1754+ <!-- END MENU -->
1755+
1756+ <div id="content" class="content-wrap">
1757+ {% block content %}
1758+
1759+ {% endblock %}
1760+ </div>
1761+
1762+ {% block extra_content %}
1763+
1764+ {% endblock %}
1765+ <div id="footer">
1766+ Copyright &copy; 2011
1767+ </div>
1768+ </body>
1769+</html>
1770
1771=== modified file 'umonya/urls.py'
1772--- umonya/urls.py 2011-02-13 09:56:46 +0000
1773+++ umonya/urls.py 2011-07-24 15:31:18 +0000
1774@@ -1,19 +1,17 @@
1775-from django.conf.urls.defaults import *
1776-from umonya.apply.views import *
1777-
1778-# Uncomment the next two lines to enable the admin:
1779-# from django.contrib import admin
1780-# admin.autodiscover()
1781-
1782-urlpatterns = patterns('',
1783- (r'^apply/', include('umonya.apply.urls')),
1784- # Example:
1785- # (r'^umonya/', include('umonya.foo.urls')),
1786-
1787- # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
1788- # to INSTALLED_APPS to enable admin documentation:
1789- # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
1790-
1791- # Uncomment the next line to enable the admin:
1792- # (r'^admin/', include(admin.site.urls)),
1793+from django.conf import settings
1794+from django.conf.urls.defaults import include, patterns
1795+from django.contrib import admin
1796+from django.contrib.staticfiles.urls import staticfiles_urlpatterns
1797+
1798+admin.autodiscover()
1799+
1800+urlpatterns = patterns(
1801+ '',
1802+
1803+ (r'', include('umonya.content.urls')),
1804+ (r'^events/', include('umonya.apply.urls')),
1805+
1806+ (r'^admin/', include(admin.site.urls)),
1807 )
1808+
1809+urlpatterns += staticfiles_urlpatterns()

Subscribers

People subscribed via source and target branches