From 3142cc333154fe5cf255861fb1441335b30c4632 Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Fri, 22 Jul 2011 15:31:38 +0200 Subject: [PATCH 01/17] started to improve the traffic lights --- .../dsv/scipro/basepanels/MainMenuPanel.java | 4 + .../checklists/panels/TrafficLightPanel.html | 21 ++++++ .../checklists/panels/TrafficLightPanel.java | 74 +++++++++++++++++++ .../scipro/project/pages/SelfCheckPage.html | 9 +++ .../scipro/project/pages/SelfCheckPage.java | 19 +++++ .../project/panels/ProjectTabMenuPanel.java | 2 + src/main/webapp/css/scipro.css | 4 + 7 files changed, 133 insertions(+) create mode 100644 src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html create mode 100644 src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java create mode 100644 src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html create mode 100644 src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java diff --git a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java b/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java index 5c8eebbf94..d81e73fe2b 100644 --- a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java +++ b/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java @@ -25,7 +25,9 @@ import se.su.dsv.scipro.message.pages.PrivateMessagesPage; import se.su.dsv.scipro.peer.pages.PeerReviewTemplatePage; import se.su.dsv.scipro.project.pages.FinalSeminarProjectListPage; import se.su.dsv.scipro.project.pages.ProjectOppositionPage; +import se.su.dsv.scipro.project.pages.ProjectPartnerPage; import se.su.dsv.scipro.project.pages.ProjectStartPage; +import se.su.dsv.scipro.project.pages.SelfCheckPage; import se.su.dsv.scipro.security.auth.MetaDataActionStrategy; import se.su.dsv.scipro.security.auth.roles.Roles; import se.su.dsv.scipro.supervisor.pages.SupervisorProjectsFinalSeminarPage; @@ -55,6 +57,8 @@ public class MainMenuPanel extends Panel implements IWiQueryPlugin { projectMenuSubItems.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class)); projectMenuSubItems.add(new MenuItem(ProjectOppositionPage.MAIN_MENU_LABEL, ProjectOppositionPage.class)); projectMenuSubItems.add(new MenuItem(FinalSeminarProjectListPage.MAIN_MENU_LABEL, FinalSeminarProjectListPage.class)); + projectMenuSubItems.add(new MenuItem("Project Partner", ProjectPartnerPage.class)); + projectMenuSubItems.add(new MenuItem("Self Check", SelfCheckPage.class)); MainMenuItem projectMenuItem = new MainMenuItem("projectMenuItem", ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class, containerClass, projectMenuSubItems); add(projectMenuItem); diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html new file mode 100644 index 0000000000..a235198823 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<head> +<meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> +</head> +<body> + <wicket:panel> + <div wicket:id="stateOfMindContainer"> + <form wicket:id="form"> + <table wicket:id="group"> + <tr wicket:id="persons"> + <td><input type="radio" wicket:id="radio" /></td> + <td> <img wicket:id="image"/></td> + </tr> + </table> + </form> + </div> + </wicket:panel> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java new file mode 100644 index 0000000000..1aa44102c5 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java @@ -0,0 +1,74 @@ +package se.su.dsv.scipro.checklists.panels; + +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.basic.MultiLineLabel; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.Radio; +import org.apache.wicket.markup.html.form.RadioGroup; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.AbstractReadOnlyModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.spring.injection.annot.SpringBean; +import org.odlabs.wiquery.ui.core.DefaultJsScopeUiEvent; +import org.odlabs.wiquery.ui.slider.Slider; + +import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.data.dao.interfaces.ProjectDao; +import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.enums.StateOfMind; +import se.su.dsv.scipro.knol.resource.page.StaticImage; +import edu.emory.mathcs.backport.java.util.Arrays; + +/** + * @author fnorbe@dsv.su.se + */ + +public class TrafficLightPanel extends Panel { + + + private static final long serialVersionUID = 8862892008428526067L; + + + public TrafficLightPanel(String id, WebPage parent) { + super(id); + WebMarkupContainer stateOfMindContainer = new WebMarkupContainer( + "stateOfMindContainer"); + add(stateOfMindContainer); + + Form<StateOfMind> f = new Form<StateOfMind>("form"); + stateOfMindContainer.add(f); + RadioGroup<StateOfMind> group = new RadioGroup<StateOfMind>("group"); + f.add(group); + + ListView<StateOfMind> persons = new ListView<StateOfMind>("persons", + Arrays.asList(StateOfMind.values())) { + protected void populateItem(ListItem<StateOfMind> item) { + StateOfMind stateOfMind = item.getModelObject(); + item.add(new Radio<StateOfMind>("radio", item.getModel())); + StaticImage image = null; + if (stateOfMind.equals(StateOfMind.FINE)) { + image = new StaticImage("image", new Model<String>( + "images/icons/green_ball_32.png")); + } else if (stateOfMind.equals(StateOfMind.NEEDHELP)) { + image = new StaticImage("image", new Model<String>( + "images/icons/red_ball_32.png")); + } else if (stateOfMind.equals(StateOfMind.NEUTRAL)) { + image = new StaticImage("image", new Model<String>( + "images/icons/yellow_ball_32.png")); + } + item.add(image); + }; + }; + group.add(persons); + } + +} + diff --git a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html b/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html new file mode 100644 index 0000000000..bca333a27b --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<body> +<wicket:extend> + <div wicket:id="trafficLightPanel""></div> +</wicket:extend> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java b/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java new file mode 100644 index 0000000000..2cdae57ca1 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java @@ -0,0 +1,19 @@ +package se.su.dsv.scipro.project.pages; + +import org.apache.wicket.PageParameters; + +import se.su.dsv.scipro.checklists.panels.TrafficLightPanel; + +/** + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +public class SelfCheckPage extends ProjectPage { + + public SelfCheckPage(PageParameters pp) { + super(pp); + add(new TrafficLightPanel("trafficLightPanel", this)); + } + +} diff --git a/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java index b351cbd3c9..719379f0e4 100644 --- a/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java +++ b/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java @@ -18,6 +18,7 @@ import se.su.dsv.scipro.project.pages.ProjectPage; import se.su.dsv.scipro.project.pages.ProjectPartnerPage; import se.su.dsv.scipro.project.pages.ProjectSchedulePlannerPage; import se.su.dsv.scipro.project.pages.ProjectStartPage; +import se.su.dsv.scipro.project.pages.SelfCheckPage; import se.su.dsv.scipro.repository.panels.ProjectFilePanel; /** @@ -47,6 +48,7 @@ public class ProjectTabMenuPanel extends AbstractMenuPanel { itemList.add(new MenuItem("Peer review", ProjectPeerPortalPage.class)); itemList.add(new MenuItem("All Final Seminars", FinalSeminarProjectListPage.class)); itemList.add(new MenuItem("Conference", ProjectConferencePage.class)); + itemList.add(new MenuItem("Self Check", SelfCheckPage.class)); } else { itemList.add(new MenuItem("No active project!", NoActiveProjectPage.class)); itemList.add(new MenuItem("Project Partner", ProjectPartnerPage.class)); diff --git a/src/main/webapp/css/scipro.css b/src/main/webapp/css/scipro.css index 1d5fe781cd..a607f46718 100644 --- a/src/main/webapp/css/scipro.css +++ b/src/main/webapp/css/scipro.css @@ -1053,3 +1053,7 @@ div.wicket-aa ul li.selected { font-size: 1.4em; font-style: strong; } + +body { + font: 0.8em/21px arial,sans-serif; +} From 94133f4bace0d0dab8af9ff300a19c6376b7b857 Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Mon, 25 Jul 2011 14:58:46 +0200 Subject: [PATCH 02/17] added base classes for dynamic checklists --- .../dao/interfaces/CheckListAnswerDao.java | 7 + .../data/dao/interfaces/CheckListDao.java | 7 + .../dao/interfaces/CheckListQuestionDao.java | 7 + .../dao/interfaces/CheckListTemplateDao.java | 8 + .../dao/jpa/CheckListAnswerDaoJPAImp.java | 23 +++ .../data/dao/jpa/CheckListDaoJPAImp.java | 21 +++ .../dao/jpa/CheckListQuestionDaoJPAImp.java | 21 +++ .../dao/jpa/CheckListTemplateDaoJPAImp.java | 23 +++ .../scipro/data/dataobjects/CheckList.java | 140 ++++++++++++++++++ .../data/dataobjects/CheckListAnswer.java | 106 +++++++++++++ .../data/dataobjects/CheckListQuestion.java | 116 +++++++++++++++ .../data/dataobjects/CheckListTemplate.java | 107 +++++++++++++ .../data/enums/CheckListQuestionAnswer.java | 7 + 13 files changed, 593 insertions(+) create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListAnswerDao.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListQuestionDao.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListTemplateDao.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListAnswerDaoJPAImp.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListQuestionDaoJPAImp.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListTemplateDaoJPAImp.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java create mode 100644 src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java create mode 100644 src/main/java/se/su/dsv/scipro/data/enums/CheckListQuestionAnswer.java diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListAnswerDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListAnswerDao.java new file mode 100644 index 0000000000..8fe29de76d --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListAnswerDao.java @@ -0,0 +1,7 @@ +package se.su.dsv.scipro.data.dao.interfaces; + +import se.su.dsv.scipro.data.dataobjects.CheckListAnswer; + +public interface CheckListAnswerDao extends Dao<CheckListAnswer> { + +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java new file mode 100644 index 0000000000..0dab6f8068 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java @@ -0,0 +1,7 @@ +package se.su.dsv.scipro.data.dao.interfaces; + +import se.su.dsv.scipro.data.dataobjects.CheckList; + +public interface CheckListDao extends Dao<CheckList> { + +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListQuestionDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListQuestionDao.java new file mode 100644 index 0000000000..fbf00a0b71 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListQuestionDao.java @@ -0,0 +1,7 @@ +package se.su.dsv.scipro.data.dao.interfaces; + +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; + +public interface CheckListQuestionDao extends Dao<CheckListQuestion> { + +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListTemplateDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListTemplateDao.java new file mode 100644 index 0000000000..24885dffb9 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListTemplateDao.java @@ -0,0 +1,8 @@ +package se.su.dsv.scipro.data.dao.interfaces; + +import se.su.dsv.scipro.data.dataobjects.CheckListTemplate; + + +public interface CheckListTemplateDao extends Dao<CheckListTemplate> { + +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListAnswerDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListAnswerDaoJPAImp.java new file mode 100644 index 0000000000..e30b653abd --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListAnswerDaoJPAImp.java @@ -0,0 +1,23 @@ +package se.su.dsv.scipro.data.dao.jpa; + +import org.springframework.stereotype.Repository; + +import se.su.dsv.scipro.data.dao.interfaces.CheckListAnswerDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListQuestionDao; +import se.su.dsv.scipro.data.dataobjects.CheckListAnswer; +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; + +/** + * + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +@Repository("checkListAnswerDao") +public class CheckListAnswerDaoJPAImp extends AbstractDaoJPAImp<CheckListAnswer> + implements CheckListAnswerDao { + + public CheckListAnswerDaoJPAImp() { + super(CheckListAnswer.class); + } +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java new file mode 100644 index 0000000000..4f0786dd92 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java @@ -0,0 +1,21 @@ +package se.su.dsv.scipro.data.dao.jpa; + +import org.springframework.stereotype.Repository; + +import se.su.dsv.scipro.data.dao.interfaces.CheckListDao; +import se.su.dsv.scipro.data.dataobjects.CheckList; + +/** + * + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +@Repository("checkListDao") +public class CheckListDaoJPAImp extends AbstractDaoJPAImp<CheckList> + implements CheckListDao { + + public CheckListDaoJPAImp() { + super(CheckList.class); + } +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListQuestionDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListQuestionDaoJPAImp.java new file mode 100644 index 0000000000..35eda47251 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListQuestionDaoJPAImp.java @@ -0,0 +1,21 @@ +package se.su.dsv.scipro.data.dao.jpa; + +import org.springframework.stereotype.Repository; + +import se.su.dsv.scipro.data.dao.interfaces.CheckListQuestionDao; +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; + +/** + * + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +@Repository("checkListQuestionDao") +public class CheckListQuestionDaoJPAImp extends AbstractDaoJPAImp<CheckListQuestion> + implements CheckListQuestionDao { + + public CheckListQuestionDaoJPAImp() { + super(CheckListQuestion.class); + } +} diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListTemplateDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListTemplateDaoJPAImp.java new file mode 100644 index 0000000000..12e9a906e9 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListTemplateDaoJPAImp.java @@ -0,0 +1,23 @@ +package se.su.dsv.scipro.data.dao.jpa; + +import org.springframework.stereotype.Repository; + +import se.su.dsv.scipro.data.dao.interfaces.CheckListQuestionDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListTemplateDao; +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; +import se.su.dsv.scipro.data.dataobjects.CheckListTemplate; + +/** + * + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +@Repository("checkListTemplateDao") +public class CheckListTemplateDaoJPAImp extends AbstractDaoJPAImp<CheckListTemplate> + implements CheckListTemplateDao { + + public CheckListTemplateDaoJPAImp() { + super(CheckListTemplate.class); + } +} diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java new file mode 100644 index 0000000000..9629983bbf --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java @@ -0,0 +1,140 @@ +package se.su.dsv.scipro.data.dataobjects; + +import java.util.List; + +import javax.persistence.Cacheable; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +/** + + * @author Fredrik Norberg fnorbe@dsv.su.se + * + */ + +@Entity +@Table(name="checklist") +@Cacheable(true) +@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate +public abstract class CheckList extends LazyDeletableDomainObject{ + + private static final long serialVersionUID = 2959377496669050427L; + + @Id + @GeneratedValue + private Long id; + + @Column(nullable=false) + private String name; + + @ManyToOne(optional=false) + private User creator; + + @Column(nullable=false) + private List<CheckListQuestion> questions; + + @Column(nullable=false) + private ProjectClass level; + + public CheckList() {} + + public CheckList(String name, User creator, ProjectClass level) { + this.name = name; + this.creator = creator; + this.level = level; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getname() { + return name; + } + + public String getName(final int characters) { + String result = name; + if(name.length() > characters) + result = name.substring(0, characters)+".."; + return result; + } + + public void setName(String name) { + this.name = name; + } + + + public void setCreator(User creator) { + this.creator = creator; + } + + public User getCreator() { + return creator; + } + + public List<CheckListQuestion> getquestions(){ + return questions; + } + + public void setquestions(List<CheckListQuestion> questions){ + this.questions=questions; + } + + public void setLevel(ProjectClass level){ + this.level = level; + } + + public ProjectClass getLevel(){ + return level; + } + + @Override + public int hashCode() { + final int weight = 31; + int result = 17; + + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (obj instanceof CheckList){ + + CheckList other = (CheckList) obj; + + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + + return true; + } + return false; + } + + @Override + public String toString() { + return getname(); + } + +} + + \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java new file mode 100644 index 0000000000..c979fecc97 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java @@ -0,0 +1,106 @@ +package se.su.dsv.scipro.data.dataobjects; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EntityManager; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.TypedQuery; + +import org.apache.wicket.markup.html.panel.Panel; + +import se.su.dsv.scipro.data.enums.CheckListQuestionAnswer; +import se.su.dsv.scipro.data.enums.EventStatus; +import se.su.dsv.scipro.schedule.baseevent.panels.EventScheduleDetailsPanel; +import se.su.dsv.scipro.util.IAjaxCallback; + +/** + * @author Fredrik Norberg fnorbe@dsv.su.se + * + */ +@Entity +@Table(name="checklist_answer") +public class CheckListAnswer extends DomainObject{ + + private static final long serialVersionUID = 2959377496669050427L; + + @Id + @GeneratedValue + private Long id; + + @Enumerated(EnumType.STRING) + private CheckListQuestionAnswer answer; + + @ManyToOne + private User user; + + + public CheckListAnswer() {} + + public CheckListAnswer(User user, CheckListQuestionAnswer answer) { + this.user = user; + this.answer = answer; + } + + public CheckListQuestionAnswer getAnswer() { + return answer; + } + + public void setAnswer(CheckListQuestionAnswer answer) { + this.answer = answer; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Override + public int hashCode() { + final int weight = 31; + int result = 17; + + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (obj instanceof CheckListAnswer){ + + CheckListAnswer other = (CheckListAnswer) obj; + + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + + return true; + } + return false; + } + +} \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java new file mode 100644 index 0000000000..fb9d0d90a9 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java @@ -0,0 +1,116 @@ +package se.su.dsv.scipro.data.dataobjects; + +import java.util.List; + +import javax.persistence.Cacheable; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Lob; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +/** + * @author Fredrik Norberg - fnorbe@dsv.su.se + */ + + +@Entity +@Table(name="checklist_question") +@Cacheable(true) +@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate +public abstract class CheckListQuestion extends DomainObject + implements Comparable<CheckListQuestion> { + + private static final long serialVersionUID = 2959377496669050427L; + + @Id + @GeneratedValue + private Long id; + + @Lob + @Column(nullable=false) + private String question; + + @Column(nullable=false) + private int questionNumber; + + @OneToMany + List<CheckListAnswer> answers; + + public CheckListQuestion() {} + + public CheckListQuestion(String question) { + this.question = question; + questionNumber = answers.size() + 1; + } + + public String getQuestion() { + return question; + } + + public void setQuestion(String question) { + this.question = question; + } + + public int getQuestionNumber() { + return questionNumber; + } + + public void setQuestionNumber(int questionNumber) { + this.questionNumber = questionNumber; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Override + public int hashCode() { + final int weight = 31; + int result = 17; + + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (obj instanceof CheckListQuestion){ + + CheckListQuestion other = (CheckListQuestion) obj; + + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + + return true; + } + return false; + } + + @Override + public String toString() { + return getQuestion(); + } + + @Override + public int compareTo(CheckListQuestion other) { + return questionNumber - other.questionNumber; + } +} \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java new file mode 100644 index 0000000000..74a47ffacf --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java @@ -0,0 +1,107 @@ +package se.su.dsv.scipro.data.dataobjects; + +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Lob; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ +@Entity +@Table(name="checklist_template") +public class CheckListTemplate extends DomainObject { + + private static final long serialVersionUID = 2959377496669050427L; + + @Id + @GeneratedValue + private Long id; + + @Column(nullable=false) + private String name; + + @Lob + @ElementCollection + List<String> questions; + + @ManyToOne(optional=false) + private User creator; + + public CheckListTemplate() {} + + public CheckListTemplate(String name, User creator) { + this.name = name; + this.creator = creator; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public void setCreator(User creator) { + this.creator = creator; + } + + public User getCreator() { + return creator; + } + + public List<String> getQuestions(){ + return questions; + } + + public void setQuestions(List<String> questions){ + this.questions = questions; + } + + @Override + public int hashCode() { + final int weight = 31; + int result = 17; + + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (obj instanceof CheckListTemplate){ + + CheckListTemplate other = (CheckListTemplate) obj; + + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + + return true; + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/enums/CheckListQuestionAnswer.java b/src/main/java/se/su/dsv/scipro/data/enums/CheckListQuestionAnswer.java new file mode 100644 index 0000000000..397b191276 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/data/enums/CheckListQuestionAnswer.java @@ -0,0 +1,7 @@ +package se.su.dsv.scipro.data.enums; + +public enum CheckListQuestionAnswer { + RED, + GREEN, + YELLOW +} From 3b25bed168edc1066109467c8c5f2f6e81a6d75e Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Mon, 25 Jul 2011 16:20:36 +0200 Subject: [PATCH 03/17] added daysOffset to projecteventtemplate --- .../data/dataobjects/ProjectEventTemplate.java | 15 +++++++++++++++ .../se/su/dsv/scipro/util/TemplateGenerator.java | 7 ++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEventTemplate.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEventTemplate.java index 38811fcf5b..9e5f128247 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEventTemplate.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/ProjectEventTemplate.java @@ -38,6 +38,9 @@ public class ProjectEventTemplate extends DomainObject implements Comparable<Pro @Column(nullable=false) private long estimatedTimeConsumption = 0; + @Column(nullable=false) + private int daysOffset; + @Column(nullable=false) private boolean requireHandIn = false; @@ -46,6 +49,10 @@ public class ProjectEventTemplate extends DomainObject implements Comparable<Pro public ProjectEventTemplate(){} + public ProjectEventTemplate(int daysOffset){ + this.daysOffset = daysOffset; + } + public Long getId() { return id; } @@ -53,6 +60,14 @@ public class ProjectEventTemplate extends DomainObject implements Comparable<Pro public void setId(Long id) { this.id = id; } + + public void setdaysOffset(int daysOffset){ + this.daysOffset = daysOffset; + } + + public int getDaysOffset(){ + return daysOffset; + } public String getTitle() { return title; diff --git a/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java b/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java index 5ef62a4209..88b60484a9 100644 --- a/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java +++ b/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java @@ -38,6 +38,7 @@ public class TemplateGenerator { //based on ScheduleGenerator private int templateEstimatedDays = 0; private int durationInDays = 0; + private int daysOffset; private DateMidnight startDate; @@ -58,10 +59,6 @@ public class TemplateGenerator { //based on ScheduleGenerator }else{ this.startDate = new DateMidnight(projectEvents.first().getDueDate()); } - - - - } public ScheduleTemplate generate(){ @@ -93,7 +90,7 @@ public class TemplateGenerator { //based on ScheduleGenerator pet.setNumberInOrder(counter); pet.setRequireHandIn(pe.isRequireHandIn()); pet.setScheduleTemplate(template); - + måste få in daysOffset i projectEventTemplate datePointer = datePointer.plusDays(durationInDays); templateEstimatedDays += durationInDays; From 3a7314ed61481eae5d8cfa9af9ee69cb94744671 Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Tue, 26 Jul 2011 17:24:26 +0200 Subject: [PATCH 04/17] started to add paralell schedule events --- .../su/dsv/scipro/data/dataobjects/Event.java | 10 +++++-- .../su/dsv/scipro/util/ScheduleGenerator.java | 18 +++++++++++++ .../su/dsv/scipro/util/TemplateGenerator.java | 26 ++++++++++++++++--- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java index de3d93992e..ca75e3d9f3 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java @@ -155,9 +155,15 @@ public abstract class Event extends LazyDeletableDomainObject @Override public int compareTo(Event other) { int dcomp = dueDate.compareTo(other.dueDate); - if(dcomp == 0) + if(dcomp == 0){ + /*if(id == null){ + return -1; + } + else if (other.id == null){ + return 1; + }*/ return id.compareTo(other.id); - else + }else return dcomp; } diff --git a/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java b/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java index 527ba60e47..90c11c461a 100644 --- a/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java +++ b/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java @@ -11,7 +11,10 @@ import org.joda.time.DateMidnight; import org.joda.time.DateTimeConstants; import org.joda.time.Days; +import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.data.dao.interfaces.EventDao; import se.su.dsv.scipro.data.dao.interfaces.ProjectDao; +import se.su.dsv.scipro.data.dao.interfaces.ProjectEventDao; import se.su.dsv.scipro.data.dao.interfaces.ScheduleTemplateDao; import se.su.dsv.scipro.data.dataobjects.Project; import se.su.dsv.scipro.data.dataobjects.ProjectEvent; @@ -27,6 +30,9 @@ public class ScheduleGenerator { @SpringBean private ProjectDao projectDao; + @SpringBean + private ProjectEventDao projectEventDao; + private Project project; private ScheduleTemplate template; private List<ProjectEventTemplate> eventTemplates; @@ -72,11 +78,16 @@ public class ScheduleGenerator { List<ProjectEvent> events = new ArrayList<ProjectEvent>(); DateMidnight datePointer = new DateMidnight(startDate); + DateMidnight tempPointer; int totalDuration = 0; for(ProjectEventTemplate e : eventTemplates){ + tempPointer = datePointer; ProjectEvent event = e.createEventFromTemplate(); event.setParticipants(project.getProjectParticipants()); + if(e.getEstimatedTimeConsumption() < 1){ + datePointer = new DateMidnight(startDate).plusDays(e.getDaysOffset()); + } double duration = (double) e.getEstimatedTimeConsumption() * ratio; if(duration < 1.0) duration = 1.0; @@ -93,7 +104,14 @@ public class ScheduleGenerator { } } event.setDueDate(datePointer.toDate()); + event.setCreator(SciProSession.get().getUser()); + event.setProjectSchedule(projectSchedule); + event = projectEventDao.save(event); events.add(event); + + + datePointer = tempPointer; + System.out.println(event); } return new ScheduleGeneratorResult(template, events, totalDuration, templateEstimatedDays, startDate.toDate(), endDate.toDate()); } diff --git a/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java b/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java index 88b60484a9..b493c4068d 100644 --- a/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java +++ b/src/main/java/se/su/dsv/scipro/util/TemplateGenerator.java @@ -57,7 +57,8 @@ public class TemplateGenerator { //based on ScheduleGenerator if(schedule.getStartDate() != null){ this.startDate = new DateMidnight(schedule.getStartDate()); }else{ - this.startDate = new DateMidnight(projectEvents.first().getDueDate()); + int days = (new DateMidnight(projectEvents.first().getDueDate()).getDayOfYear() - new DateMidnight(schedule.getStartDate()).getDayOfYear()); + this.startDate = new DateMidnight(projectEvents.first().getDueDate()).minusDays(days); } } @@ -90,10 +91,13 @@ public class TemplateGenerator { //based on ScheduleGenerator pet.setNumberInOrder(counter); pet.setRequireHandIn(pe.isRequireHandIn()); pet.setScheduleTemplate(template); - måste få in daysOffset i projectEventTemplate + + int daysOffset = (new DateMidnight(pe.getDueDate()).getDayOfYear() - startDate.getDayOfYear()); + + pet.setdaysOffset(daysOffset); datePointer = datePointer.plusDays(durationInDays); - templateEstimatedDays += durationInDays; + setTemplateEstimatedDays(getTemplateEstimatedDays() + durationInDays); projectEventTemplate.add(pet); } @@ -155,5 +159,21 @@ public class TemplateGenerator { //based on ScheduleGenerator this.startDate = new DateMidnight(startDate); } + public int getTemplateEstimatedDays() { + return templateEstimatedDays; + } + + public void setTemplateEstimatedDays(int templateEstimatedDays) { + this.templateEstimatedDays = templateEstimatedDays; + } + + public int getDaysOffset() { + return daysOffset; + } + + public void setDaysOffset(int daysOffset) { + this.daysOffset = daysOffset; + } + } From 2bcb9d03ba5479441848bad7e48c709ba79833ac Mon Sep 17 00:00:00 2001 From: Fredrik Norberg <fnorbe@dsv.su.se> Date: Wed, 27 Jul 2011 11:29:55 +0200 Subject: [PATCH 05/17] a new version of saving schedules as templates that supports simultaneus events --- .../su/dsv/scipro/data/dataobjects/Event.java | 12 +----------- .../su/dsv/scipro/util/ScheduleGenerator.java | 18 ++++++------------ 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java index ca75e3d9f3..413633c472 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java @@ -154,17 +154,7 @@ public abstract class Event extends LazyDeletableDomainObject @Override public int compareTo(Event other) { - int dcomp = dueDate.compareTo(other.dueDate); - if(dcomp == 0){ - /*if(id == null){ - return -1; - } - else if (other.id == null){ - return 1; - }*/ - return id.compareTo(other.id); - }else - return dcomp; + return (int) (dueDate.getTime() - other.dueDate.getTime()); } public Panel getDisplayPanel(String id){ diff --git a/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java b/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java index 90c11c461a..29252357f4 100644 --- a/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java +++ b/src/main/java/se/su/dsv/scipro/util/ScheduleGenerator.java @@ -82,15 +82,13 @@ public class ScheduleGenerator { int totalDuration = 0; for(ProjectEventTemplate e : eventTemplates){ - tempPointer = datePointer; + tempPointer = new DateMidnight(datePointer); ProjectEvent event = e.createEventFromTemplate(); - event.setParticipants(project.getProjectParticipants()); - if(e.getEstimatedTimeConsumption() < 1){ + event.setParticipants(project.getProjectParticipants());//might have to remove this + if(e.getEstimatedTimeConsumption() <= 1){ datePointer = new DateMidnight(startDate).plusDays(e.getDaysOffset()); } double duration = (double) e.getEstimatedTimeConsumption() * ratio; - if(duration < 1.0) - duration = 1.0; datePointer = datePointer.plusDays((int) duration); totalDuration += (int)duration; @@ -104,14 +102,10 @@ public class ScheduleGenerator { } } event.setDueDate(datePointer.toDate()); - event.setCreator(SciProSession.get().getUser()); - event.setProjectSchedule(projectSchedule); - event = projectEventDao.save(event); events.add(event); - - - datePointer = tempPointer; - System.out.println(event); + if(e.getEstimatedTimeConsumption() <= 1){ + datePointer = tempPointer; + } } return new ScheduleGeneratorResult(template, events, totalDuration, templateEstimatedDays, startDate.toDate(), endDate.toDate()); } From 9f59204df8618d9adbd19d97befbe467f0107411 Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Wed, 27 Jul 2011 15:38:45 +0200 Subject: [PATCH 06/17] Future-proofing of final-seminar file paths Change-Id: Ib2c46c6015c7f42454bb04129309ad96e214aefe --- .../FinalSeminarUploadControllerImpl.java | 27 +++++++----- .../data/dataobjects/FileDescription.java | 4 ++ .../dsv/scipro/repository/FileRepository.java | 12 ++++++ .../scipro/repository/FileRepositoryImpl.java | 42 ++++++++++++------- .../repository/panels/AbstractFilePanel.java | 22 ++++++---- 5 files changed, 73 insertions(+), 34 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java index ab1d88b066..c010bb8378 100644 --- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java +++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java @@ -84,13 +84,15 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr public void deleteSeminarFilesRecursive(final FinalSeminar seminar) throws FileStorageException { if (seminar.getDocument() != null) { - delete(getRepositorySeminarPath(seminar)); + //delete(getRepositorySeminarPath(seminar)); Use of deprecated path/method + delete(seminar.getDocument().getPath()); } } public void deleteOpponentFiles(final FinalSeminarOpposition opp) throws FileStorageException { if (opp.getOpponentReport() != null) { - delete(getRepositoryOppositionPath(opp)); + //delete(getRepositoryOppositionPath(opp)); Use of deprecated path/method + delete(opp.getOpponentReport().getPath()); } } @@ -139,7 +141,8 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr throw new RuntimeException("The file must be a PDF"); } - String path = getRepositorySeminarPath(seminar); + //String path = getRepositorySeminarPath(seminar); Deprecated method call + String path = fileRepository.getFinalSeminarPath(seminar.getId()); FileDescription fd = null; try { fd = store(upload, path); @@ -200,8 +203,9 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr throw new IllegalStateException("Non other than the opponent can upload an opposition"); } FileDescription fd = null; - String path = getRepositoryOppositionPath(opposition); - + //String path = getRepositoryOppositionPath(opposition); Deprecated method call + String path = fileRepository.getFinalSeminarOppositionPath(opposition.getId()); + try { fd = store(upload, path); fd = fileDescriptionDao.save(fd); @@ -239,7 +243,11 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr throw new Exception(e); } } - + +/* + * The following two methods are deprecated and should not be used, they are left here because the + * production system has data generated using these old path-methods. //MP + * private String getRepositorySeminarPath(FinalSeminar seminar) { return fileRepository.getRepositoryRootPath() + FINAL_SEMINAR_DIRECTORY + String.valueOf(seminar.getId()) + "/"; @@ -249,11 +257,8 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr return getRepositorySeminarPath(o.getFinalSeminar()) + FINAL_SEMINAR_OPPOSITION_DIRECTORY + String.valueOf(o.getId()) + "/"; } - - - - - +*/ + } diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/FileDescription.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/FileDescription.java index 95487ca2f7..78229a9600 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/FileDescription.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/FileDescription.java @@ -2,7 +2,9 @@ package se.su.dsv.scipro.data.dataobjects; import java.util.Date; +import javax.persistence.Basic; import javax.persistence.Cacheable; +import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @@ -24,6 +26,7 @@ import org.hibernate.annotations.Index; public class FileDescription extends DomainObject implements Comparable<FileDescription>{ private static final long serialVersionUID = 1L; + public static final int PATH_MAX_LENGTH = 255; @Id @GeneratedValue @@ -35,6 +38,7 @@ public class FileDescription extends DomainObject implements Comparable<FileDesc @Index(name="file_description_identifier_index") //Hibernate specific, just for performance private String identifier; @Index(name="file_description_path_index") //Hibernate specific, just for performance + @Column(length=PATH_MAX_LENGTH) private String path; private Long userId = null; private Long size; diff --git a/src/main/java/se/su/dsv/scipro/repository/FileRepository.java b/src/main/java/se/su/dsv/scipro/repository/FileRepository.java index 074f609cab..daa5bc191f 100644 --- a/src/main/java/se/su/dsv/scipro/repository/FileRepository.java +++ b/src/main/java/se/su/dsv/scipro/repository/FileRepository.java @@ -161,6 +161,18 @@ public interface FileRepository { * @return */ String getResourcePath(Long fileResourceId); + /** + * Get the repository path associated with a certain FinalSeminar + * @param finalSeminarId + * @return + */ + String getFinalSeminarPath(Long finalSeminarId); + /** + * Get the repository path associated with a certain FinalSeminarOpposition + * @param finalSeminarOppositionId + * @return + */ + String getFinalSeminarOppositionPath(Long finalSeminarOppositionId); /** * Convenience method to sort folders according to the input parameters * @param list diff --git a/src/main/java/se/su/dsv/scipro/repository/FileRepositoryImpl.java b/src/main/java/se/su/dsv/scipro/repository/FileRepositoryImpl.java index 430c635031..ba01f48d6a 100644 --- a/src/main/java/se/su/dsv/scipro/repository/FileRepositoryImpl.java +++ b/src/main/java/se/su/dsv/scipro/repository/FileRepositoryImpl.java @@ -62,14 +62,19 @@ import eu.medsea.mimeutil.detector.ExtensionMimeDetector; @Repository public class FileRepositoryImpl implements FileRepository { + protected static final int STANDARD_INTERVAL_LENGTH = 100; protected static final String ROOT_PATH = "root/"; protected static final String PROJECTS_PATH = "projects/"; protected static final String RESOURCES_PATH = "resources/"; + protected static final String FINAL_SEMINAR_ROOT_PATH = "final_seminars/"; + protected static final String FINAL_SEMINARS_PATH = "final_seminar_reports/"; + protected static final String FINAL_SEMINAR_OPPOSITION_REPORT_PATH = "opposition_reports/"; @Autowired(required=false) private RepositoryManager repositoryManager; public String storeFile(String name, String mimeType, InputStream fileStream) { + if (StringUtils.isEmpty(name)) { return null; } @@ -89,6 +94,9 @@ public class FileRepositoryImpl implements FileRepository { Node folder = RepositoryHelper.findOrCreateFolder(session, splitWithoutFile, rootNode); Node file = folder.addNode(itemName, "nt:file"); + if( file.getPath().length() > FileDescription.PATH_MAX_LENGTH ){ + throw new IllegalStateException("Trying to store a node with a path length that is too long"); + } file.addMixin("sp:fileMixin"); Node fileContent = file.addNode ("jcr:content", "nt:resource"); fileContent.addMixin("mix:referenceable"); @@ -384,35 +392,37 @@ public class FileRepositoryImpl implements FileRepository { } public String getProjectRootPath(Long projectId){ - return ROOT_PATH+PROJECTS_PATH+getProjectSubFolder(projectId); + return ROOT_PATH+PROJECTS_PATH+getIntervalSubFolder(projectId, STANDARD_INTERVAL_LENGTH); + } + + public String getFinalSeminarPath(Long finalSeminarId){ + return ROOT_PATH+FINAL_SEMINAR_ROOT_PATH+FINAL_SEMINARS_PATH+getIntervalSubFolder(finalSeminarId, STANDARD_INTERVAL_LENGTH); + } + + public String getFinalSeminarOppositionPath(Long finalSeminarOppositionId){ + return ROOT_PATH+FINAL_SEMINAR_ROOT_PATH+FINAL_SEMINAR_OPPOSITION_REPORT_PATH+getIntervalSubFolder(finalSeminarOppositionId, STANDARD_INTERVAL_LENGTH); } /** - * Method used to split the projects folder into subfolders containing projects. Precaution because jackrabbit can + * Method used to split the folders into subfolders containing for example projects. Precaution because jackrabbit can * get slow when faced with huge number of subnodes in one node (10.000+). - * @param projectId id of the project, for example 54 + * @param id id of the domain object used as key, for example projectId, for example 54 + * @param intervalLength, should be a CONSTANT for any given uses * @return result looking like for example: "0-99/54 */ - protected String getProjectSubFolder(Long projectId){ - int intervalLength = 100; - Long startId = ( projectId / intervalLength ) * intervalLength; + protected String getIntervalSubFolder(final Long id, final int intervalLength){ + if(id == null) + throw new IllegalStateException("Attempting to calculate a repository path using a null-id, that's not allowed!"); + Long startId = ( id / intervalLength ) * intervalLength; Long endId = startId + intervalLength - 1; - String result = startId.toString() + "-" + endId.toString() + "/" + projectId.toString() +"/"; + String result = startId.toString() + "-" + endId.toString() + "/" + id.toString() +"/"; return result; } public String getResourcePath(Long fileResourceId){ if(fileResourceId == null) throw new NullPointerException("Null value for FileResource-id cannot generate a valid path to store a file resource!"); - return ROOT_PATH+RESOURCES_PATH+getResourceSubFolder(fileResourceId); - } - - protected String getResourceSubFolder(Long fileResourceId){ - int intervalLength = 1000; - Long startId = ( fileResourceId / intervalLength ) * intervalLength; - Long endId = startId + intervalLength - 1; - String result = startId.toString() + "-" + endId.toString() + "/" + fileResourceId.toString() +"/"; - return result; + return ROOT_PATH+RESOURCES_PATH+getIntervalSubFolder(fileResourceId, 1000); //TODO If resources are ever used with files, make this a static constant } @Override diff --git a/src/main/java/se/su/dsv/scipro/repository/panels/AbstractFilePanel.java b/src/main/java/se/su/dsv/scipro/repository/panels/AbstractFilePanel.java index 038c32e308..1b511bd941 100644 --- a/src/main/java/se/su/dsv/scipro/repository/panels/AbstractFilePanel.java +++ b/src/main/java/se/su/dsv/scipro/repository/panels/AbstractFilePanel.java @@ -416,13 +416,21 @@ public abstract class AbstractFilePanel extends Panel { protected void onSubmit() { final FileUpload upload = fileUploadField.getFileUpload(); - fileRepository.storeFile(upload, absolutePath); - - setRedirect(true); - - pp.put("i", relativePath.replaceAll("/", ".")); - - setResponsePage(fpc.getSurroundingPageClass(), pp); + try{ + fileRepository.storeFile(upload, absolutePath); + + setRedirect(true); + pp.put("i", relativePath.replaceAll("/", ".")); + setResponsePage(fpc.getSurroundingPageClass(), pp); + + } catch (FileStorageException fse){ + if(fse.getCause().getClass().equals(IllegalStateException.class)){ + error("Cannot save file into this directory, the resulting path is to long/deep. Try a shorter name or a different directory."); + } + else{ + error(fse.getMessage()); + } + } } } } From fb978419a109d3966d230a4cec2b6a00ecadab84 Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Wed, 27 Jul 2011 15:57:44 +0200 Subject: [PATCH 07/17] Some minor annotation fixes Change-Id: Ibd5ca02a67c6f3e8eccd34062e3faa086d5727f6 --- .../se/su/dsv/scipro/data/dataobjects/FileDescription.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/FileDescription.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/FileDescription.java index 78229a9600..b807e0d814 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/FileDescription.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/FileDescription.java @@ -2,7 +2,6 @@ package se.su.dsv.scipro.data.dataobjects; import java.util.Date; -import javax.persistence.Basic; import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; @@ -32,10 +31,13 @@ public class FileDescription extends DomainObject implements Comparable<FileDesc @GeneratedValue private Long id; + @Column(length=255) private String name; private Date targetLastModified; + @Column(length=255) private String mimeType; @Index(name="file_description_identifier_index") //Hibernate specific, just for performance + @Column(length=255) private String identifier; @Index(name="file_description_path_index") //Hibernate specific, just for performance @Column(length=PATH_MAX_LENGTH) From 37387ee4a38192339ef204457479adaa74063523 Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Wed, 27 Jul 2011 16:46:53 +0200 Subject: [PATCH 08/17] checklist data classes --- .../data/dao/interfaces/CheckListDao.java | 4 + .../data/dao/jpa/CheckListDaoJPAImp.java | 33 ++++- .../scipro/data/dataobjects/CheckList.java | 131 +++++++++--------- .../data/dataobjects/CheckListAnswer.java | 68 +++++---- .../data/dataobjects/CheckListQuestion.java | 63 ++++++--- .../data/dataobjects/CheckListTemplate.java | 21 ++- 6 files changed, 202 insertions(+), 118 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java index 0dab6f8068..4c5058033e 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java @@ -1,7 +1,11 @@ package se.su.dsv.scipro.data.dao.interfaces; +import java.util.List; + import se.su.dsv.scipro.data.dataobjects.CheckList; +import se.su.dsv.scipro.data.dataobjects.Project; public interface CheckListDao extends Dao<CheckList> { + public List<CheckList> findCheckLists(final Project project); } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java index 4f0786dd92..94994e3311 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java @@ -1,9 +1,20 @@ package se.su.dsv.scipro.data.dao.jpa; +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.persistence.PersistenceException; +import javax.persistence.TypedQuery; + +import org.hibernate.ejb.QueryHints; +import org.springframework.orm.jpa.JpaCallback; import org.springframework.stereotype.Repository; import se.su.dsv.scipro.data.dao.interfaces.CheckListDao; import se.su.dsv.scipro.data.dataobjects.CheckList; +import se.su.dsv.scipro.data.dataobjects.Project; /** * @@ -12,10 +23,28 @@ import se.su.dsv.scipro.data.dataobjects.CheckList; */ @Repository("checkListDao") -public class CheckListDaoJPAImp extends AbstractDaoJPAImp<CheckList> - implements CheckListDao { +public class CheckListDaoJPAImp extends AbstractDaoJPAImp<CheckList> implements CheckListDao { public CheckListDaoJPAImp() { super(CheckList.class); } + + public List<CheckList> findCheckLists(final Project project) { + return getJpaTemplate().execute(new JpaCallback<List<CheckList>>() { + public List<CheckList> doInJpa(EntityManager em) throws PersistenceException { + String q = "select s " + "from CheckList s " + "where s.project = :project"; + + TypedQuery<CheckList> query = em.createQuery(q, CheckList.class); + query.setParameter("project", project); + query.setHint(QueryHints.HINT_CACHEABLE, "true"); + try { + return query.getResultList(); + } catch (NoResultException e) { + return new ArrayList<CheckList>(); + } + + } + + }); + } } diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java index 9629983bbf..a44465e669 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java @@ -1,6 +1,7 @@ package se.su.dsv.scipro.data.dataobjects; -import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; import javax.persistence.Cacheable; import javax.persistence.Column; @@ -8,49 +9,52 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.Sort; +import org.hibernate.annotations.SortType; /** - - * @author Fredrik Norberg fnorbe@dsv.su.se - * + * + * @author Fredrik Norberg fnorbe@dsv.su.se + * */ @Entity -@Table(name="checklist") +@Table(name = "checklist") @Cacheable(true) -@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate -public abstract class CheckList extends LazyDeletableDomainObject{ +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +// Hibernate +public class CheckList extends DomainObject { private static final long serialVersionUID = 2959377496669050427L; - + @Id @GeneratedValue private Long id; - - @Column(nullable=false) + + @Column(nullable = false) private String name; + + @ManyToOne(optional = false) + private Project project; + - @ManyToOne(optional=false) - private User creator; - - @Column(nullable=false) - private List<CheckListQuestion> questions; - - @Column(nullable=false) - private ProjectClass level; - - public CheckList() {} - - public CheckList(String name, User creator, ProjectClass level) { - this.name = name; - this.creator = creator; - this.level = level; + @OneToMany + @Sort(type = SortType.NATURAL) + private SortedSet<CheckListQuestion> questions = new TreeSet<CheckListQuestion>(); + + public CheckList() { } - + + public CheckList(String name, Project project) { + this.name = name; + this.project = project; + } + public Long getId() { return id; } @@ -59,66 +63,59 @@ public abstract class CheckList extends LazyDeletableDomainObject{ this.id = id; } - public String getname() { - return name; - } - - public String getName(final int characters) { - String result = name; - if(name.length() > characters) - result = name.substring(0, characters)+".."; - return result; - } - public void setName(String name) { this.name = name; } - - - public void setCreator(User creator) { - this.creator = creator; - } - public User getCreator() { - return creator; - } - - public List<CheckListQuestion> getquestions(){ + /** + * @return the questions + */ + public SortedSet<CheckListQuestion> getQuestions() { return questions; } - - public void setquestions(List<CheckListQuestion> questions){ - this.questions=questions; + + /** + * @param questions + * the questions to set + */ + public void setQuestions(SortedSet<CheckListQuestion> questions) { + this.questions = questions; } - - public void setLevel(ProjectClass level){ - this.level = level; + + /** + * @return the project + */ + public Project getProject() { + return project; } - - public ProjectClass getLevel(){ - return level; + + /** + * @param project the project to set + */ + public void setProject(Project project) { + this.project = project; } - + @Override public int hashCode() { final int weight = 31; int result = 17; - + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); return result; } - + @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; - if (obj instanceof CheckList){ - + if (obj instanceof CheckList) { + CheckList other = (CheckList) obj; - + if (id == null) { if (other.id != null) return false; @@ -130,11 +127,11 @@ public abstract class CheckList extends LazyDeletableDomainObject{ return false; } - @Override - public String toString() { - return getname(); + /** + * @return the name + */ + public String getName() { + return name; } } - - \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java index c979fecc97..3045baded3 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java @@ -1,53 +1,55 @@ package se.su.dsv.scipro.data.dataobjects; -import java.util.Date; - import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.EntityManager; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.Table; -import javax.persistence.TypedQuery; - -import org.apache.wicket.markup.html.panel.Panel; import se.su.dsv.scipro.data.enums.CheckListQuestionAnswer; -import se.su.dsv.scipro.data.enums.EventStatus; -import se.su.dsv.scipro.schedule.baseevent.panels.EventScheduleDetailsPanel; -import se.su.dsv.scipro.util.IAjaxCallback; /** - * @author Fredrik Norberg fnorbe@dsv.su.se - * + * @author Fredrik Norberg fnorbe@dsv.su.se + * */ @Entity -@Table(name="checklist_answer") -public class CheckListAnswer extends DomainObject{ +@Table(name = "checklist_answer") +public class CheckListAnswer extends DomainObject { private static final long serialVersionUID = 2959377496669050427L; - + @Id @GeneratedValue private Long id; - + @Enumerated(EnumType.STRING) + @Column(nullable=false) private CheckListQuestionAnswer answer; - - @ManyToOne + + @ManyToOne(optional=false) private User user; - - public CheckListAnswer() {} - + @Lob + private String comment; + + public CheckListAnswer() { + } + public CheckListAnswer(User user, CheckListQuestionAnswer answer) { this.user = user; this.answer = answer; } + public CheckListAnswer(User user, CheckListQuestionAnswer answer, String comment) { + this.user = user; + this.answer = answer; + this.comment = comment; + } + public CheckListQuestionAnswer getAnswer() { return answer; } @@ -71,27 +73,43 @@ public class CheckListAnswer extends DomainObject{ public void setId(Long id) { this.id = id; } + + + + /** + * @return the comment + */ + public String getComment() { + return comment; + } + + /** + * @param comment the comment to set + */ + public void setComment(String comment) { + this.comment = comment; + } @Override public int hashCode() { final int weight = 31; int result = 17; - + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); return result; } - + @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; - if (obj instanceof CheckListAnswer){ - + if (obj instanceof CheckListAnswer) { + CheckListAnswer other = (CheckListAnswer) obj; - + if (id == null) { if (other.id != null) return false; diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java index fb9d0d90a9..c81037bd91 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java @@ -1,5 +1,6 @@ package se.su.dsv.scipro.data.dataobjects; +import java.util.ArrayList; import java.util.List; import javax.persistence.Cacheable; @@ -18,37 +19,37 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; * @author Fredrik Norberg - fnorbe@dsv.su.se */ - @Entity -@Table(name="checklist_question") +@Table(name = "checklist_question") @Cacheable(true) -@Cache(usage= CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) //Hibernate -public abstract class CheckListQuestion extends DomainObject - implements Comparable<CheckListQuestion> { +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class CheckListQuestion extends DomainObject implements + Comparable<CheckListQuestion> { private static final long serialVersionUID = 2959377496669050427L; - + @Id @GeneratedValue private Long id; - + @Lob - @Column(nullable=false) + @Column(nullable = false) private String question; - - @Column(nullable=false) + + @Column(nullable = false) private int questionNumber; - + @OneToMany - List<CheckListAnswer> answers; - - public CheckListQuestion() {} - + private List<CheckListAnswer> answers = new ArrayList<CheckListAnswer>(1); + + public CheckListQuestion() { + } + public CheckListQuestion(String question) { this.question = question; questionNumber = answers.size() + 1; } - + public String getQuestion() { return question; } @@ -64,7 +65,7 @@ public abstract class CheckListQuestion extends DomainObject public void setQuestionNumber(int questionNumber) { this.questionNumber = questionNumber; } - + public Long getId() { return id; } @@ -72,27 +73,43 @@ public abstract class CheckListQuestion extends DomainObject public void setId(Long id) { this.id = id; } + + + + /** + * @return the answers + */ + public List<CheckListAnswer> getAnswers() { + return answers; + } + + /** + * @param answers the answers to set + */ + public void setAnswers(List<CheckListAnswer> answers) { + this.answers = answers; + } @Override public int hashCode() { final int weight = 31; int result = 17; - + result = weight * result + ((id == null) ? 0 : (int) (id ^ (id >>> 32))); return result; } - + @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; - if (obj instanceof CheckListQuestion){ - + if (obj instanceof CheckListQuestion) { + CheckListQuestion other = (CheckListQuestion) obj; - + if (id == null) { if (other.id != null) return false; @@ -111,6 +128,6 @@ public abstract class CheckListQuestion extends DomainObject @Override public int compareTo(CheckListQuestion other) { - return questionNumber - other.questionNumber; + return other.questionNumber - questionNumber; } } \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java index 74a47ffacf..a4ba4cade7 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java @@ -1,5 +1,6 @@ package se.su.dsv.scipro.data.dataobjects; +import java.util.ArrayList; import java.util.List; import javax.persistence.Column; @@ -30,11 +31,14 @@ public class CheckListTemplate extends DomainObject { @Lob @ElementCollection - List<String> questions; + private List<String> questions = new ArrayList<String>(1); @ManyToOne(optional=false) private User creator; + @ManyToOne(optional=false) + private ProjectClass level; + public CheckListTemplate() {} public CheckListTemplate(String name, User creator) { @@ -74,6 +78,21 @@ public class CheckListTemplate extends DomainObject { this.questions = questions; } + + /** + * @return the level + */ + public ProjectClass getLevel() { + return level; + } + + /** + * @param level the level to set + */ + public void setLevel(ProjectClass level) { + this.level = level; + } + @Override public int hashCode() { final int weight = 31; From 166e82d1b5661394346ad429d76c04cd0346b621 Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Thu, 28 Jul 2011 09:14:06 +0200 Subject: [PATCH 09/17] Incorrect access modifier Change-Id: I21e799cbf94ae3e1ae2fd54afd8bdfad4dfe5a86 --- .../java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java index ec7ab1259f..24e44fee06 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java @@ -50,7 +50,7 @@ public class MessageBoard extends DomainObject{ } @Basic(optional=false) - public String title; + private String title; @Basic(optional=false) @Column(length=255) From 7aebf316fdf75988b7db3cc1fb0938f5bdc25320 Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Thu, 28 Jul 2011 11:55:20 +0200 Subject: [PATCH 10/17] Removal of old (and buggy) version of jquery and a new one, that's not in use and thus causes confusion Change-Id: I923d54fb6602acd1ca53534edae7803a5631094e --- .../se/su/dsv/scipro/basepages/BasePage.html | 2 +- src/main/webapp/js/jquery-1.5.1.min.js | 16 ---------------- src/main/webapp/js/jquery-1.6.min.js | 16 ---------------- 3 files changed, 1 insertion(+), 33 deletions(-) delete mode 100644 src/main/webapp/js/jquery-1.5.1.min.js delete mode 100644 src/main/webapp/js/jquery-1.6.min.js diff --git a/src/main/java/se/su/dsv/scipro/basepages/BasePage.html b/src/main/java/se/su/dsv/scipro/basepages/BasePage.html index 2b89ec5eca..a29f83d2cd 100644 --- a/src/main/java/se/su/dsv/scipro/basepages/BasePage.html +++ b/src/main/java/se/su/dsv/scipro/basepages/BasePage.html @@ -26,7 +26,7 @@ <!--<link rel="stylesheet" href="css/scipro.css" media="screen,projection" />--> <!-- <link type="text/css" href="css/smoothness/jquery-ui-1.8.10.custom.css" rel="stylesheet" /> - <script type="text/javascript" src="js/jquery-1.5.1.min.js"></script> + <script type="text/javascript" src="js/jquery-1.5.2.min.js"></script> <script type="text/javascript" src="js/jquery-ui-1.8.10.custom.min.js"></script> --> <script type="text/javascript"> diff --git a/src/main/webapp/js/jquery-1.5.1.min.js b/src/main/webapp/js/jquery-1.5.1.min.js deleted file mode 100644 index 6437874c69..0000000000 --- a/src/main/webapp/js/jquery-1.5.1.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/*! - * jQuery JavaScript Library v1.5.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Wed Feb 23 13:55:29 2011 -0500 - */ -(function(a,b){function cg(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cd(a){if(!bZ[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";bZ[a]=c}return bZ[a]}function cc(a,b){var c={};d.each(cb.concat.apply([],cb.slice(0,b)),function(){c[this]=a});return c}function bY(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bX(){try{return new a.XMLHttpRequest}catch(b){}}function bW(){d(a).unload(function(){for(var a in bU)bU[a](0,1)})}function bQ(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h==="string"&&(f[h.toLowerCase()]=a.converters[h]);l=k,k=e[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=f[m]||f["* "+k];if(!n){p=b;for(o in f){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=f[j[1]+" "+k];if(p){o=f[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&d.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bP(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bO(a,b,c,e){if(d.isArray(b)&&b.length)d.each(b,function(b,f){c||bq.test(a)?e(a,f):bO(a+"["+(typeof f==="object"||d.isArray(f)?b:"")+"]",f,c,e)});else if(c||b==null||typeof b!=="object")e(a,b);else if(d.isArray(b)||d.isEmptyObject(b))e(a,"");else for(var f in b)bO(a+"["+f+"]",b[f],c,e)}function bN(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bH,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l==="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bN(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bN(a,c,d,e,"*",g));return l}function bM(a){return function(b,c){typeof b!=="string"&&(c=b,b="*");if(d.isFunction(c)){var e=b.toLowerCase().split(bB),f=0,g=e.length,h,i,j;for(;f<g;f++)h=e[f],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bo(a,b,c){var e=b==="width"?bi:bj,f=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return f;d.each(e,function(){c||(f-=parseFloat(d.css(a,"padding"+this))||0),c==="margin"?f+=parseFloat(d.css(a,"margin"+this))||0:f-=parseFloat(d.css(a,"border"+this+"Width"))||0});return f}function ba(a,b){b.src?d.ajax({url:b.src,async:!1,dataType:"script"}):d.globalEval(b.text||b.textContent||b.innerHTML||""),b.parentNode&&b.parentNode.removeChild(b)}function _(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function $(a,b){if(b.nodeType===1){var c=b.nodeName.toLowerCase();b.clearAttributes(),b.mergeAttributes(a);if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(d.expando)}}function Z(a,b){if(b.nodeType===1&&d.hasData(a)){var c=d.expando,e=d.data(a),f=d.data(b,e);if(e=e[c]){var g=e.events;f=f[c]=d.extend({},e);if(g){delete f.handle,f.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)d.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function Y(a,b){return d.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function O(a,b,c){if(d.isFunction(b))return d.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return d.grep(a,function(a,d){return a===b===c});if(typeof b==="string"){var e=d.grep(a,function(a){return a.nodeType===1});if(J.test(b))return d.filter(b,e,!c);b=d.filter(b,e)}return d.grep(a,function(a,e){return d.inArray(a,b)>=0===c})}function N(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function F(a,b){return(a&&a!=="*"?a+".":"")+b.replace(r,"`").replace(s,"&")}function E(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,q=[],r=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;i<t.length;i++)g=t[i],g.origType.replace(p,"")===a.type?r.push(g.selector):t.splice(i--,1);f=d(a.target).closest(r,a.currentTarget);for(j=0,k=f.length;j<k;j++){m=f[j];for(i=0;i<t.length;i++){g=t[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,e=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,e=d(a.relatedTarget).closest(g.selector)[0];(!e||e!==h)&&q.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=q.length;j<k;j++){f=q[j];if(c&&f.level>c)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function C(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function w(){return!0}function v(){return!1}function g(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function f(a,c,f){if(f===b&&a.nodeType===1){f=a.getAttribute("data-"+c);if(typeof f==="string"){try{f=f==="true"?!0:f==="false"?!1:f==="null"?null:d.isNaN(f)?e.test(f)?d.parseJSON(f):f:parseFloat(f)}catch(g){}d.data(a,c,f)}else f=b}return f}var c=a.document,d=function(){function I(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x=!1,y,z="then done fail isResolved isRejected promise".split(" "),A,B=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?D.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),y.done(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(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){e=i[c],f=a[c];if(i===f)continue;l&&f&&(d.isPlainObject(f)||(g=d.isArray(f)))?(g?(g=!1,h=e&&d.isArray(e)?e:[]):h=e&&d.isPlainObject(e)?e:{},i[c]=d.extend(l,h,f)):f!==b&&(i[c]=f)}return i},d.extend({noConflict:function(b){a.$=f,b&&(a.jQuery=e);return d},isReady:!1,readyWait:1,ready:function(a){a===!0&&d.readyWait--;if(!d.readyWait||a!==!0&&!d.isReady){if(!c.body)return setTimeout(d.ready,1);d.isReady=!0;if(a!==!0&&--d.readyWait>0)return;y.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=!0;if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",A,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",A),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&I()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):H[B.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||C.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g<h;)if(c.apply(a[g++],e)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(var j=a[0];g<h&&c.call(j,g,j)!==!1;j=a[++g]){}return a},trim:F?function(a){return a==null?"":F.call(a)}:function(a){return a==null?"":(a+"").replace(j,"").replace(k,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var e=d.type(a);a.length==null||e==="string"||e==="function"||e==="regexp"||d.isWindow(a)?D.call(c,a):d.merge(c,a)}return c},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,b,c){var d=[],e;for(var f=0,g=a.length;f<g;f++)e=b(a[f],f,c),e!=null&&(d[d.length]=e);return d.concat.apply([],d)},guid:1,proxy:function(a,c,e){arguments.length===2&&(typeof c==="string"?(e=a,a=e[c],c=b):c&&!d.isFunction(c)&&(e=c,c=b)),!c&&a&&(c=function(){return a.apply(e||this,arguments)}),a&&(c.guid=a.guid=a.guid||c.guid||d.guid++);return c},access:function(a,c,e,f,g,h){var i=a.length;if(typeof c==="object"){for(var j in c)d.access(a,j,c[j],f,g,e);return a}if(e!==b){f=!h&&f&&d.isFunction(e);for(var k=0;k<i;k++)g(a[k],c,f?e.call(a[k],k,g(a[k],c)):e,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},_Deferred:function(){var a=[],b,c,e,f={done:function(){if(!e){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=d.type(i),j==="array"?f.done.apply(f,i):j==="function"&&a.push(i);k&&f.resolveWith(k[0],k[1])}return this},resolveWith:function(d,f){if(!e&&!b&&!c){c=1;try{while(a[0])a.shift().apply(d,f)}catch(g){throw g}finally{b=[d,f],c=0}}return this},resolve:function(){f.resolveWith(d.isFunction(this.promise)?this.promise():this,arguments);return this},isResolved:function(){return c||b},cancel:function(){e=1,a=[];return this}};return f},Deferred:function(a){var b=d._Deferred(),c=d._Deferred(),e;d.extend(b,{then:function(a,c){b.done(a).fail(c);return this},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,promise:function(a){if(a==null){if(e)return e;e=a={}}var c=z.length;while(c--)a[z[c]]=b[z[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){var b=arguments.length,c=b<=1&&a&&d.isFunction(a.promise)?a:d.Deferred(),e=c.promise();if(b>1){var f=E.call(arguments,0),g=b,h=function(a){return function(b){f[a]=arguments.length>1?E.call(arguments,0):b,--g||c.resolveWith(e,f)}};while(b--)a=f[b],a&&d.isFunction(a.promise)?a.promise().then(h(b),c.reject):--g;g||c.resolveWith(e,f)}else c!==a&&c.resolve(a);return e},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),y=d._Deferred(),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){H["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),G&&(d.inArray=function(a,b){return G.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?A=function(){c.removeEventListener("DOMContentLoaded",A,!1),d.ready()}:c.attachEvent&&(A=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",A),d.ready())});return d}();(function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e),b=e=f=null}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function"),b=null;return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}})();var e=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!g(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,h=b.nodeType,i=h?d.cache:b,j=h?b[d.expando]:d.expando;if(!i[j])return;if(c){var k=e?i[j][f]:i[j];if(k){delete k[c];if(!g(k))return}}if(e){delete i[j][f];if(!g(i[j]))return}var l=i[j][f];d.support.deleteExpando||i!=a?delete i[j]:i[j]=null,l?(i[j]={},h||(i[j].toJSON=d.noop),i[j][f]=l):h&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var g=this[0].attributes,h;for(var i=0,j=g.length;i<j;i++)h=g[i].name,h.indexOf("data-")===0&&(h=h.substr(5),f(this[0],h,e[h]))}}return e}if(typeof a==="object")return this.each(function(){d.data(this,a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(c===b){e=this.triggerHandler("getData"+k[1]+"!",[k[0]]),e===b&&this.length&&(e=d.data(this[0],a),e=f(this[0],a,e));return e===b&&k[1]?this.data(k[0]):e}return this.each(function(){var b=d(this),e=[k[0],c];b.triggerHandler("setData"+k[1]+"!",e),d.data(this,a,c),b.triggerHandler("changeData"+k[1]+"!",e)})},removeData:function(a){return this.each(function(){d.removeData(this,a)})}}),d.extend({queue:function(a,b,c){if(a){b=(b||"fx")+"queue";var e=d._data(a,b);if(!c)return e||[];!e||d.isArray(c)?e=d._data(a,b,d.makeArray(c)):e.push(c);return e}},dequeue:function(a,b){b=b||"fx";var c=d.queue(a,b),e=c.shift();e==="inprogress"&&(e=c.shift()),e&&(b==="fx"&&c.unshift("inprogress"),e.call(a,function(){d.dequeue(a,b)})),c.length||d.removeData(a,b+"queue",!0)}}),d.fn.extend({queue:function(a,c){typeof a!=="string"&&(c=a,a="fx");if(c===b)return d.queue(this[0],a);return this.each(function(b){var e=d.queue(this,a,c);a==="fx"&&e[0]!=="inprogress"&&d.dequeue(this,a)})},dequeue:function(a){return this.each(function(){d.dequeue(this,a)})},delay:function(a,b){a=d.fx?d.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){d.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var h=/[\n\t\r]/g,i=/\s+/,j=/\r/g,k=/^(?:href|src|style)$/,l=/^(?:button|input)$/i,m=/^(?:button|input|object|select|textarea)$/i,n=/^a(?:rea)?$/i,o=/^(?:radio|checkbox)$/i;d.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"},d.fn.extend({attr:function(a,b){return d.access(this,a,b,!0,d.attr)},removeAttr:function(a,b){return this.each(function(){d.attr(this,a,""),this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.addClass(a.call(this,b,c.attr("class")))});if(a&&typeof a==="string"){var b=(a||"").split(i);for(var c=0,e=this.length;c<e;c++){var f=this[c];if(f.nodeType===1)if(f.className){var g=" "+f.className+" ",h=f.className;for(var j=0,k=b.length;j<k;j++)g.indexOf(" "+b[j]+" ")<0&&(h+=" "+b[j]);f.className=d.trim(h)}else f.className=a}}return this},removeClass:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a==="string"||a===b){var c=(a||"").split(i);for(var e=0,f=this.length;e<f;e++){var g=this[e];if(g.nodeType===1&&g.className)if(a){var j=(" "+g.className+" ").replace(h," ");for(var k=0,l=c.length;k<l;k++)j=j.replace(" "+c[k]+" "," ");g.className=d.trim(j)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,e=typeof b==="boolean";if(d.isFunction(a))return this.each(function(c){var e=d(this);e.toggleClass(a.call(this,c,e.attr("class"),b),b)});return this.each(function(){if(c==="string"){var f,g=0,h=d(this),j=b,k=a.split(i);while(f=k[g++])j=e?j:!h.hasClass(f),h[j?"addClass":"removeClass"](f)}else if(c==="undefined"||c==="boolean")this.className&&d._data(this,"__className__",this.className),this.className=this.className||a===!1?"":d._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(h," ").indexOf(b)>-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var k=i?f:0,l=i?f+1:h.length;k<l;k++){var m=h[k];if(m.selected&&(d.support.optDisabled?!m.disabled:m.getAttribute("disabled")===null)&&(!m.parentNode.disabled||!d.nodeName(m.parentNode,"optgroup"))){a=d(m).val();if(i)return a;g.push(a)}}if(i&&!g.length&&h.length)return d(h[f]).val();return g}if(o.test(c.type)&&!d.support.checkOn)return c.getAttribute("value")===null?"on":c.value;return(c.value||"").replace(j,"")}return b}var n=d.isFunction(a);return this.each(function(b){var c=d(this),e=a;if(this.nodeType===1){n&&(e=a.call(this,b,c.val())),e==null?e="":typeof e==="number"?e+="":d.isArray(e)&&(e=d.map(e,function(a){return a==null?"":a+""}));if(d.isArray(e)&&o.test(this.type))this.checked=d.inArray(c.val(),e)>=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=k.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&l.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var o=a.getAttributeNode("tabIndex");return o&&o.specified?o.value:m.test(a.nodeName)||n.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var p=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return p===null?b:p}h&&(a[c]=e);return a[c]}});var p=/\.(.*)$/,q=/^(?:textarea|input|select)$/i,r=/\./g,s=/ /g,t=/[^\w\s.|`]/g,u=function(a){return a.replace(t,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=v;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(){return typeof d!=="undefined"&&!d.event.triggered?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=v);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))d.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=d.event.special[h]||{};for(j=f||0;j<p.length;j++){q=p[j];if(e.guid===q.guid){if(l||n.test(q.namespace))f==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(f!=null)break}}if(p.length===0||f!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&d.removeEvent(a,h,s.handle),g=null,delete t[h]}if(d.isEmptyObject(t)){var w=s.handle;w&&(w.elem=null),delete s.events,delete s.handle,d.isEmptyObject(s)&&d.removeData(a,b,!0)}}},trigger:function(a,c,e){var f=a.type||a,g=arguments[3];if(!g){a=typeof a==="object"?a[d.expando]?a:d.extend(d.Event(f),a):d.Event(f),f.indexOf("!")>=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(p,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=!0,l[m]())}catch(q){}k&&(l["on"+m]=k),d.event.triggered=!1}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l<m;l++){var n=f[l];if(e||h.test(n.namespace)){c.handler=n.handler,c.data=n.data,c.handleObj=n;var o=n.handler.apply(this,k);o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[d.expando])return a;var e=a;a=d.Event(e);for(var f=this.props.length,g;f;)g=this.props[--f],a[g]=e[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=c.documentElement,i=c.body;a.pageX=a.clientX+(h&&h.scrollLeft||i&&i.scrollLeft||0)-(h&&h.clientLeft||i&&i.clientLeft||0),a.pageY=a.clientY+(h&&h.scrollTop||i&&i.scrollTop||0)-(h&&h.clientTop||i&&i.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:d.proxy,special:{ready:{setup:d.bindReady,teardown:d.noop},live:{add:function(a){d.event.add(this,F(a.origType,a.selector),d.extend({},a,{handler:E,guid:a.handler.guid}))},remove:function(a){d.event.remove(this,F(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){d.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},d.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},d.Event=function(a){if(!this.preventDefault)return new d.Event(a);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?w:v):this.type=a,this.timeStamp=d.now(),this[d.expando]=!0},d.Event.prototype={preventDefault:function(){this.isDefaultPrevented=w;var a=this.originalEvent;a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=w;var a=this.originalEvent;a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=w,this.stopPropagation()},isDefaultPrevented:v,isPropagationStopped:v,isImmediatePropagationStopped:v};var x=function(a){var b=a.relatedTarget;try{if(b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&(a.type=a.data,d.event.handle.apply(this,arguments))}catch(e){}},y=function(a){a.type=a.data,d.event.handle.apply(this,arguments)};d.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){d.event.special[a]={setup:function(c){d.event.add(this,b,c&&c.selector?y:x,a)},teardown:function(a){d.event.remove(this,b,a&&a.selector?y:x)}}}),d.support.submitBubbles||(d.event.special.submit={setup:function(a,b){if(this.nodeName&&this.nodeName.toLowerCase()!=="form")d.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&d(b).closest("form").length&&C("submit",this,arguments)}),d.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&d(b).closest("form").length&&a.keyCode===13&&C("submit",this,arguments)});else return!1},teardown:function(a){d.event.remove(this,".specialSubmit")}});if(!d.support.changeBubbles){var z,A=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},B=function B(a){var c=a.target,e,f;if(q.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=A(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:B,beforedeactivate:B,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&B.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&B.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",A(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in z)d.event.add(this,c+".specialChange",z[c]);return q.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return q.test(this.nodeName)}},z=d.event.special.change.filters,z.focus=z.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=d.event.fix(a),a.type=b;return d.event.handle.call(this,a)}d.event.special[b]={setup:function(){this.addEventListener(a,c,!0)},teardown:function(){this.removeEventListener(a,c,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i<j;i++)d.event.add(this[i],a,h,e);return this}}),d.fn.extend({unbind:function(a,b){if(typeof a!=="object"||a.preventDefault)for(var e=0,f=this.length;e<f;e++)d.event.remove(this[e],a,b);else for(var c in a)this.unbind(c,a[c]);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){d.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var c=d.Event(a);c.preventDefault(),c.stopPropagation(),d.event.trigger(c,b,this[0]);return c.result}},toggle:function(a){var b=arguments,c=1;while(c<b.length)d.proxy(a,b[c++]);return this.click(d.proxy(a,function(e){var f=(d._data(this,"lastToggle"+a.guid)||0)%c;d._data(this,"lastToggle"+a.guid,f+1),e.preventDefault();return b[f].apply(this,arguments)||!1}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var D={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};d.each(["live","die"],function(a,c){d.fn[c]=function(a,e,f,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:d(this.context);if(typeof a==="object"&&!a.preventDefault){for(var o in a)n[c](o,e,a[o],m);return this}d.isFunction(e)&&(f=e,e=b),a=(a||"").split(" ");while((h=a[i++])!=null){j=p.exec(h),k="",j&&(k=j[0],h=h.replace(p,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,h==="focus"||h==="blur"?(a.push(D[h]+k),h=h+k):h=(D[h]||h)+k;if(c==="live")for(var q=0,r=n.length;q<r;q++)d.event.add(n[q],"live."+F(h,m),{data:e,selector:m,handler:f,origType:h,origHandler:f,preType:l});else n.unbind("live."+F(h,m),f)}return this}}),d.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){d.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!=="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!=="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(f){if(f===!0)continue}else g=o=!0}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b==="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1){}a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=u;typeof b==="string"&&!j.test(b)&&(b=b.toLowerCase(),d=b,g=t),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=u;typeof b==="string"&&!j.test(b)&&(b=b.toLowerCase(),d=b,g=t),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!=="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!=="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.getAttribute("type")},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(a===b){g=!0;return 0}if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,d=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(e){d=!0}b&&(k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(d||!l.match.PSEUDO.test(c)&&!/!=/.test(c))return b.call(a,c)}catch(e){}return k(c,null,null,[a]).length>0})}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};d.find=k,d.expr=k.selectors,d.expr[":"]=d.expr.filters,d.unique=k.uniqueSort,d.text=k.getText,d.isXMLDoc=k.isXML,d.contains=k.contains}();var G=/Until$/,H=/^(?:parents|prevUntil|prevAll)/,I=/,/,J=/^.[^:#\[\.,]*$/,K=Array.prototype.slice,L=d.expr.match.POS,M={children:!0,contents:!0,next:!0,prev:!0};d.fn.extend({find:function(a){var b=this.pushStack("","find",a),c=0;for(var e=0,f=this.length;e<f;e++){c=b.length,d.find(a,this[e],b);if(e>0)for(var g=c;g<b.length;g++)for(var h=0;h<c;h++)if(b[h]===b[g]){b.splice(g--,1);break}}return b},has:function(a){var b=d(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(d.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(O(this,a,!1),"not",a)},filter:function(a){return this.pushStack(O(this,a,!0),"filter",a)},is:function(a){return!!a&&d.filter(a,this).length>0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e<f;e++)i=a[e],j[i]||(j[i]=d.expr.match.POS.test(i)?d(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=L.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e<f;e++){g=this[e];while(g){if(l?l.index(g)>-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(N(c[0])||N(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=K.call(arguments);G.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!M[a]?d.unique(f):f,(this.length>1||I.test(e))&&H.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var P=/ jQuery\d+="(?:\d+|null)"/g,Q=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,S=/<([\w:]+)/,T=/<tbody/i,U=/<|&#?\w+;/,V=/<(?:script|object|embed|option|style)/i,W=/checked\s*(?:[^=]|=\s*.checked.)/i,X={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,"",""]};X.optgroup=X.option,X.tbody=X.tfoot=X.colgroup=X.caption=X.thead,X.th=X.td,d.support.htmlSerialize||(X._default=[1,"div<div>","</div>"]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(P,""):null;if(typeof a!=="string"||V.test(a)||!d.support.leadingWhitespace&&Q.test(a)||X[(S.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(R,"<$1></$2>");try{for(var c=0,e=this.length;c<e;c++)this[c].nodeType===1&&(d.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(f){this.empty().append(a)}}return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(d.isFunction(a))return this.each(function(b){var c=d(this),e=c.html();c.replaceWith(a.call(this,b,e))});typeof a!=="string"&&(a=d(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;d(this).remove(),b?d(b).before(a):d(c).append(a)})}return this.pushStack(d(d.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,e){var f,g,h,i,j=a[0],k=[];if(!d.support.checkClone&&arguments.length===3&&typeof j==="string"&&W.test(j))return this.each(function(){d(this).domManip(a,c,e,!0)});if(d.isFunction(j))return this.each(function(f){var g=d(this);a[0]=j.call(this,f,c?g.html():b),g.domManip(a,c,e)});if(this[0]){i=j&&j.parentNode,d.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?f={fragment:i}:f=d.buildFragment(a,this,k),h=f.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&d.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)e.call(c?Y(this[l],g):this[l],f.cacheable||m>1&&l<n?d.clone(h,!0,!0):h)}k.length&&d.each(k,ba)}return this}}),d.buildFragment=function(a,b,e){var f,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]==="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!V.test(a[0])&&(d.support.checkClone||!W.test(a[0]))&&(g=!0,h=d.fragments[a[0]],h&&(h!==1&&(f=h))),f||(f=i.createDocumentFragment(),d.clean(a,i,f,e)),g&&(d.fragments[a[0]]=h?f:1);return{fragment:f,cacheable:g}},d.fragments={},d.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){d.fn[a]=function(c){var e=[],f=d(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&f.length===1){f[b](this[0]);return this}for(var h=0,i=f.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){$(a,e),f=_(a),g=_(e);for(h=0;f[h];++h)$(f[h],g[h])}if(b){Z(a,e);if(c){f=_(a),g=_(e);for(h=0;f[h];++h)Z(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||U.test(i)){if(typeof i==="string"){i=i.replace(R,"<$1></$2>");var j=(S.exec(i)||["",""])[1].toLowerCase(),k=X[j]||X._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=T.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]==="<table>"&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&Q.test(i)&&m.insertBefore(b.createTextNode(Q.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bb=/alpha\([^)]*\)/i,bc=/opacity=([^)]*)/,bd=/-([a-z])/ig,be=/([A-Z])/g,bf=/^-?\d+(?:px)?$/i,bg=/^-?\d/,bh={position:"absolute",visibility:"hidden",display:"block"},bi=["Left","Right"],bj=["Top","Bottom"],bk,bl,bm,bn=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bk(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bk)return bk(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bd,bn)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bo(a,b,e):d.swap(a,bh,function(){f=bo(a,b,e)});if(f<=0){f=bk(a,b,b),f==="0px"&&bm&&(f=bm(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bf.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return bc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bb.test(f)?f.replace(bb,e):c.filter+" "+e}}),c.defaultView&&c.defaultView.getComputedStyle&&(bl=function(a,c,e){var f,g,h;e=e.replace(be,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bm=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bf.test(d)&&bg.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bk=bl||bm,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var bp=/%20/g,bq=/\[\]$/,br=/\r?\n/g,bs=/#.*$/,bt=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bu=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bv=/(?:^file|^widget|\-extension):$/,bw=/^(?:GET|HEAD)$/,bx=/^\/\//,by=/\?/,bz=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bA=/^(?:select|textarea)/i,bB=/\s+/,bC=/([?&])_=[^&]*/,bD=/(^|\-)([a-z])/g,bE=function(a,b,c){return b+c.toUpperCase()},bF=/^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/,bG=d.fn.load,bH={},bI={},bJ,bK;try{bJ=c.location.href}catch(bL){bJ=c.createElement("a"),bJ.href="",bJ=bJ.href}bK=bF.exec(bJ.toLowerCase()),d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bG)return bG.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("<div>").append(c.replace(bz,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bA.test(this.nodeName)||bu.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(br,"\r\n")}}):{name:b.name,value:c.replace(br,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bJ,isLocal:bv.test(bK[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bM(bH),ajaxTransport:bM(bI),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bP(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bQ(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bD,bE)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bt.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bs,"").replace(bx,bK[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bB),e.crossDomain||(q=bF.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bK[1]||q[2]!=bK[2]||(q[3]||(q[1]==="http:"?80:443))!=(bK[3]||(bK[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bN(bH,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!bw.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(by.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bC,"$1_="+w);e.url=x+(x===e.url?(by.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bN(bI,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bO(g,a[g],c,f);return e.join("&").replace(bp,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bR=d.now(),bS=/(\=)\?(&|$)|()\?\?()/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bR++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bS.test(b.url)||f&&bS.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bS,l),b.url===j&&(f&&(k=k.replace(bS,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bT=d.now(),bU,bV;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bX()||bY()}:bX,bV=d.ajaxSettings.xhr(),d.support.ajax=!!bV,d.support.cors=bV&&"withCredentials"in bV,bV=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),(!a.crossDomain||a.hasContent)&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bU[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bU||(bU={},bW()),h=bT++,g.onreadystatechange=bU[h]=c):c()},abort:function(){c&&c(0,1)}}}});var bZ={},b$=/^(?:toggle|show|hide)$/,b_=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,ca,cb=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(cc("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)e=this[g],f=e.style.display,!d._data(e,"olddisplay")&&f==="none"&&(f=e.style.display=""),f===""&&d.css(e,"display")==="none"&&d._data(e,"olddisplay",cd(e.nodeName));for(g=0;g<h;g++){e=this[g],f=e.style.display;if(f===""||f==="none")e.style.display=d._data(e,"olddisplay")||""}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cc("hide",3),a,b,c);for(var e=0,f=this.length;e<f;e++){var g=d.css(this[e],"display");g!=="none"&&!d._data(this[e],"olddisplay")&&d._data(this[e],"olddisplay",g)}for(e=0;e<f;e++)this[e].style.display="none";return this},_toggle:d.fn.toggle,toggle:function(a,b,c){var e=typeof a==="boolean";d.isFunction(a)&&d.isFunction(b)?this._toggle.apply(this,arguments):a==null||e?this.each(function(){var b=e?a:d(this).is(":hidden");d(this)[b?"show":"hide"]()}):this.animate(cc("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,e){var f=d.speed(b,c,e);if(d.isEmptyObject(a))return this.each(f.complete);return this[f.queue===!1?"each":"queue"](function(){var b=d.extend({},f),c,e=this.nodeType===1,g=e&&d(this).is(":hidden"),h=this;for(c in a){var i=d.camelCase(c);c!==i&&(a[i]=a[c],delete a[c],c=i);if(a[c]==="hide"&&g||a[c]==="show"&&!g)return b.complete.call(this);if(e&&(c==="height"||c==="width")){b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(d.css(this,"display")==="inline"&&d.css(this,"float")==="none")if(d.support.inlineBlockNeedsLayout){var j=cd(this.nodeName);j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)}else this.style.display="inline-block"}d.isArray(a[c])&&((b.specialEasing=b.specialEasing||{})[c]=a[c][1],a[c]=a[c][0])}b.overflow!=null&&(this.style.overflow="hidden"),b.curAnim=d.extend({},a),d.each(a,function(c,e){var f=new d.fx(h,b,c);if(b$.test(e))f[e==="toggle"?g?"show":"hide":e](a);else{var i=b_.exec(e),j=f.cur();if(i){var k=parseFloat(i[2]),l=i[3]||(d.cssNumber[c]?"":"px");l!=="px"&&(d.style(h,c,(k||1)+l),j=(k||1)/f.cur()*j,d.style(h,c,j+l)),i[1]&&(k=(i[1]==="-="?-1:1)*k+j),f.custom(j,k,l)}else f.custom(j,e,"")}});return!0})},stop:function(a,b){var c=d.timers;a&&this.queue([]),this.each(function(){for(var a=c.length-1;a>=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:cc("show",1),slideUp:cc("hide",1),slideToggle:cc("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!ca&&(ca=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||d.fx.stop()},interval:13,stop:function(){clearInterval(ca),ca=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){d.style(a.elem,"opacity",a.now)},_default:function(a){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:a.elem[a.prop]=a.now}}}),d.expr&&d.expr.filters&&(d.expr.filters.animated=function(a){return d.grep(d.timers,function(b){return a===b.elem}).length});var ce=/^t(?:able|d|h)$/i,cf=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?d.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){d.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return d.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,g=f.documentElement;if(!c||!d.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=f.body,i=cg(f),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||d.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||d.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:d.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){d.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return d.offset.bodyOffset(b);d.offset.initialize();var c,e=b.offsetParent,f=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(d.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===e&&(l+=b.offsetTop,m+=b.offsetLeft,d.offset.doesNotAddBorder&&(!d.offset.doesAddBorderForTableAndCells||!ce.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),f=e,e=b.offsetParent),d.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;d.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},d.offset={initialize:function(){var a=c.body,b=c.createElement("div"),e,f,g,h,i=parseFloat(d.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),a=b=e=f=g=h=null,d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=e==="absolute"&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=cf.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!cf.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=cg(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=cg(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window); \ No newline at end of file diff --git a/src/main/webapp/js/jquery-1.6.min.js b/src/main/webapp/js/jquery-1.6.min.js deleted file mode 100644 index c72011dfa0..0000000000 --- a/src/main/webapp/js/jquery-1.6.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/*! - * jQuery JavaScript Library v1.6 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon May 2 13:50:00 2011 -0400 - */ -(function(a,b){function cw(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function ct(a){if(!ch[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ci||(ci=c.createElement("iframe"),ci.frameBorder=ci.width=ci.height=0),c.body.appendChild(ci);if(!cj||!ci.createElement)cj=(ci.contentWindow||ci.contentDocument).document,cj.write("<!doctype><html><body></body></html>");b=cj.createElement(a),cj.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ci)}ch[a]=d}return ch[a]}function cs(a,b){var c={};f.each(cn.concat.apply([],cn.slice(0,b)),function(){c[this]=a});return c}function cr(){co=b}function cq(){setTimeout(cr,0);return co=f.now()}function cg(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cf(){try{return new a.XMLHttpRequest}catch(b){}}function b_(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function b$(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bZ(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):bZ(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bZ(a+"["+e+"]",b[e],c,d);else d(a,b)}function bY(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bY(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bY(a,c,d,e,"*",g));return l}function bX(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?bv:bw,e=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return e;f.each(d,function(){c||(e-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?e+=parseFloat(f.css(a,"margin"+this))||0:e-=parseFloat(f.css(a,"border"+this+"Width"))||0});return e}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval(b.text||b.textContent||b.innerHTML||""),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):a.getElementsByTagName&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){name="data-"+c.replace(j,"$1-$2").toLowerCase(),d=a.getAttribute(name);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(e){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?g=[null,a,null]:g=i.exec(a);if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(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(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:E?function(a){return a==null?"":E.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?C.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(F)return F.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=D.call(arguments,2),g=function(){return a.apply(c,f.concat(D.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(c,d){d&&d instanceof e&&!(d instanceof a)&&(d=a(d));return e.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){G["[object "+b+"]"]=b.toLowerCase()}),x=e.uaMatch(w),x.browser&&(e.browser[x.browser]=!0,e.browser.version=x.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?z=function(){c.removeEventListener("DOMContentLoaded",z,!1),e.ready()}:c.attachEvent&&(z=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",z),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b,d,e,f,g,h,i,j,k,l,m,n,o,p,q;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",b=a.getElementsByTagName("*"),d=a.getElementsByTagName("a")[0];if(!b||!b.length||!d)return{};e=c.createElement("select"),f=e.appendChild(c.createElement("option")),g=a.getElementsByTagName("input")[0],i={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.55$/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:g.value==="on",optSelected:f.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},g.checked=!0,i.noCloneChecked=g.cloneNode(!0).checked,e.disabled=!0,i.optDisabled=!f.disabled;try{delete a.test}catch(r){i.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function click(){i.noCloneEvent=!1,a.detachEvent("onclick",click)}),a.cloneNode(!0).fireEvent("onclick")),g=c.createElement("input"),g.value="t",g.setAttribute("type","radio"),i.radioValue=g.value==="t",g.setAttribute("checked","checked"),a.appendChild(g),j=c.createDocumentFragment(),j.appendChild(a.firstChild),i.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",k=c.createElement("body"),l={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(p in l)k.style[p]=l[p];k.appendChild(a),c.documentElement.appendChild(k),i.appendChecked=g.checked,i.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,i.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",i.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",m=a.getElementsByTagName("td"),q=m[0].offsetHeight===0,m[0].style.display="",m[1].style.display="none",i.reliableHiddenOffsets=q&&m[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(h=c.createElement("div"),h.style.width="0",h.style.marginRight="0",a.appendChild(h),i.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(h,null).marginRight,10)||0)===0),k.innerHTML="",c.documentElement.removeChild(k);if(a.attachEvent)for(p in{submit:1,change:1,focusin:1})o="on"+p,q=o in a,q||(a.setAttribute(o,"return;"),q=typeof a[o]=="function"),i[p+"Bubbles"]=q;return i}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[c]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function l(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark";while(g--)if(tmp=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,tmp.done(l);l();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:data-|aria-)/,u=/\:/,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.addClass(a.call(this,b,c.attr("class")||""))});if(a&&typeof a=="string"){var b=(a||"").split(o);for(var c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(!e.className)e.className=a;else{var g=" "+e.className+" ",h=e.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);e.className=f.trim(h)}}}return this},removeClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a=="string"||a===b){var c=(a||"").split(o);for(var d=0,e=this.length;d<e;d++){var g=this[d];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(n," ");for(var i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){var d=f(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||"set"in c&&c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b=a.selectedIndex,c=[],d=a.options,e=a.type==="select-one";if(b<0)return null;for(var g=e?b:0,h=e?b+1:d.length;g<h;g++){var i=d[g];if(i.selected&&(f.support.optDisabled?!i.disabled:i.getAttribute("disabled")===null)&&(!i.parentNode.disabled||!f.nodeName(i.parentNode,"optgroup"))){value=f(i).val();if(e)return value;c.push(value)}}if(e&&!c.length&&d.length)return f(d[b]).val();return c},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex",readonly:"readOnly"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c]||(v&&(f.nodeName(a,"form")||u.test(c))?v:b);if(d!==b){if(d===null||d===!1&&!t.test(c)){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;d===!0&&!t.test(c)&&(d=c),a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.getAttribute("value");a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),f.support.getSetAttribute||(f.attrFix=f.extend(f.attrFix,{"for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder"}),v=f.attrHooks.name=f.attrHooks.value=f.valHooks.button={get:function(a,c){var d;if(c==="value"&&!f.nodeName(a,"button"))return a.getAttribute(c);d=a.getAttributeNode(c);return d&&d.specified?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=Object.prototype.hasOwnProperty,x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&(a.type=a.data,f.event.handle.apply(this,arguments))}catch(d){}},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function J(a){var c=a.target,d,e;if(!!y.test(c.nodeName)&&!c.readOnly){d=f._data(c,"_change_data"),e=I(c),(a.type!=="focusout"||c.type!=="radio")&&f._data(c,"_change_data",e);if(d===b||e===d)return;if(d!=null||e)a.type="change",a.liveFired=b,f.event.trigger(a,arguments[1],c)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){return a.nodeName.toLowerCase()==="input"&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(a===b){g=!0;return 0}if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be={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,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!be[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[];for(var i=0,j;(j=a[i])!=null;i++){typeof j=="number"&&(j+="");if(!j)continue;if(typeof j=="string")if(!ba.test(j))j=b.createTextNode(j);else{j=j.replace(Z,"<$1></$2>");var k=($.exec(j)||["",""])[1].toLowerCase(),l=be[k]||be._default,m=l[0],n=b.createElement("div");n.innerHTML=l[1]+j+l[2];while(m--)n=n.lastChild;if(!f.support.tbody){var o=_.test(j),p=k==="table"&&!o?n.firstChild&&n.firstChild.childNodes:l[1]==="<table>"&&!o?n.childNodes:[];for(var q=p.length-1;q>=0;--q)f.nodeName(p[q],"tbody")&&!p[q].childNodes.length&&p[q].parentNode.removeChild(p[q])}!f.support.leadingWhitespace&&Y.test(j)&&n.insertBefore(b.createTextNode(Y.exec(j)[0]),n.firstChild),j=n.childNodes}var r;if(!f.support.appendChecked)if(j[0]&&typeof (r=j.length)=="number")for(i=0;i<r;i++)bk(j[i]);else bk(j);j.nodeType?h.push(j):h=f.merge(h,j)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(i=0;h[i];i++)if(e&&f.nodeName(h[i],"script")&&(!h[i].type||h[i].type.toLowerCase()==="text/javascript"))e.push(h[i].parentNode?h[i].parentNode.removeChild(h[i]):h[i]);else{if(h[i].nodeType===1){var s=f.grep(h[i].getElementsByTagName("script"),g);h.splice.apply(h,[i+1,0].concat(s))}d.appendChild(h[i])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/-([a-z])/ig,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz,bA=function(a,b){return b.toUpperCase()};f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0,widows:!0,orphans:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c))),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bo,bA)}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){a.offsetWidth!==0?e=bB(a,b,d):f.swap(a,bu,function(){e=bB(a,b,d)});if(e<=0){e=bx(a,b,b),e==="0px"&&bz&&(e=bz(a,b,b));if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e=="string"?e:e+"px"}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV;try{bU=e.href}catch(bW){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bX(bS),ajaxTransport:bX(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?b$(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b_(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bY(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bY(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bZ(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var ca=f.now(),cb=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+ca++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cb.test(b.url)||e&&cb.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cb,l),b.url===j&&(e&&(k=k.replace(cb,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cc=a.ActiveXObject?function(){for(var a in ce)ce[a](0,1)}:!1,cd=0,ce;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cf()||cg()}:cf,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cc&&delete ce[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cd,cc&&(ce||(ce={},f(a).unload(cc)),ce[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ch={},ci,cj,ck=/^(?:toggle|show|hide)$/,cl=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cm,cn=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],co,cp=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cs("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",ct(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cs("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cs("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g];if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=ct(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block")),b.animatedProperties[g]=f.isArray(h)?h[1]:b.specialEasing&&b.specialEasing[g]||b.easing||"swing"}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],ck.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=cl.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[g]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cs("show",1),slideUp:cs("hide",1),slideToggle:cs("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this),f.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=co||cq(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cm&&(cp?(cm=1,g=function(){cm&&(cp(g),e.tick())},cp(g)):cm=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=co||cq(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a=f.timers,b=a.length;while(b--)a[b]()||a.splice(b,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cm),cm=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cu=/^t(?:able|d|h)$/i,cv=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cw(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cu.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cv.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cv.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cw(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cw(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file From 1beba1f84abadc488074060fccd64bd5c5416a91 Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Thu, 28 Jul 2011 12:00:52 +0200 Subject: [PATCH 11/17] Enhancements to the base page-test class Change-Id: Id40ff6f973cfe49bfa36ebbd649937b0bdf36953 --- .../java/se/su/dsv/scipro/wicket/BaseWicketTest.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/test/java/se/su/dsv/scipro/wicket/BaseWicketTest.java b/src/test/java/se/su/dsv/scipro/wicket/BaseWicketTest.java index f245abf959..d1e24017c4 100644 --- a/src/test/java/se/su/dsv/scipro/wicket/BaseWicketTest.java +++ b/src/test/java/se/su/dsv/scipro/wicket/BaseWicketTest.java @@ -64,7 +64,7 @@ import se.su.dsv.scipro.repository.util.RepositoryManager; * */ @Ignore -public class BaseWicketTest { +public abstract class BaseWicketTest { protected WicketTester tester; @@ -112,7 +112,9 @@ public class BaseWicketTest { @Mock EntityManagerFactoryInfo entityManagerFactory = Mockito.mock(LocalEntityManagerFactoryBean.class); - //@Before + /** + * Call this method within as the first call in @Before annotated method in an overriding test case class, see example in {@link TestWicketPages} + */ public void setup() { /* * Setup a new mock applicationContext @@ -174,7 +176,10 @@ public class BaseWicketTest { }); } - + + /* + * The following methods are added for convenience + */ protected void setLoggedIn(boolean loggedIn){ MockSciProSession.currentSession.setLoggedIn(loggedIn); } From 9222ef71c86c08604708c6f0af56503229f241ac Mon Sep 17 00:00:00 2001 From: Robin Eklund <robi-ekl@dsv.su.se> Date: Thu, 28 Jul 2011 15:30:31 +0200 Subject: [PATCH 12/17] Fixed non-resetting active project when switching users and the target users active project is null --- src/main/java/se/su/dsv/scipro/SciProSession.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/se/su/dsv/scipro/SciProSession.java b/src/main/java/se/su/dsv/scipro/SciProSession.java index 3d9f1245e4..1389f3a15e 100644 --- a/src/main/java/se/su/dsv/scipro/SciProSession.java +++ b/src/main/java/se/su/dsv/scipro/SciProSession.java @@ -186,6 +186,8 @@ public class SciProSession extends WebSession { Project activeProject = userSettings.getActiveProject(); if(activeProject != null) activeProjectId = activeProject.getId(); + else + activeProjectId = null; } else { userSettings = new UserSettings(user); From ebd17c914c67947fd29fccd23888055eb22aa99e Mon Sep 17 00:00:00 2001 From: mpeters <mpeters@dsv.su.se> Date: Thu, 28 Jul 2011 15:31:12 +0200 Subject: [PATCH 13/17] Change of menu order Change-Id: I55961b2e54627246b904ca0870db95aaffa877ec --- .../su/dsv/scipro/peer/pages/AbstractSupervisorPeerPage.java | 4 ++-- .../su/dsv/scipro/peer/pages/ProjectPeerReviewGuidePage.java | 4 ++++ .../dsv/scipro/peer/pages/SupervisorPeerReviewGuidePage.java | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/peer/pages/AbstractSupervisorPeerPage.java b/src/main/java/se/su/dsv/scipro/peer/pages/AbstractSupervisorPeerPage.java index 674b792bc7..95630ea6ae 100644 --- a/src/main/java/se/su/dsv/scipro/peer/pages/AbstractSupervisorPeerPage.java +++ b/src/main/java/se/su/dsv/scipro/peer/pages/AbstractSupervisorPeerPage.java @@ -21,9 +21,9 @@ public abstract class AbstractSupervisorPeerPage extends AbstractSupervisorPage @Override protected List<MenuItem> getItemList() { - final List<MenuItem> items = new ArrayList<MenuItem>(); - items.add(new MenuItem("My projects", SupervisorPeerStatsPage.class, MenuHighlightReviewPage.class, ImageIcon.ICON_STATISTICS)); + final List<MenuItem> items = new ArrayList<MenuItem>(); items.add(new MenuItem("Peer portal", SupervisorPeerPortalPage.class, ImageIcon.ICON_FIND)); + items.add(new MenuItem("My projects", SupervisorPeerStatsPage.class, MenuHighlightReviewPage.class, ImageIcon.ICON_STATISTICS)); items.add(new MenuItem("How to write a good review", SupervisorPeerReviewGuidePage.class, ImageIcon.ICON_HELP)); return items; } diff --git a/src/main/java/se/su/dsv/scipro/peer/pages/ProjectPeerReviewGuidePage.java b/src/main/java/se/su/dsv/scipro/peer/pages/ProjectPeerReviewGuidePage.java index 646f7d2812..0b43a15fe7 100644 --- a/src/main/java/se/su/dsv/scipro/peer/pages/ProjectPeerReviewGuidePage.java +++ b/src/main/java/se/su/dsv/scipro/peer/pages/ProjectPeerReviewGuidePage.java @@ -2,6 +2,10 @@ package se.su.dsv.scipro.peer.pages; import org.apache.wicket.PageParameters; +import se.su.dsv.scipro.security.auth.Authorization; +import se.su.dsv.scipro.security.auth.roles.Roles; + +@Authorization(authorizedRoles={Roles.SYSADMIN}) public class ProjectPeerReviewGuidePage extends AbstractProjectPeerPage { public ProjectPeerReviewGuidePage(PageParameters pp) { diff --git a/src/main/java/se/su/dsv/scipro/peer/pages/SupervisorPeerReviewGuidePage.java b/src/main/java/se/su/dsv/scipro/peer/pages/SupervisorPeerReviewGuidePage.java index 5331d6a8ba..bc76c49272 100644 --- a/src/main/java/se/su/dsv/scipro/peer/pages/SupervisorPeerReviewGuidePage.java +++ b/src/main/java/se/su/dsv/scipro/peer/pages/SupervisorPeerReviewGuidePage.java @@ -2,6 +2,10 @@ package se.su.dsv.scipro.peer.pages; import org.apache.wicket.PageParameters; +import se.su.dsv.scipro.security.auth.Authorization; +import se.su.dsv.scipro.security.auth.roles.Roles; + +@Authorization(authorizedRoles={Roles.SYSADMIN}) public class SupervisorPeerReviewGuidePage extends AbstractSupervisorPeerPage { public SupervisorPeerReviewGuidePage(PageParameters pp) { From 3f55070871bb5304b40d5255104da54afb820dc0 Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Thu, 28 Jul 2011 15:31:41 +0200 Subject: [PATCH 14/17] buggfixes for conference --- .../dsv/scipro/basepanels/MainMenuPanel.java | 4 +- .../panels/CreateCheckListTemplatePanel.html | 25 +++ .../panels/CreateCheckListTemplatePanel.java | 159 ++++++++++++++++++ .../checklists/panels/TrafficLightPanel.html | 12 +- .../checklists/panels/TrafficLightPanel.java | 110 ++++++++++-- .../pages/ProjectConferencePage.java | 32 +--- .../pages/SupervisorConferencePage.java | 30 +--- .../conference/panels/ConferencePanel.java | 33 +++- .../impl/NotificationControllerImpl.java | 2 +- .../data/dao/interfaces/BoardMessageDao.java | 3 +- .../data/dao/interfaces/MessageBoardDao.java | 5 +- .../data/dao/jpa/BoardMessageDaoJPAImp.java | 27 ++- .../data/dao/jpa/MessageBoardDaoJPAImp.java | 1 + .../scipro/data/dataobjects/BoardMessage.java | 21 --- .../scipro/data/dataobjects/MessageBoard.java | 44 +++-- ...eckPage.html => ProjectChecklistPage.html} | 3 +- .../project/pages/ProjectChecklistPage.java | 22 +++ .../scipro/project/pages/SelfCheckPage.java | 19 --- .../project/panels/ProjectTabMenuPanel.java | 4 +- src/main/resources/META-INF/persistence.xml | 8 + src/main/webapp/WEB-INF/web.xml | 4 +- .../dao/jpa/TestBoardMessageDaoJPA.java | 21 ++- 22 files changed, 437 insertions(+), 152 deletions(-) create mode 100644 src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.html create mode 100644 src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java rename src/main/java/se/su/dsv/scipro/project/pages/{SelfCheckPage.html => ProjectChecklistPage.html} (55%) create mode 100644 src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java delete mode 100644 src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java diff --git a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java b/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java index d81e73fe2b..1598d646fe 100644 --- a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java +++ b/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java @@ -27,7 +27,7 @@ import se.su.dsv.scipro.project.pages.FinalSeminarProjectListPage; import se.su.dsv.scipro.project.pages.ProjectOppositionPage; import se.su.dsv.scipro.project.pages.ProjectPartnerPage; import se.su.dsv.scipro.project.pages.ProjectStartPage; -import se.su.dsv.scipro.project.pages.SelfCheckPage; +import se.su.dsv.scipro.project.pages.ProjectChecklistPage; import se.su.dsv.scipro.security.auth.MetaDataActionStrategy; import se.su.dsv.scipro.security.auth.roles.Roles; import se.su.dsv.scipro.supervisor.pages.SupervisorProjectsFinalSeminarPage; @@ -57,8 +57,6 @@ public class MainMenuPanel extends Panel implements IWiQueryPlugin { projectMenuSubItems.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class)); projectMenuSubItems.add(new MenuItem(ProjectOppositionPage.MAIN_MENU_LABEL, ProjectOppositionPage.class)); projectMenuSubItems.add(new MenuItem(FinalSeminarProjectListPage.MAIN_MENU_LABEL, FinalSeminarProjectListPage.class)); - projectMenuSubItems.add(new MenuItem("Project Partner", ProjectPartnerPage.class)); - projectMenuSubItems.add(new MenuItem("Self Check", SelfCheckPage.class)); MainMenuItem projectMenuItem = new MainMenuItem("projectMenuItem", ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class, containerClass, projectMenuSubItems); add(projectMenuItem); diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.html b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.html new file mode 100644 index 0000000000..ae81354e01 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<head> +<meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> +</head> +<body> + <wicket:panel> + <div wicket:id="feedbackPanel"></div> + <form wicket:id="form"> + <div> + <input wicket:id="questions" type="text" /> + </div> + <input wicket:id="button" type="submit"/> + </form> + <div> + <a href="#" wicket:id="link">Print</a> + </div> + + <div> + <a href="#" wicket:id="newLink">New Link</a> + </div> + </wicket:panel> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java new file mode 100644 index 0000000000..5705cfbd88 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java @@ -0,0 +1,159 @@ +package se.su.dsv.scipro.checklists.panels; + +import java.util.ArrayList; +import java.util.List; +import java.util.SortedSet; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.basic.MultiLineLabel; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.Radio; +import org.apache.wicket.markup.html.form.RadioChoice; +import org.apache.wicket.markup.html.form.RadioGroup; +import org.apache.wicket.markup.html.form.RequiredTextField; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.spring.injection.annot.SpringBean; + +import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.data.dao.interfaces.CheckListAnswerDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListQuestionDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListTemplateDao; +import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao; +import se.su.dsv.scipro.data.dataobjects.CheckList; +import se.su.dsv.scipro.data.dataobjects.CheckListAnswer; +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; +import se.su.dsv.scipro.data.dataobjects.CheckListTemplate; +import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings; +import se.su.dsv.scipro.data.dataobjects.ProjectClass; +import se.su.dsv.scipro.data.enums.CheckListQuestionAnswer; +import se.su.dsv.scipro.data.enums.StateOfMind; +import se.su.dsv.scipro.knol.resource.page.StaticImage; +import edu.emory.mathcs.backport.java.util.Arrays; + +/** + * @author fnorbe@dsv.su.se + */ + +public class CreateCheckListTemplatePanel extends Panel { + + private static final long serialVersionUID = 8862892008428526067L; + + @SpringBean + private CheckListDao checkListDao; + + @SpringBean + private CheckListAnswerDao checkListAnswerDao; + + @SpringBean + private CheckListQuestionDao checkListQuestionDao; + + @SpringBean + private CheckListTemplateDao checkListTemplateDao; + + @SpringBean + private ProjectClassDao projectClassDao; + + private String question = ""; + private String title = ""; + + private ProjectClass projectClass; + + private CheckListTemplate checkListTemplate = new CheckListTemplate(); + + public CreateCheckListTemplatePanel(String id) { + super(id); + projectClass = projectClassDao.getProjectClass(ProjectClass.BACHELOR); + final FeedbackPanel feedbackPanel = new FeedbackPanel("feedbackPanel"); + feedbackPanel.setOutputMarkupId(true); + add(feedbackPanel); + Form<CheckListTemplate> form = new Form<CheckListTemplate>("form"); + final TextField<String> titleField = new RequiredTextField<String>("title", + new PropertyModel<String>(this, "title")); + final TextField<String> questionField = new RequiredTextField<String>("questions", + new PropertyModel<String>(this, "question")); + questionField.setOutputMarkupId(true); + RadioChoice<ProjectClass> radioChoice = new RadioChoice<ProjectClass>("view", + new PropertyModel<ProjectClass>(this, "projectClass"), projectClassDao.findAll()); + + IModel<List<String>> questionModel = new LoadableDetachableModel<List<String>>() { + + private static final long serialVersionUID = 1L; + + @Override + protected List<String> load() { + // TODO Auto-generated method stub + return checkListTemplate.getQuestions(); + } + }; + + AjaxLink<Void> printLink = new AjaxLink<Void>("addQuestionLink") { + + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + checkListTemplate.getQuestions().add(question); + question = ""; + target.addComponent(questionField); + } + }; + AjaxButton button = new AjaxButton("button", new Model<String>("Save")) { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + protected void onSubmit(AjaxRequestTarget target, Form<?> form) { + + checkListTemplate.setLevel(projectClass); + checkListTemplate.setCreator(SciProSession.get().getUser()); + checkListTemplate.setName(title); + + target.addComponent(feedbackPanel); + + } + }; + form.add(titleField); + form.add(radioChoice); + form.add(button); + form.add(questionField); + add(form); + + + + AjaxLink<Void> newLink = new AjaxLink<Void>("newLink") { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + checkListTemplate = new CheckListTemplate(); + + } + }; + add(printLink); + add(newLink); + + }; + +} diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html index a235198823..ed606075c0 100644 --- a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html @@ -11,11 +11,19 @@ <table wicket:id="group"> <tr wicket:id="persons"> <td><input type="radio" wicket:id="radio" /></td> - <td> <img wicket:id="image"/></td> - </tr> + <td><img wicket:id="image" /></td> + </tr> </table> </form> </div> + <div wicket:id="checkLists"> + <div wicket:id="listView"> + <span wicket:id="question"></span> + <div wicket:id="listViewAnswer"> + <span wicket:id="answer"></span> + </div> + </div> + </div> </wicket:panel> </body> </html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java index 1aa44102c5..bc91621b35 100644 --- a/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java +++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java @@ -1,28 +1,29 @@ package se.su.dsv.scipro.checklists.panels; -import org.apache.wicket.AttributeModifier; -import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; -import org.apache.wicket.ajax.AjaxRequestTarget; +import java.util.ArrayList; +import java.util.List; + import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.basic.MultiLineLabel; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.Radio; import org.apache.wicket.markup.html.form.RadioGroup; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.Model; -import org.apache.wicket.model.PropertyModel; import org.apache.wicket.spring.injection.annot.SpringBean; -import org.odlabs.wiquery.ui.core.DefaultJsScopeUiEvent; -import org.odlabs.wiquery.ui.slider.Slider; import se.su.dsv.scipro.SciProSession; -import se.su.dsv.scipro.data.dao.interfaces.ProjectDao; -import se.su.dsv.scipro.data.dataobjects.Project; +import se.su.dsv.scipro.data.dao.interfaces.CheckListAnswerDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListQuestionDao; +import se.su.dsv.scipro.data.dao.interfaces.CheckListTemplateDao; +import se.su.dsv.scipro.data.dataobjects.CheckList; +import se.su.dsv.scipro.data.dataobjects.CheckListAnswer; +import se.su.dsv.scipro.data.dataobjects.CheckListQuestion; +import se.su.dsv.scipro.data.enums.CheckListQuestionAnswer; import se.su.dsv.scipro.data.enums.StateOfMind; import se.su.dsv.scipro.knol.resource.page.StaticImage; import edu.emory.mathcs.backport.java.util.Arrays; @@ -33,14 +34,23 @@ import edu.emory.mathcs.backport.java.util.Arrays; public class TrafficLightPanel extends Panel { - private static final long serialVersionUID = 8862892008428526067L; + @SpringBean + private CheckListDao checkListDao; - public TrafficLightPanel(String id, WebPage parent) { + @SpringBean + private CheckListAnswerDao checkListAnswerDao; + + @SpringBean + private CheckListQuestionDao checkListQuestionDao; + + @SpringBean + private CheckListTemplateDao checkListTemplateDao; + + public TrafficLightPanel(String id) { super(id); - WebMarkupContainer stateOfMindContainer = new WebMarkupContainer( - "stateOfMindContainer"); + WebMarkupContainer stateOfMindContainer = new WebMarkupContainer("stateOfMindContainer"); add(stateOfMindContainer); Form<StateOfMind> f = new Form<StateOfMind>("form"); @@ -59,16 +69,80 @@ public class TrafficLightPanel extends Panel { "images/icons/green_ball_32.png")); } else if (stateOfMind.equals(StateOfMind.NEEDHELP)) { image = new StaticImage("image", new Model<String>( - "images/icons/red_ball_32.png")); + "images/icons/red_ball_32.png")); } else if (stateOfMind.equals(StateOfMind.NEUTRAL)) { image = new StaticImage("image", new Model<String>( - "images/icons/yellow_ball_32.png")); + "images/icons/yellow_ball_32.png")); } item.add(image); }; }; group.add(persons); - } + + List<CheckList> checkLists = checkListDao.findCheckLists(SciProSession.get() + .getActiveProject()); + if (checkLists.size() < 1) { + CheckList checkList = new CheckList("Test", SciProSession.get().getActiveProject()); + CheckListQuestion checkListQuestion = new CheckListQuestion("Testquestion?"); + checkListQuestion = checkListQuestionDao.save(checkListQuestion); + checkList.getQuestions().add(checkListQuestion); + checkList = checkListDao.save(checkList); + } + + ListView<CheckList> checkListsListView = new ListView<CheckList>("checkLists", checkLists) { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<CheckList> item) { + + ListView<CheckListQuestion> listView = new ListView<CheckListQuestion>( + "listView", + new ArrayList<CheckListQuestion>(item.getModel().getObject().getQuestions())) { + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<CheckListQuestion> item) { + CheckListQuestion checkListQuestion = item.getModel().getObject(); + if(checkListQuestion.getAnswers().size() == 0){ + CheckListAnswer checkListAnswer = new CheckListAnswer(SciProSession.get().getUser(), CheckListQuestionAnswer.GREEN); + checkListAnswer = checkListAnswerDao.save(checkListAnswer); + checkListQuestion.getAnswers().add(checkListAnswer); + checkListQuestionDao.save(checkListQuestion); + + } + item.add(new Label("question", item.getModel().getObject().getQuestion())); + + ListView<CheckListAnswer> listView = new ListView<CheckListAnswer>( + "listViewAnswer", + new ArrayList<CheckListAnswer>(item.getModel().getObject().getAnswers())) { + + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(ListItem<CheckListAnswer> item) { + item.add(new Label("answer", item.getModel().getObject().getAnswer().toString())); + + + } + + }; + item.add(listView); + + } + + }; + + item.add(listView); + + } + }; + + add(checkListsListView); + }; } - diff --git a/src/main/java/se/su/dsv/scipro/conference/pages/ProjectConferencePage.java b/src/main/java/se/su/dsv/scipro/conference/pages/ProjectConferencePage.java index 904cfd0479..915b18711c 100644 --- a/src/main/java/se/su/dsv/scipro/conference/pages/ProjectConferencePage.java +++ b/src/main/java/se/su/dsv/scipro/conference/pages/ProjectConferencePage.java @@ -5,12 +5,12 @@ package se.su.dsv.scipro.conference.pages; import java.util.HashSet; import java.util.Set; -import java.util.StringTokenizer; import org.apache.wicket.PageParameters; import org.apache.wicket.RequestCycle; import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.html.panel.EmptyPanel; +import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.protocol.http.RequestUtils; @@ -53,24 +53,10 @@ public class ProjectConferencePage extends ProjectPage { public ProjectConferencePage(PageParameters pp) { super(pp); - String projectId = pp.getString("pid"); - String boardMessageId = null; - if (projectId != null) { - StringTokenizer stringTokenizer = new StringTokenizer(projectId, "&"); - boolean first = true; - for (int i = 0; i < 2; i++) { - if (stringTokenizer.hasMoreTokens()) { - if (first) { - projectId = stringTokenizer.nextToken().trim(); - first = false; - } else { - boardMessageId = stringTokenizer.nextToken().trim(); - } - } - } - } + Long projectId = pp.getAsLong("pid"); + Long boardMessageId = pp.getAsLong("cid"); if (projectId == null && SciProSession.get().getActiveProject() != null) { - projectId = String.valueOf(SciProSession.get().getActiveProject().getId()); + projectId = SciProSession.get().getActiveProject().getId(); } if (projectId != null) { final Project project = projectDao.load(Long.valueOf(projectId)); @@ -126,23 +112,23 @@ public class ProjectConferencePage extends ProjectPage { messageBoard.setTitle(projectModel.getObject().getTitle()); messageBoard = messageBoardDao.save(messageBoard); } - messageBoardModel = new LoadableDetachableModel<MessageBoard>() { + messageBoardModel = new AbstractReadOnlyModel<MessageBoard>() { private static final long serialVersionUID = 1L; @Override - protected MessageBoard load() { + public MessageBoard getObject() { return messageBoardDao.reLoad(messageBoard); } }; if (boardMessageId != null) { final BoardMessage bm = boardMessageDao.load(Long.valueOf(boardMessageId)); - if (bm != null && messageBoard.getBoardMessageSet().contains(bm)) { - boardMessageModel = new LoadableDetachableModel<BoardMessage>() { + if (bm != null) { + boardMessageModel = new AbstractReadOnlyModel<BoardMessage>() { private static final long serialVersionUID = 1L; @Override - protected BoardMessage load() { + public BoardMessage getObject() { return boardMessageDao.reLoad(bm); } }; diff --git a/src/main/java/se/su/dsv/scipro/conference/pages/SupervisorConferencePage.java b/src/main/java/se/su/dsv/scipro/conference/pages/SupervisorConferencePage.java index 248bcb088d..77e4fbe596 100644 --- a/src/main/java/se/su/dsv/scipro/conference/pages/SupervisorConferencePage.java +++ b/src/main/java/se/su/dsv/scipro/conference/pages/SupervisorConferencePage.java @@ -11,6 +11,7 @@ import org.apache.wicket.PageParameters; import org.apache.wicket.RequestCycle; import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.html.panel.EmptyPanel; +import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.protocol.http.RequestUtils; @@ -56,22 +57,8 @@ public class SupervisorConferencePage extends AbstractSupervisorPage { public SupervisorConferencePage(PageParameters pp) { super(pp); - String projectId = pp.getString("pid"); - String boardMessageId = null; - if (projectId != null) { - StringTokenizer stringTokenizer = new StringTokenizer(projectId, "&"); - boolean first = true; - for (int i = 0; i < 2; i++) { - if (stringTokenizer.hasMoreTokens()) { - if (first) { - projectId = stringTokenizer.nextToken().trim(); - first = false; - } else { - boardMessageId = stringTokenizer.nextToken().trim(); - } - } - } - } + Long projectId = pp.getAsLong(PROJECTID); + Long boardMessageId = pp.getAsLong("cid"); if (projectId == null) { add(new EmptyPanel("conferencePanel")); } else { @@ -122,23 +109,24 @@ public class SupervisorConferencePage extends AbstractSupervisorPage { messageBoard.setTitle(projectModel.getObject().getTitle()); messageBoard = messageBoardDao.save(messageBoard); } - messageBoardModel = new LoadableDetachableModel<MessageBoard>() { + messageBoardModel = new AbstractReadOnlyModel<MessageBoard>() { private static final long serialVersionUID = 1L; @Override - protected MessageBoard load() { + public MessageBoard getObject() { return messageBoardDao.reLoad(messageBoard); } + }; if (boardMessageId != null) { final BoardMessage bm = boardMessageDao.load(Long.valueOf(boardMessageId)); - if (bm != null && messageBoard.getBoardMessageSet().contains(bm)) { - boardMessageModel = new LoadableDetachableModel<BoardMessage>() { + if (bm != null) { + boardMessageModel = new AbstractReadOnlyModel<BoardMessage>() { private static final long serialVersionUID = 1L; @Override - protected BoardMessage load() { + public BoardMessage getObject() { return boardMessageDao.reLoad(bm); } }; diff --git a/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java b/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java index c22e32565b..9fdc4a4fb1 100644 --- a/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java +++ b/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java @@ -32,6 +32,7 @@ import se.su.dsv.scipro.data.controllers.NotificationController; import se.su.dsv.scipro.data.controllers.NotificationMessage; import se.su.dsv.scipro.data.dao.interfaces.BoardMessageDao; import se.su.dsv.scipro.data.dao.interfaces.CommentThreadDao; +import se.su.dsv.scipro.data.dao.interfaces.MessageBoardDao; import se.su.dsv.scipro.data.dataobjects.BoardMessage; import se.su.dsv.scipro.data.dataobjects.MessageBoard; import se.su.dsv.scipro.data.dataobjects.User; @@ -51,6 +52,8 @@ public class ConferencePanel extends Panel { private BoardMessageDao boardMessageDao; @SpringBean private CommentThreadDao commentThreadDao; + @SpringBean + private MessageBoardDao messageBoardDao; @SpringBean private NotificationController notificationController; @@ -61,6 +64,7 @@ public class ConferencePanel extends Panel { private IModel<BoardMessage> boardMessageModel; private Set<SubscriberModel> subscriberModels; private FeedbackPanel feedbackPanel; + private final static int BOARDMESSAGESPERPAGE = 10; public ConferencePanel(String id, IModel<MessageBoard> messageBoardModel, Set<SubscriberModel> subscriberModels, IModel<BoardMessage> boardMessageModel) { @@ -80,7 +84,7 @@ public class ConferencePanel extends Panel { feedbackPanel = new FeedbackPanel("feedbackPanel"); feedbackPanel.setOutputMarkupId(true); add(feedbackPanel); - + add(new SendWallMessageForm("sendForm")); webMarkupContainer = new WebMarkupContainer("container"); loadUserDataView(new BoardMessageDataProvider(messageBoardModel)); @@ -88,11 +92,17 @@ public class ConferencePanel extends Panel { webMarkupContainer.setOutputMarkupId(true); webMarkupContainer.add(new PagingNavigator("pagingNavigator", dataView)); add(webMarkupContainer); + if (boardMessageModel != null) { + + int index = boardMessageDao.getBoardMessageSortOrderIndex(boardMessageModel.getObject()); + System.out.println(index); + dataView.setCurrentPage(index/BOARDMESSAGESPERPAGE); + } } public void loadUserDataView(IDataProvider<BoardMessage> boardMessageDataProvider) { - dataView = new DataView<BoardMessage>("boardMessageDataView", boardMessageDataProvider, 10) { + dataView = new DataView<BoardMessage>("boardMessageDataView", boardMessageDataProvider, BOARDMESSAGESPERPAGE) { private static final long serialVersionUID = 1L; @@ -112,8 +122,10 @@ public class ConferencePanel extends Panel { @Override public void onClick(AjaxRequestTarget target) { - BoardMessage boardMessageTemp = boardMessageDao.reLoad(bm); - boardMessageDao.delete(boardMessageTemp); + MessageBoard mb = messageBoardModel.getObject(); + mb.getBoardMessages().remove(boardMessageDao.reLoad(bm)); + messageBoardDao.save(mb); + boardMessageDao.delete(boardMessageDao.reLoad(bm)); webMarkupContainer.removeAll(); loadUserDataView(new BoardMessageDataProvider(messageBoardModel)); webMarkupContainer.add(dataView); @@ -242,23 +254,28 @@ public class ConferencePanel extends Panel { } else { BoardMessage bm = new BoardMessage(); bm.setMessage(message); - bm.setMessageBoard(messageBoardModel.getObject()); bm.setFromUser(SciProSession.get().getUser()); bm = boardMessageDao.save(bm); + + MessageBoard mb = messageBoardModel.getObject(); + mb.addToBoardMessages(bm); + messageBoardDao.save(mb); for (SubscriberModel subscriberModel : subscriberModels) { - notificationController.notifyConferencePost(subscriberModel.getUser(), message, messageBoardModel.getObject().getTitle(), + notificationController.notifyConferencePost(subscriberModel.getUser(), + message, messageBoardModel.getObject().getTitle(), subscriberModel.getNotificationPriority(), subscriberModel.getAbsolutePath()); } + messageTextArea.setDefaultModelObject(""); webMarkupContainer.removeAll(); loadUserDataView(new BoardMessageDataProvider(messageBoardModel)); webMarkupContainer.add(dataView); webMarkupContainer.add(new PagingNavigator("pagingNavigator", dataView)); target.addComponent(webMarkupContainer); - target.addComponent(messageTextArea); - + target.addComponent(messageTextArea); + } target.addComponent(feedbackPanel); } diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java index fb11252c3f..1e7a680d93 100644 --- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java +++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/NotificationControllerImpl.java @@ -224,7 +224,7 @@ public class NotificationControllerImpl implements NotificationController { NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage, mailSubject, mailMessage); - processNotification(user, notificationMessage, absolutePath + "&" + classId, + processNotification(user, notificationMessage, absolutePath + "/cid/" + classId, notificationPriority); } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java index 3603f8a918..9e1a0636cd 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/BoardMessageDao.java @@ -4,7 +4,6 @@ import java.util.List; import se.su.dsv.scipro.data.dataobjects.BoardMessage; import se.su.dsv.scipro.data.dataobjects.MessageBoard; -import se.su.dsv.scipro.data.dataobjects.User; /** * @author Johan Aschan - aschan@dsv.su.se @@ -17,4 +16,6 @@ public interface BoardMessageDao extends Dao<BoardMessage>{ final int count); public int getBoardMessageListCount(final MessageBoard mb); + public int getBoardMessageSortOrderIndex(final BoardMessage bm); + } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java index 2d18e06550..f7d7bc6fa4 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/MessageBoardDao.java @@ -4,7 +4,6 @@ package se.su.dsv.scipro.data.dao.interfaces; import se.su.dsv.scipro.data.dataobjects.MessageBoard; -import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.dataobjects.interfaces.Commentable; /** @@ -15,6 +14,6 @@ import se.su.dsv.scipro.data.dataobjects.interfaces.Commentable; public interface MessageBoardDao extends Dao<MessageBoard>{ - public MessageBoard getMessageBoard(Commentable commentableDomainObject); - + public MessageBoard getMessageBoard(final Commentable commentableDomainObject); + } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageDaoJPAImp.java index fbf94f58ae..d750476587 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/BoardMessageDaoJPAImp.java @@ -19,7 +19,6 @@ import org.springframework.transaction.annotation.Transactional; import se.su.dsv.scipro.data.dao.interfaces.BoardMessageDao; import se.su.dsv.scipro.data.dataobjects.BoardMessage; import se.su.dsv.scipro.data.dataobjects.MessageBoard; -import se.su.dsv.scipro.data.dataobjects.User; /** * @author Johan Aschan - aschan@dsv.su.se @@ -44,7 +43,7 @@ public class BoardMessageDaoJPAImp extends AbstractDaoJPAImp<BoardMessage> TypedQuery<BoardMessage> query = em .createQuery( "select bm FROM BoardMessage bm, MessageBoard mb " + - "WHERE bm member of mb.boardMessageSet AND mb = :mb ORDER BY bm.dateCreated DESC", BoardMessage.class); + "WHERE bm member of mb.boardMessages AND mb = :mb ORDER BY bm.dateCreated DESC", BoardMessage.class); query.setHint(QueryHints.HINT_CACHEABLE, "true"); query.setParameter("mb", mb); query.setFirstResult(first); @@ -68,7 +67,7 @@ public class BoardMessageDaoJPAImp extends AbstractDaoJPAImp<BoardMessage> TypedQuery<Long> query = em .createQuery( "SELECT COUNT (bm) FROM BoardMessage bm, MessageBoard mb " + - "WHERE bm member of mb.boardMessageSet AND mb = :mb", Long.class); + "WHERE bm member of mb.boardMessages AND mb = :mb", Long.class); query.setHint(QueryHints.HINT_CACHEABLE, "true"); query.setParameter("mb", mb); return query.getSingleResult().intValue(); @@ -77,6 +76,24 @@ public class BoardMessageDaoJPAImp extends AbstractDaoJPAImp<BoardMessage> }); } - - + + // Hibernate seemms not to support the index operator for the moment, but this query should be used if it does in the future. + @Override + @Transactional(readOnly = true) + public int getBoardMessageSortOrderIndex(final BoardMessage bm){ + return getJpaTemplate().execute(new JpaCallback<Integer>() { + @Override + public Integer doInJpa(EntityManager em) + throws PersistenceException { + TypedQuery<Integer> query = em + .createQuery( + "SELECT index(b) FROM MessageBoard mb JOIN mb.boardMessages b " + + "WHERE b = :bm", Integer.class); + query.setHint(QueryHints.HINT_CACHEABLE, "true"); + query.setParameter("bm", bm); + return query.getSingleResult().intValue(); + + } + }); + } } diff --git a/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardDaoJPAImp.java index 649deda415..c2882b4c09 100644 --- a/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardDaoJPAImp.java +++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/MessageBoardDaoJPAImp.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import se.su.dsv.scipro.data.dao.interfaces.MessageBoardDao; +import se.su.dsv.scipro.data.dataobjects.BoardMessage; import se.su.dsv.scipro.data.dataobjects.MessageBoard; import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.dataobjects.interfaces.Commentable; diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java index 6dbf3d0161..6008a96fe9 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/BoardMessage.java @@ -7,14 +7,12 @@ import java.util.ArrayList; import java.util.List; import javax.persistence.Cacheable; -import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; -import javax.persistence.OneToOne; import javax.persistence.Table; import org.hibernate.annotations.Cache; @@ -48,9 +46,6 @@ public class BoardMessage extends DomainObject implements Commentable, Comparabl @OneToMany private List<BoardMessage> replyMessageList = new ArrayList<BoardMessage>(0); - @ManyToOne(optional=false) - private MessageBoard messageBoard; - @Override public Long getId() { return id; @@ -65,20 +60,6 @@ public class BoardMessage extends DomainObject implements Commentable, Comparabl } - /** - * @return the messageBoard - */ - public MessageBoard getMessageBoard() { - return messageBoard; - } - - /** - * @param messageBoard the messageBoard to set - */ - public void setMessageBoard(MessageBoard messageBoard) { - this.messageBoard = messageBoard; - } - @Override public String getCommentKey() { return BoardMessage.class.getCanonicalName().toString(); @@ -140,8 +121,6 @@ public class BoardMessage extends DomainObject implements Commentable, Comparabl } if(this.getId() != null && o.getId() != null) return this.getId().compareTo(o.getId()); - if(this.message != null && o.message != null) - return message.compareTo(o.message); //By now we have to conclude the two objects are basically two objects full of nulls return 0; } diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java index ec7ab1259f..8441e6b0d4 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java @@ -4,6 +4,7 @@ package se.su.dsv.scipro.data.dataobjects; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; @@ -15,7 +16,10 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import javax.persistence.ManyToMany; import javax.persistence.OneToMany; +import javax.persistence.OrderBy; +import javax.persistence.OrderColumn; import javax.persistence.PrePersist; import javax.persistence.PreUpdate; import javax.persistence.Table; @@ -50,7 +54,7 @@ public class MessageBoard extends DomainObject{ } @Basic(optional=false) - public String title; + private String title; @Basic(optional=false) @Column(length=255) @@ -70,32 +74,36 @@ public class MessageBoard extends DomainObject{ if(getCommentableKey().length() > 255) throw new IllegalArgumentException("CommentThread-commentableKey may not be longer than 255 characters"); } - - - @Sort(type=SortType.NATURAL) - @OneToMany(mappedBy="messageBoard", orphanRemoval=true, cascade=CascadeType.ALL, targetEntity=BoardMessage.class) - private SortedSet<BoardMessage> boardMessageSet = new TreeSet<BoardMessage>(); + @OrderColumn(name="orderIndex") + @ManyToMany + private List<BoardMessage> boardMessages = new ArrayList<BoardMessage>(); - public List<BoardMessage> getBoardMessageList() { - return new ArrayList<BoardMessage>(boardMessageSet); - } - - public SortedSet<BoardMessage> getBoardMessageSet() { - return boardMessageSet; - } - - - public void setBoardMessageSet( SortedSet<BoardMessage> boardMessageList) { - this.boardMessageSet = boardMessageList; + /** + * @return the boardMessages + */ + public List<BoardMessage> getBoardMessages() { + return boardMessages; } /** - * @return the commentableKey + * @param boardMessages the boardMessages to set */ + public void setBoardMessages(List<BoardMessage> boardMessages) { + this.boardMessages = boardMessages; + } + public String getCommentableKey() { return commentableKey; } + + public void addToBoardMessages(BoardMessage boardMessage){ + int pos = Collections.binarySearch(boardMessages, boardMessage); + if (pos < 0) { + pos = -pos - 1; + } + boardMessages.add(pos, boardMessage); + } /** * @param commentableKey the commentableKey to set */ diff --git a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.html similarity index 55% rename from src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html rename to src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.html index bca333a27b..2921c71d9a 100644 --- a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.html +++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.html @@ -3,7 +3,8 @@ xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <body> <wicket:extend> - <div wicket:id="trafficLightPanel""></div> +<!-- <div wicket:id="trafficLightPanel"></div> --> +<!-- <div wicket:id="createCheckList"></div> --> </wicket:extend> </body> </html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java new file mode 100644 index 0000000000..ad39c2dbc3 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java @@ -0,0 +1,22 @@ +package se.su.dsv.scipro.project.pages; + +import org.apache.wicket.PageParameters; + +import se.su.dsv.scipro.security.auth.Authorization; +import se.su.dsv.scipro.security.auth.roles.Roles; + +/** + * @author Fredrik Norberg - fnorbe@dsv.su.se + * + */ + +@Authorization(authorizedRoles={Roles.SYSADMIN}) //TODO Hidden for initial deployment +public class ProjectChecklistPage extends ProjectPage { + + public ProjectChecklistPage(PageParameters pp) { + super(pp); + //add(new TrafficLightPanel("trafficLightPanel")); + //add(new CreateCheckListTemplatePanel("createCheckList")); + } + +} diff --git a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java b/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java deleted file mode 100644 index 2cdae57ca1..0000000000 --- a/src/main/java/se/su/dsv/scipro/project/pages/SelfCheckPage.java +++ /dev/null @@ -1,19 +0,0 @@ -package se.su.dsv.scipro.project.pages; - -import org.apache.wicket.PageParameters; - -import se.su.dsv.scipro.checklists.panels.TrafficLightPanel; - -/** - * @author Fredrik Norberg - fnorbe@dsv.su.se - * - */ - -public class SelfCheckPage extends ProjectPage { - - public SelfCheckPage(PageParameters pp) { - super(pp); - add(new TrafficLightPanel("trafficLightPanel", this)); - } - -} diff --git a/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java index 719379f0e4..d1ad784e74 100644 --- a/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java +++ b/src/main/java/se/su/dsv/scipro/project/panels/ProjectTabMenuPanel.java @@ -18,7 +18,7 @@ import se.su.dsv.scipro.project.pages.ProjectPage; import se.su.dsv.scipro.project.pages.ProjectPartnerPage; import se.su.dsv.scipro.project.pages.ProjectSchedulePlannerPage; import se.su.dsv.scipro.project.pages.ProjectStartPage; -import se.su.dsv.scipro.project.pages.SelfCheckPage; +import se.su.dsv.scipro.project.pages.ProjectChecklistPage; import se.su.dsv.scipro.repository.panels.ProjectFilePanel; /** @@ -48,7 +48,7 @@ public class ProjectTabMenuPanel extends AbstractMenuPanel { itemList.add(new MenuItem("Peer review", ProjectPeerPortalPage.class)); itemList.add(new MenuItem("All Final Seminars", FinalSeminarProjectListPage.class)); itemList.add(new MenuItem("Conference", ProjectConferencePage.class)); - itemList.add(new MenuItem("Self Check", SelfCheckPage.class)); + itemList.add(new MenuItem("Checklists", ProjectChecklistPage.class)); } else { itemList.add(new MenuItem("No active project!", NoActiveProjectPage.class)); itemList.add(new MenuItem("Project Partner", ProjectPartnerPage.class)); diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index cea9c530c7..7d6e6766b3 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -67,6 +67,10 @@ <class>se.su.dsv.scipro.data.dataobjects.ProjectPartner</class> <class>se.su.dsv.scipro.data.dataobjects.CheckPlagiarismEvent</class> <class>se.su.dsv.scipro.data.dataobjects.WebNotification</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListTemplate</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckList</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListAnswer</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListQuestion</class> <properties> @@ -171,6 +175,10 @@ <class>se.su.dsv.scipro.data.dataobjects.ProjectPartner</class> <class>se.su.dsv.scipro.data.dataobjects.CheckPlagiarismEvent</class> <class>se.su.dsv.scipro.data.dataobjects.WebNotification</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListTemplate</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckList</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListAnswer</class> + <class>se.su.dsv.scipro.data.dataobjects.CheckListQuestion</class> <properties> diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 7ea6274a27..63aefacc39 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -64,8 +64,8 @@ <!-- Use deployment for production, development for development --> <context-param> <param-name>configuration</param-name> -<!-- <param-value>development</param-value> --> - <param-value>deployment</param-value> + <param-value>development</param-value> +<!-- <param-value>deployment</param-value> --> </context-param> diff --git a/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java b/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java index 8b4ed74aa2..abd9ebcab1 100644 --- a/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java +++ b/src/test/java/se/su/dsv/scipro/dao/jpa/TestBoardMessageDaoJPA.java @@ -94,17 +94,24 @@ public class TestBoardMessageDaoJPA { Set<User> subscribers = new HashSet<User>(); subscribers.add(user); - messageBoard = new MessageBoard(presenterProject); - messageBoard.setTitle("test"); - messageBoard = messageBoardDao.save(messageBoard); + boardMessage = new BoardMessage(); boardMessage.setFromUser(user); boardMessage.setMessage("Test"); - boardMessage.setMessageBoard(messageBoard); boardMessage = boardMessageDao.save(boardMessage); + + boardMessage = new BoardMessage(); + boardMessage.setFromUser(user); + boardMessage.setMessage("Test"); + boardMessage = boardMessageDao.save(boardMessage); + + messageBoard = new MessageBoard(presenterProject); + messageBoard.setTitle("test"); + messageBoard.getBoardMessages().add(boardMessage); + messageBoard = messageBoardDao.save(messageBoard); } @@ -123,5 +130,11 @@ public class TestBoardMessageDaoJPA { Assert.assertEquals(1, boardMessageDao.getBoardMessageListCount(messageBoard)); } + @Test + @Transactional + @Rollback + public void getBoardMessageSortOrderIndex() { + Assert.assertEquals(0, boardMessageDao.getBoardMessageSortOrderIndex(boardMessage)); + } } From dd6ba53a364206146b8a0235bfc575429dc8e541 Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Thu, 28 Jul 2011 15:37:28 +0200 Subject: [PATCH 15/17] development in web.xml --- src/main/webapp/WEB-INF/web.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 63aefacc39..7ea6274a27 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -64,8 +64,8 @@ <!-- Use deployment for production, development for development --> <context-param> <param-name>configuration</param-name> - <param-value>development</param-value> -<!-- <param-value>deployment</param-value> --> +<!-- <param-value>development</param-value> --> + <param-value>deployment</param-value> </context-param> From adcc1324e4612af3ec629332ff30a4e7737736f9 Mon Sep 17 00:00:00 2001 From: joha-asc <aschan.johan@gmail.com> Date: Thu, 28 Jul 2011 15:42:24 +0200 Subject: [PATCH 16/17] new method for removing boardmessages --- .../conference/panels/ConferencePanel.java | 2 +- .../scipro/data/dataobjects/MessageBoard.java | 17 ++++------------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java b/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java index 9fdc4a4fb1..cf5a5225ff 100644 --- a/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java +++ b/src/main/java/se/su/dsv/scipro/conference/panels/ConferencePanel.java @@ -123,7 +123,7 @@ public class ConferencePanel extends Panel { public void onClick(AjaxRequestTarget target) { MessageBoard mb = messageBoardModel.getObject(); - mb.getBoardMessages().remove(boardMessageDao.reLoad(bm)); + mb.removeFromBoardMessages(boardMessageDao.reLoad(bm)); messageBoardDao.save(mb); boardMessageDao.delete(boardMessageDao.reLoad(bm)); webMarkupContainer.removeAll(); diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java index 8441e6b0d4..2cd5ea75da 100644 --- a/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java +++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/MessageBoard.java @@ -79,19 +79,6 @@ public class MessageBoard extends DomainObject{ @ManyToMany private List<BoardMessage> boardMessages = new ArrayList<BoardMessage>(); - - /** - * @return the boardMessages - */ - public List<BoardMessage> getBoardMessages() { - return boardMessages; - } - /** - * @param boardMessages the boardMessages to set - */ - public void setBoardMessages(List<BoardMessage> boardMessages) { - this.boardMessages = boardMessages; - } public String getCommentableKey() { return commentableKey; @@ -104,6 +91,10 @@ public class MessageBoard extends DomainObject{ } boardMessages.add(pos, boardMessage); } + + public void removeFromBoardMessages(BoardMessage boardMessage){ + boardMessages.remove(boardMessage); + } /** * @param commentableKey the commentableKey to set */ From 9c024d35411b10951474608cd8fce30e9c9a5195 Mon Sep 17 00:00:00 2001 From: Robin Eklund <robi-ekl@dsv.su.se> Date: Thu, 28 Jul 2011 15:45:06 +0200 Subject: [PATCH 17/17] Added year/month/day to logging output --- src/main/resources/log4j.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties index 4e2b15003a..b168ef7c2b 100644 --- a/src/main/resources/log4j.properties +++ b/src/main/resources/log4j.properties @@ -1,6 +1,6 @@ log4j.appender.Stdout=org.apache.log4j.ConsoleAppender log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.Stdout.layout.conversionPattern=%d{HH:mm:ss,SSS}[%p] - %c{1} - %m\n +log4j.appender.Stdout.layout.conversionPattern=%d{yyyy MMM dd HH:mm:ss,SSS}[%p] - %c{1} - %m\n log4j.rootLogger=INFO,Stdout