diff --git a/.gitignore b/.gitignore
index 2115d5fd97..a1b64d57b2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,6 @@
 \.classpath
 \target/**/*
 \target/*
+/.settings
+/.classpath
+/target
diff --git a/src/main/java/se/su/dsv/scipro/SciProApplication.properties b/src/main/java/se/su/dsv/scipro/SciProApplication.properties
new file mode 100644
index 0000000000..0614c8f4cb
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/SciProApplication.properties
@@ -0,0 +1,23 @@
+# Properties used by the NotificationControllerImpl. 
+
+# Web notifications:
+conferencePost.webNotification = ${firstName} ${lastName} posted on conference "{0}".
+pm.webNotification = ${firstName} ${lastName} wrote a private message to you.
+comment.webNotification = ${firstName} ${lastName} commented on a post on conference "{0}".
+finalSeminarEdit.webNotification = Final seminar for project "${project}" has been edited.
+finalSeminarCreated.webNotification = Head supervisor for "${project}" has created a final seminar, room ${room}, {0,date,yyyy-MM-dd HH:mm}{1,date,-HH:mm}
+finalSeminarCreatedOpponent.webNotification = Head supervisor for "${project}" has created a final seminar and added you as an opponent, room ${room}, {0,date,yyyy-MM-dd HH:mm}{1,date,-HH:mm}
+thesisUpload.webNotification = Thesis for the project "${project}" has been uploaded.
+oppositionUpload.webNotification = Opposition report for the project "${finalSeminar.project}" has been uploaded by ${opponent.user}.
+reviewAccepted.webNotification = Your peer request was accepted by {0}, he/she now has {1, number} days to complete a review. 
+reviewCompletedforRequester.webNotification = Your peer request has now been reviewed and is available.
+reviewCompletedforRequestSupervisor.webNotification = You are getting this message because you are supervisor of "${peerRequest.project.title}". A peer review on this project has been completed and is available for you.
+reviewCompletedforReviewSupervisor.webNotification = ${reviewer.user} in project: ${project.title} has performed a peer review.
+reviewRated.webNotification = Your review has been rated.
+# Mail notifications
+mailSubject = Notification from SciPro
+acceptPeerReviewSubject = Your request for peer review has been accepted
+completedReviewSubject = A peer review has been completed 
+reviewRatedSubject = You have received a rating for a review you have done
+mailNotification = Hello {0}, \n\n{1}\n\nClick on the link to see it in Scipro: \n{2} \n\nThis is an auto-generated message from SciPro. 
+mailBody = \n\n{0}
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);
diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java
index c78d650e5e..54746f2ca4 100644
--- a/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java
+++ b/src/main/java/se/su/dsv/scipro/admin/pages/AbstractAdminSettingsPage.java
@@ -34,7 +34,7 @@ public abstract class AbstractAdminSettingsPage extends AbstractAdminPage {
 				items.add(new MenuItem("Server Environment", AdminServerEnvironmentSettingsPage.class));
 				items.add(new MenuItem("Final seminar general settings", AdminFinalSeminarSettingsPage.class));
 				items.add(new MenuItem("Final seminar project level settings", AdminFinalSeminarSettingsPerProjectClassPage.class));
-				items.add(new MenuItem("Level settings", AdminPeerSettingsPage.class));
+				items.add(new MenuItem("Peer portal settings", AdminPeerSettingsPage.class));
 				items.add(new MenuItem("Edit levels", AdminProjectClassSettingsPage.class));
 
 				return items;
diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.html b/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.html
new file mode 100644
index 0000000000..815340b389
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>CheckLists</title>
+</head>
+<body>
+	<wicket:extend>
+	
+	<div class="span-22 last">
+	<!-- Left column -->
+		<div class="span-10 colborder">
+			<div class="span-10 last">
+				<div wicket:id="cCLPanel"></div>
+				</div>
+		</div>
+		<!-- Right column -->
+		<div class="span-10 last">
+			<div class="span-10 last">
+			<div wicket:id="listCLPanel"></div>
+			</div>
+		</div>
+	</div>
+	</wicket:extend>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.java
new file mode 100644
index 0000000000..0148b8c6f4
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/admin/pages/AdminCheckListPage.java
@@ -0,0 +1,36 @@
+package se.su.dsv.scipro.admin.pages;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.SubmitLink;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.spring.injection.annot.SpringBean;
+
+import se.su.dsv.scipro.checklists.panels.CreateCheckListTemplatePanel;
+import se.su.dsv.scipro.checklists.panels.ListCheckListTemplatePanel;
+import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao;
+import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings;
+import se.su.dsv.scipro.project.panels.ProjectPartnerPanel;
+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, Roles.ADMIN})
+public class AdminCheckListPage extends AbstractAdminPage {
+	
+
+	public static final String MAIN_MENU_LABEL = "CheckLists";
+	
+	public AdminCheckListPage(PageParameters pp) {
+		super(pp);
+		add(new CreateCheckListTemplatePanel("cCLPanel"));
+		add(new ListCheckListTemplatePanel("listCLPanel"));
+	}
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/AdminProjectPartnerPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/AdminProjectPartnerPage.java
index cc47dc9a00..9913aa204e 100644
--- a/src/main/java/se/su/dsv/scipro/admin/pages/AdminProjectPartnerPage.java
+++ b/src/main/java/se/su/dsv/scipro/admin/pages/AdminProjectPartnerPage.java
@@ -19,7 +19,7 @@ import se.su.dsv.scipro.security.auth.roles.Roles;
  *
  */
 
-@Authorization(authorizedRoles={Roles.SYSADMIN})
+@Authorization(authorizedRoles={Roles.SYSADMIN, Roles.ADMIN})
 public class AdminProjectPartnerPage extends AbstractAdminPage {
 	
 	@SpringBean
diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminPeerSettingsPage.html b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminPeerSettingsPage.html
index 377c1748b4..ace653e2b3 100644
--- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminPeerSettingsPage.html
+++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminPeerSettingsPage.html
@@ -24,7 +24,11 @@
 					<tr>
 						<td><label for="numberOfLatestReviewsDisplayed">Number of reviews to show in the "Latest reviewers" panel: </label></td>
 						<td><input type="text" wicket:id="numberOfLatestReviewsDisplayed" name="numberOfLatestReviewsDisplayed" /></td>
-					</tr>			
+					</tr>	
+					<tr>
+						<td><label for="publicReviewsActivated">Activate public reviews with links in "Latest reviewers" panel: </label></td>
+						<td><input type="checkbox" wicket:id="publicReviewsActivated" name="publicReviewsActivated" /></td>
+					</tr>		
 				</table>
 			</form>
 		<h5 class="peer-title">Settings for levels</h5>
diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminPeerSettingsPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminPeerSettingsPage.java
index 84141da094..1caa461aa8 100644
--- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminPeerSettingsPage.java
+++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminPeerSettingsPage.java
@@ -77,10 +77,8 @@ public class AdminPeerSettingsPage extends AbstractAdminSettingsPage {
 			numberOfLatestReviewsDisplayed.setRequired(true);
 			add(numberOfLatestReviewsDisplayed);
 			
-			// Checkbox for activating/inactiviting links to reviews in the Latest reviewers panel.
-			// 
-			/*CheckBox publicReviewsActivated = new CheckBox("publicReviewsActivated"); 
-			add(publicReviewsActivated);*/
+			CheckBox publicReviewsActivated = new CheckBox("publicReviewsActivated"); 
+			add(publicReviewsActivated);
 		}
 		@Override
 		public void onSubmit(){
diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminServerEnvironmentSettingsPage.html b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminServerEnvironmentSettingsPage.html
index 6772a65c5e..122526fde7 100644
--- a/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminServerEnvironmentSettingsPage.html
+++ b/src/main/java/se/su/dsv/scipro/admin/pages/settings/AdminServerEnvironmentSettingsPage.html
@@ -3,15 +3,16 @@
 	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
 <body>
 <wicket:extend>
-	<h3 class="section">Server/Request environment</h3>
-	<div style="overflow:auto;height:390px;">
-	<ul>
-		<li wicket:id="requestAttributes">
-			<span wicket:id="name">[name]</span>:
-			<span wicket:id="value">[value]</span>
-		</li>
-	</ul>
+	<h5 class="peer-title">Server/Request environment</h5>
+	<div>
+		<div style="overflow: auto; height: 360px;">
+			<ul>
+				<li wicket:id="requestAttributes"><span wicket:id="name">[name]</span>:
+					<span wicket:id="value">[value]</span>
+				</li>
+			</ul>
+		</div>
 	</div>
-</wicket:extend>
+	</wicket:extend>
 </body>
 </html>
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/AdminTabMenuPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/AdminTabMenuPanel.java
index 33c8432b34..fb319be8bc 100644
--- a/src/main/java/se/su/dsv/scipro/admin/panels/AdminTabMenuPanel.java
+++ b/src/main/java/se/su/dsv/scipro/admin/panels/AdminTabMenuPanel.java
@@ -6,6 +6,7 @@ import java.util.List;
 import org.apache.wicket.Page;
 
 import se.su.dsv.scipro.admin.pages.AbstractAdminPage;
+import se.su.dsv.scipro.admin.pages.AdminCheckListPage;
 import se.su.dsv.scipro.admin.pages.AdminFinalSeminarPage;
 import se.su.dsv.scipro.admin.pages.AdminProjectPartnerPage;
 import se.su.dsv.scipro.admin.pages.AdminRolePage;
@@ -39,6 +40,7 @@ public class AdminTabMenuPanel extends AbstractMenuPanel {
 		items.add(new MenuItem("Settings", AdminGeneralSettingsPage.class, ImageIcon.ICON_SETTINGS));
 		items.add(new MenuItem("Role management", AdminRolePage.class));
 		items.add(new MenuItem("Project partner", AdminProjectPartnerPage.class));
+		items.add(new MenuItem("CheckList", AdminCheckListPage.class));
 
 		return items;
 	}
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..c9cbc78e51 100644
--- a/src/main/java/se/su/dsv/scipro/basepages/BasePage.html
+++ b/src/main/java/se/su/dsv/scipro/basepages/BasePage.html
@@ -25,10 +25,6 @@
 <link href='http://fonts.googleapis.com/css?family=Ubuntu:regular,bold' rel='stylesheet' type='text/css' /> -->
 <!--<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-ui-1.8.10.custom.min.js"></script> -->
-
 <script type="text/javascript">
 
   var _gaq = _gaq || [];
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/AbstractBaseMenuPanel.java b/src/main/java/se/su/dsv/scipro/basepanels/AbstractBaseMenuPanel.java
new file mode 100644
index 0000000000..ee8e09ce82
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/basepanels/AbstractBaseMenuPanel.java
@@ -0,0 +1,16 @@
+package se.su.dsv.scipro.basepanels;
+
+import org.apache.wicket.Page;
+
+import se.su.dsv.scipro.components.AbstractMenuPanel;
+
+public abstract class AbstractBaseMenuPanel extends AbstractMenuPanel {
+	private static final long serialVersionUID = 3738086567246191811L;
+	public AbstractBaseMenuPanel(final String id,final Class<? extends Page> menuContainerCommonSuperClass, final Class<? extends Page> containerClass) {
+		super(id,menuContainerCommonSuperClass,containerClass);	
+	}
+	@Override
+	protected MenuType getMenuType() {
+		return MenuType.TAB;
+	}
+}
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/HeaderPanel.html b/src/main/java/se/su/dsv/scipro/basepanels/HeaderPanel.html
index 75b642fb2e..f9857256a4 100644
--- a/src/main/java/se/su/dsv/scipro/basepanels/HeaderPanel.html
+++ b/src/main/java/se/su/dsv/scipro/basepanels/HeaderPanel.html
@@ -1,13 +1,19 @@
 <!DOCTYPE html>
-<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<html
+	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
 <body>
-<wicket:panel>
-	<header id="main-header" class="span-24">
-      <div class="prepend-1 span-5">
-         <h1 id="logo"><a href="#" wicket:id="homeLink" title="SciPro">SciPro</a></h1>
-      </div>
-      <div wicket:id="mainMenuPanel"></div>
-    </header>
-</wicket:panel>
+	<wicket:panel>
+		<header id="main-header" class="span-24">
+			<div class="prepend-1 span-5">
+				<h1 id="logo">
+					<a href="#" wicket:id="homeLink" title="SciPro">SciPro</a>
+				</h1>
+			</div>
+			<div class="prepend-2 span-15 last user-links"
+				wicket:id="userLinksPanel"></div>
+			<div wicket:id="mainMenuPanel" class="main-menu prepend-6"></div>
+			<div wicket:id="serviceMenuPanel" class="service-menu"></div>
+		</header>
+	</wicket:panel>
 </body>
 </html>
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/HeaderPanel.java b/src/main/java/se/su/dsv/scipro/basepanels/HeaderPanel.java
index e1c3763515..d270f8c03b 100644
--- a/src/main/java/se/su/dsv/scipro/basepanels/HeaderPanel.java
+++ b/src/main/java/se/su/dsv/scipro/basepanels/HeaderPanel.java
@@ -1,9 +1,7 @@
 package se.su.dsv.scipro.basepanels;
 
 import org.apache.wicket.Page;
-import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
-import org.apache.wicket.markup.html.panel.EmptyPanel;
 import org.apache.wicket.markup.html.panel.Panel;
 
 import se.su.dsv.scipro.SciProApplication;
@@ -14,17 +12,13 @@ import se.su.dsv.scipro.SciProApplication;
  *
  */
 public class HeaderPanel extends Panel {
-
 	private static final long serialVersionUID = 1L;
-
 	public HeaderPanel(String id, Class<? extends Page> containerClass) {
 		super(id);
-		
 		add(new BookmarkablePageLink<Void>("homeLink", SciProApplication.get().getHomePage()));
-		
-		MainMenuPanel mainMenuPanel = new MainMenuPanel("mainMenuPanel", containerClass);
-		add(mainMenuPanel);
-		
+		add(new MainMenuPanel("mainMenuPanel", containerClass));
+		add(new ServiceMenuPanel("serviceMenuPanel", containerClass));
+		add(new UserLinksPanel("userLinksPanel"));
 	}
 
 }
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.html b/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.html
deleted file mode 100644
index 4a61b067fd..0000000000
--- a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
-<body>
-<wicket:panel>
-<nav id="main-nav">
-    <div class="span-18 last">
-        <div class="prepend-2 span-15 last" id="user-links" wicket:id="userLinksPanel"></div>
-        <div class="span-18 last">
-            <ul id="nav-list">
-              <li class="nav-list-item" id="home-menu-item" wicket:id="homeMenuItem"></li>
-              <li class="nav-list-item" id="messages-menu-item" wicket:id="messagesMenuItem"></li>
-              <li class="nav-list-item" id="project-menu-item" wicket:id="projectMenuItem"></li>
-              <li class="nav-list-item" id="supervisor-menu-item" wicket:id="supervisorMenuItem"></li>
-              <li class="nav-list-item" id="resources-menu-item" wicket:id="resourcesMenuItem"></li>
-              <li class="nav-list-item" id="admin-menu-item" wicket:id="adminMenuItem"></li>
-            </ul>
-        </div>
-    </div>
-    
-</nav>
-</wicket:panel>
-</body>
-</html>
\ No newline at end of file
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..9f10150a21 100644
--- a/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java
+++ b/src/main/java/se/su/dsv/scipro/basepanels/MainMenuPanel.java
@@ -4,121 +4,25 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.wicket.Page;
-import org.apache.wicket.PageParameters;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.odlabs.wiquery.core.commons.IWiQueryPlugin;
-import org.odlabs.wiquery.core.commons.WiQueryResourceManager;
-import org.odlabs.wiquery.core.javascript.JsStatement;
 
 import se.su.dsv.scipro.HomePage;
-import se.su.dsv.scipro.SciProApplication;
-import se.su.dsv.scipro.admin.pages.AdminScheduleTemplatesPage;
 import se.su.dsv.scipro.admin.pages.AdminStartPage;
-import se.su.dsv.scipro.admin.pages.ProjectManagementPage;
-import se.su.dsv.scipro.admin.pages.SystemMaintenancePage;
-import se.su.dsv.scipro.basepages.MenuPage;
-import se.su.dsv.scipro.basepanels.mainmenu.MainMenuItem;
-import se.su.dsv.scipro.basepanels.mainmenu.MenuItem;
-import se.su.dsv.scipro.knol.resource.page.ResourcePage;
-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.ProjectStartPage;
-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;
 import se.su.dsv.scipro.supervisor.pages.SupervisorStartPage;
-import se.su.dsv.scipro.wiquery.mainmenu.MainMenuJavascriptResourceReference;
 
-public class MainMenuPanel extends Panel implements IWiQueryPlugin {
+public class MainMenuPanel extends AbstractBaseMenuPanel {
 
 	private static final long serialVersionUID = 3738086567246191811L;
 	
 	public MainMenuPanel(String id, Class<? extends Page> containerClass) {
-		super(id);
-		
-		add(new MainMenuItem("homeMenuItem", HomePage.MAIN_MENU_LABEL, HomePage.class, containerClass, null));
-		
-		/*
-		 * Messages
-		 */
-		MainMenuItem messagesMenuItem = new MainMenuItem("messagesMenuItem", PrivateMessagesPage.MAIN_MENU_LABEL, PrivateMessagesPage.class, containerClass, null);
-		MetaDataActionStrategy.authorize(messagesMenuItem, Roles.SYSADMIN); // TODO: Hidden for initial deployment
-		add(messagesMenuItem);
-		
-		/*
-		 * Project/Author
-		 */
-		List<MenuItem> projectMenuSubItems = new ArrayList<MenuItem>();
-		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));
-		MainMenuItem projectMenuItem = new MainMenuItem("projectMenuItem", ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class, containerClass, projectMenuSubItems);
-        add(projectMenuItem);
-		
-		/*
-		 * Supervisor
-		 */
-        List<MenuItem> supervisorMenuSubItems = new ArrayList<MenuItem>();
-        //supervisorMenuSubItems.add(new MenuItem("Schedule Templates", SupervisorProjectsFinalSeminarPage.class));
-        supervisorMenuSubItems.add(new MenuItem(SupervisorStartPage.MAIN_MENU_LABEL, SupervisorStartPage.class));
-		supervisorMenuSubItems.add(new MenuItem(SupervisorProjectsFinalSeminarPage.MAIN_MENU_LABEL, SupervisorProjectsFinalSeminarPage.class));
-        MainMenuItem supervisorMenuItem = new MainMenuItem("supervisorMenuItem", SupervisorStartPage.MAIN_MENU_LABEL, SupervisorStartPage.class, containerClass, supervisorMenuSubItems);
-        MetaDataActionStrategy.authorize(supervisorMenuItem, new Roles[]{Roles.EXTERNAL, Roles.EMPLOYEE});
-        add(supervisorMenuItem);
-		
-		/*
-		 * Resource
-		 */
-        MainMenuItem resourcesMenuItem = new MainMenuItem("resourcesMenuItem", ResourcePage.MAIN_MENU_LABEL, ResourcePage.class, containerClass, null);
-        MetaDataActionStrategy.authorize(resourcesMenuItem, Roles.SYSADMIN ); // TODO: Hidden for initial deployment
-		add(resourcesMenuItem);
-		
-		/*
-		 * Admin
-		 */
-		List<MenuItem> adminMenuSubItems = new ArrayList<MenuItem>();
-		adminMenuSubItems.add(new MenuItem(AdminScheduleTemplatesPage.MAIN_MENU_LABEL, AdminScheduleTemplatesPage.class));
-		adminMenuSubItems.add(new MenuItem(SystemMaintenancePage.MAIN_MENU_LABEL, SystemMaintenancePage.class));
-		adminMenuSubItems.add(new MenuItem(ProjectManagementPage.MAIN_MENU_LABEL, ProjectManagementPage.class));
-		adminMenuSubItems.add(new MenuItem(PeerReviewTemplatePage.MAIN_MENU_LABEL, PeerReviewTemplatePage.class));
-		MainMenuItem adminMenuItem = new MainMenuItem("adminMenuItem", AdminStartPage.MAIN_MENU_LABEL, AdminStartPage.class, containerClass, adminMenuSubItems);
-		MetaDataActionStrategy.authorize(adminMenuItem, Roles.ADMIN);
-		add(adminMenuItem);
-		
-		UserLinksPanel userLinksPanel = new UserLinksPanel("userLinksPanel");
-		add(userLinksPanel);
+		super(id,HomePage.class,containerClass);	
 	}
-	
 	@Override
-    public void contribute(WiQueryResourceManager wiQueryResourceManager) {
-        wiQueryResourceManager.addJavaScriptResource(MainMenuJavascriptResourceReference.get());
-    }
-
-    @Override
-    public JsStatement statement() {
-        return null;
-    }
-	
-	/**
-     * @deprecated see {@link se.su.dsv.scipro.basepanels.mainmenu.AbstractMainMenuItem#getMenuLink(String)}
-     */
-    @SuppressWarnings("unused")
-    private BookmarkablePageLink<Void> getMenuLink(String id, final Class<? extends Page> targetPageClass, final Class<? extends Page> containerClass){
-		return getMenuLink(id, targetPageClass, null, containerClass);
+	protected List<MenuItem> getItemList(){
+		List<MenuItem> list = new ArrayList<MenuItem>();
+		list.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL,ProjectStartPage.class));
+		list.add(new MenuItem(SupervisorStartPage.MAIN_MENU_LABEL,SupervisorStartPage.class));
+		list.add(new MenuItem(AdminStartPage.MAIN_MENU_LABEL,AdminStartPage.class));
+		return list;
 	}
-	/**
-	 * @deprecated see {@link se.su.dsv.scipro.basepanels.mainmenu.AbstractMainMenuItem#getMenuLink(String, PageParameters)}
-	 */
-	private BookmarkablePageLink<Void> getMenuLink(String id, final Class<? extends Page> targetPageClass, final PageParameters pp, final Class<? extends Page> containerClass){
-		BookmarkablePageLink<Void> result = new BookmarkablePageLink<Void>(id, targetPageClass, pp);
-		result.setOutputMarkupId(true);
-		if(targetPageClass == containerClass || (targetPageClass.getSuperclass().isAssignableFrom(containerClass) && targetPageClass.getSuperclass() != MenuPage.class) ){
-			result.setMarkupId("current");
-		}
-		return result;
-	}
-
 }
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/ServiceMenuPanel.java b/src/main/java/se/su/dsv/scipro/basepanels/ServiceMenuPanel.java
new file mode 100644
index 0000000000..b88315a26f
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/basepanels/ServiceMenuPanel.java
@@ -0,0 +1,24 @@
+package se.su.dsv.scipro.basepanels;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.Page;
+
+import se.su.dsv.scipro.basepages.MenuPage;
+import se.su.dsv.scipro.knol.resource.page.ResourcePage;
+import se.su.dsv.scipro.message.pages.PrivateMessagesPage;
+
+public class ServiceMenuPanel extends AbstractBaseMenuPanel {
+	private static final long serialVersionUID = 3738086567246191811L;
+	public ServiceMenuPanel(String id, Class<? extends Page> containerClass) {
+		super(id,MenuPage.class,containerClass);	
+	}
+	@Override
+	protected List<MenuItem> getItemList(){
+		List<MenuItem> list = new ArrayList<MenuItem>();
+		list.add(new MenuItem(ResourcePage.MAIN_MENU_LABEL,ResourcePage.class));
+		list.add(new MenuItem(PrivateMessagesPage.MAIN_MENU_LABEL,PrivateMessagesPage.class));
+		return list;
+	}
+}
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/AbstractMainMenuItem.java b/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/AbstractMainMenuItem.java
deleted file mode 100644
index 4febedf585..0000000000
--- a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/AbstractMainMenuItem.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package se.su.dsv.scipro.basepanels.mainmenu;
-
-import org.apache.wicket.Page;
-import org.apache.wicket.PageParameters;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
-import org.apache.wicket.markup.html.panel.Panel;
-
-import se.su.dsv.scipro.basepages.MenuPage;
-
-/**
- * Abstract Class for Main Menu Items
- * 
- * @author patrick
- *
- */
-public abstract class AbstractMainMenuItem extends Panel {
-
-    private static final long serialVersionUID = 2849283400267381932L;
-    protected Class<? extends Page> targetPageClass;
-    protected Class<? extends Page> containerPageClass;
-    private String menuLabel;
-    protected BookmarkablePageLink<Void> menuItemLink;
-
-    public AbstractMainMenuItem(String id, String label, Class<? extends Page> targetPageClass, Class<? extends Page> containerPageClass) {
-        super(id);
-        this.menuLabel = label;
-        this.targetPageClass = targetPageClass;
-        this.containerPageClass = containerPageClass;
-    }
-    
-    public String getMenuLabel() {
-        return menuLabel;
-    }
-    
-
-    /**
-     * {@link #getMenuLink(String, PageParameters)}
-     */
-    protected BookmarkablePageLink<Void> getMenuLink(String id) {
-        return getMenuLink(id, null);
-    }
-    
-    /**
-     * Creates a bookmarkable page link for the main menu.
-     * 
-     * @param id
-     * @param pp
-     * @return
-     * @author Martin Peters
-     */
-    protected BookmarkablePageLink<Void> getMenuLink(String id, final PageParameters pp) {
-        BookmarkablePageLink<Void> result = new BookmarkablePageLink<Void>(id, targetPageClass, pp);
-        result.setOutputMarkupId(true);
-        if(targetPageClass == containerPageClass || (targetPageClass.getSuperclass().isAssignableFrom(containerPageClass) && targetPageClass.getSuperclass() != MenuPage.class) ){
-        	//TODO Should prefereably be replaced with the line below because repeating id's aren't valid html. I couldn't get the CSS to work though //mpeters
-            result.setMarkupId("current");            
-        	//result.add(new AttributeAppender("class", new Model<String>("current"), " "));
-        }
-        return result;
-    }
-    
-}
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuItem.html b/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuItem.html
deleted file mode 100644
index 53103e9295..0000000000
--- a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuItem.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html>
-<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
-<body>
-<wicket:panel>
-<span class="menu-item">
-    <a wicket:id="mainMenuItemLink"><span wicket:id="mainMenuItemLabel"></span></a>
-    <img class="nav-arrow" wicket:id="mainMenuItemArrow" />
-</span>
-<div class="submenu rounded-bl rounded-br"><span wicket:id="mainMenuListItemSubMenu"><span wicket:id="subMenuItem"></span></span></div>
-</wicket:panel>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuItem.java b/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuItem.java
deleted file mode 100644
index b87b20e291..0000000000
--- a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuItem.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package se.su.dsv.scipro.basepanels.mainmenu;
-
-import java.util.List;
-
-import org.apache.wicket.Page;
-import org.apache.wicket.behavior.AttributeAppender;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.image.ContextImage;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.model.Model;
-
-/**
- * Main Menu Item, the upper level of the main menu hierarchy.
- * 
- * @author patrick
- *
- */
-public class MainMenuItem extends AbstractMainMenuItem {
-
-    private static final long serialVersionUID = 6103131868992599100L;
-    
-    @SuppressWarnings("unused")
-    private List<MenuItem> subItems;
-
-    public MainMenuItem(String id, String label, final Class<? extends Page> targetPageClass, final Class<? extends Page> containerClass, final List<MenuItem> subItems) {
-        super(id, label, targetPageClass, containerClass);
-        this.subItems = subItems;
-        
-        if (subItems != null)
-            this.add(new AttributeAppender("class", true, new Model<String>("parent"), " "));
-        
-        menuItemLink = getMenuLink("mainMenuItemLink");
-        menuItemLink.add(new Label("mainMenuItemLabel", getMenuLabel()));
-        
-        add(menuItemLink);
-        
-        ContextImage mainMenuItemArrow = new ContextImage("mainMenuItemArrow", "images/site_nav_arrow2.png") {
-
-            private static final long serialVersionUID = 1793336840409311960L;
-
-            /* (non-Javadoc)
-             * @see org.apache.wicket.Component#isVisible()
-             */
-            @Override
-            public boolean isVisible() {
-                return subItems != null;
-            }
-            
-        };
-        mainMenuItemArrow.setOutputMarkupPlaceholderTag(true);
-        add(mainMenuItemArrow);
-        
-        ListView<MenuItem> subItemListView = new ListView<MenuItem>("mainMenuListItemSubMenu", subItems) {
-
-            private static final long serialVersionUID = -1444218885819118389L;
-
-            @Override
-            protected void populateItem(ListItem<MenuItem> item) {
-                MenuItem obj = item.getModelObject();
-                item.add(obj.createSubItem("subMenuItem", containerClass));
-                add(item);
-            }
-
-            /* (non-Javadoc)
-             * @see org.apache.wicket.Component#isVisible()
-             */
-            @Override
-            public boolean isVisible() {
-                return subItems != null;
-            }
-            
-            
-        };
-        subItemListView.setOutputMarkupPlaceholderTag(true);
-        add(subItemListView);
-    }
-
-}
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuSubItem.html b/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuSubItem.html
deleted file mode 100644
index 43e852090a..0000000000
--- a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuSubItem.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
-<body>
-<wicket:panel>
-    <a href="#" wicket:id="mainMenuSubItemLink"><span wicket:id="mainMenuSubItemLabel">[Link]</span></a>
-</wicket:panel>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuSubItem.java b/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuSubItem.java
deleted file mode 100644
index 565a880183..0000000000
--- a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MainMenuSubItem.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package se.su.dsv.scipro.basepanels.mainmenu;
-
-import org.apache.wicket.Page;
-import org.apache.wicket.markup.html.basic.Label;
-
-/**
- * Main Menu Sub Items
- * 
- * @author patrick
- *
- */
-public class MainMenuSubItem extends AbstractMainMenuItem {
-
-    private static final long serialVersionUID = 8903203088965767242L;
-
-    public MainMenuSubItem(String id, String label, Class<? extends Page> targetPageClass,
-            Class<? extends Page> containerPageClass) {
-        super(id, label, targetPageClass, containerPageClass);
-        
-        menuItemLink = getMenuLink("mainMenuSubItemLink");
-        menuItemLink.add(new Label("mainMenuSubItemLabel", getMenuLabel()));
-        
-        add(menuItemLink);
-    }
-
-    
-}
diff --git a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MenuItem.java b/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MenuItem.java
deleted file mode 100644
index ca12d4b265..0000000000
--- a/src/main/java/se/su/dsv/scipro/basepanels/mainmenu/MenuItem.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package se.su.dsv.scipro.basepanels.mainmenu;
-
-import java.util.List;
-
-import org.apache.wicket.IClusterable;
-import org.apache.wicket.Page;
-
-/**
- * Helper Class for preparing the creation of main menu items
- * @author patrick
- *
- */
-public class MenuItem implements IClusterable {
-    
-    private static final long serialVersionUID = -5341715569517881163L;
-    
-    private String menuLabel;
-    private Class<? extends Page> targetPageClass;
-    
-    public MenuItem(String menuLabel, Class<? extends Page> targetPageClass) {
-        this.menuLabel = menuLabel;
-        this.targetPageClass = targetPageClass;
-    }
-    
-    /**
-     * Creates a Main Menu Sub Item
-     * 
-     * @param id
-     * @param containerPageClass
-     * @return
-     */
-    public MainMenuSubItem createSubItem(String id, Class<? extends Page> containerPageClass) {
-        return new MainMenuSubItem(id, menuLabel, targetPageClass, containerPageClass);
-    }
-    
-    /**
-     * Creates a Main Menu Item
-     * 
-     * @param id
-     * @param containerPageClass
-     * @param subItems
-     * @return
-     */
-    public MainMenuItem createMenuItem(String id, Class<? extends Page> containerPageClass, List<MenuItem> subItems) {
-        return new MainMenuItem(id, menuLabel, targetPageClass, containerPageClass, subItems);
-    }
-}
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..a43e02bacd
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.html
@@ -0,0 +1,40 @@
+<!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>
+
+				Template name:  <input wicket:id="title" type="text" />
+			</div>
+			<p></p>
+			<div wicket:id="radioChoice">
+				<input type="radio" />
+			</div>
+			<div>
+			<form wicket:id="addQuestionForm">
+				<div wicket:id="container">
+					<div>Questions</div>
+					<div wicket:id="questions">
+						<span wicket:id=questionLabel></span>
+					</div>
+				</div>
+			<div>
+				<input wicket:id="question" type="text" />
+			</div>
+			<input wicket:id="addQuestionButton" type="submit" />
+		</form>
+		</div>
+		<p></p>
+			<input wicket:id="save" type="submit" />
+		</form>
+
+	</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..5e72d75a4d
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/checklists/panels/CreateCheckListTemplatePanel.java
@@ -0,0 +1,150 @@
+package se.su.dsv.scipro.checklists.panels;
+
+import java.util.List;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RadioChoice;
+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.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.CheckListTemplateDao;
+import se.su.dsv.scipro.data.dao.interfaces.ProjectClassDao;
+import se.su.dsv.scipro.data.dataobjects.CheckListTemplate;
+import se.su.dsv.scipro.data.dataobjects.ProjectClass;
+
+/**
+ * @author fnorbe@dsv.su.se
+ */
+
+public class CreateCheckListTemplatePanel extends Panel {
+
+	private static final long serialVersionUID = 8862892008428526067L;
+
+	@SpringBean
+	private CheckListTemplateDao checkListTemplateDao;
+
+	@SpringBean
+	private ProjectClassDao projectClassDao;
+
+	private String question = "";
+	private String title = "";
+	
+	private final FeedbackPanel feedbackPanel;
+	
+	private ProjectClass projectClass;
+
+	private CheckListTemplate checkListTemplate = new CheckListTemplate();
+
+	public CreateCheckListTemplatePanel(String id) {
+		super(id);
+		projectClass = projectClassDao.getProjectClass(ProjectClass.BACHELOR);
+		feedbackPanel = new FeedbackPanel("feedbackPanel");
+		feedbackPanel.setOutputMarkupId(true);
+		add(feedbackPanel);
+		Form<CheckListTemplate> form = new Form<CheckListTemplate>("form");
+		final Form<CheckListTemplate> addQuestionForm = new Form<CheckListTemplate>("addQuestionForm");
+		final TextField<String> titleField = new RequiredTextField<String>("title",
+				new PropertyModel<String>(this, "title"));
+		titleField.setOutputMarkupId(true);
+		final TextField<String> questionField = new RequiredTextField<String>("question",
+				new PropertyModel<String>(this, "question"));
+		questionField.setOutputMarkupId(true);
+		questionField.setRequired(false);
+		RadioChoice<ProjectClass> radioChoice = new RadioChoice<ProjectClass>("radioChoice",
+				new PropertyModel<ProjectClass>(this, "projectClass"), projectClassDao.findAll());
+
+		final IModel<List<String>> questionModel = new LoadableDetachableModel<List<String>>(){
+
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected List<String> load() {
+				return checkListTemplate.getQuestions();
+			}
+		};
+		final WebMarkupContainer container = new WebMarkupContainer("container");
+		container.setOutputMarkupId(true);
+		ListView<String> listView = new ListView<String>("questions", questionModel) {
+
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(ListItem<String> item) {
+				Label question = new Label("questionLabel", item.getModel().getObject());
+				item.add(question);
+				
+			}
+		};
+		
+		container.add(listView);
+		//add(new FeedbackPanel("feedbackPanel"));
+		
+		AjaxButton save = new AjaxButton("save", new Model<String>("Save template")) {
+
+			/**
+			 * 
+			 */
+			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);
+				checkListTemplateDao.save(checkListTemplate);
+				checkListTemplate = new CheckListTemplate();
+				title ="";
+				question="";
+				target.addComponent(container);
+				target.addComponent(titleField);
+				
+			}
+		};
+		
+		AjaxButton addQuestionButton = new AjaxButton("addQuestionButton", new Model<String>("Add question")) {
+
+			/**
+			 * 
+			 */
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+
+				if(question != null || question != ""){
+					checkListTemplate.getQuestions().add(new String(question));
+				}
+				questionModel.detach();
+				question  = "";
+				target.addComponent(questionField);
+				target.addComponent(container);
+				
+			}
+		};
+		addQuestionForm.add(questionField);
+		addQuestionForm.add(container);
+		addQuestionForm.add(addQuestionButton);
+		form.add(titleField);
+		form.add(radioChoice);
+		form.add(addQuestionForm);
+		form.add(save);
+		add(form);
+
+	};
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListPanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListPanel.java
new file mode 100644
index 0000000000..38bc18914f
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListPanel.java
@@ -0,0 +1,66 @@
+package se.su.dsv.scipro.checklists.panels;
+
+import java.util.List;
+
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+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.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+
+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;
+import se.su.dsv.scipro.data.enums.CheckListRole;
+
+/**
+ * @author Fredrik Norberg fnorbe@dsv.su.se
+ * 
+ */
+
+public class ListCheckListPanel extends Panel {
+	
+	private List<CheckList> checkLists;
+	private CheckListRole role;
+	private CheckListDao checkListDao;
+	private Project project;
+	
+
+	private static final long serialVersionUID = 1L;
+
+	public ListCheckListPanel(String id, CheckListRole role, final Project project) {
+		super(id);
+		this.role = role;
+		checkLists = checkListDao.findCheckLists(project, role);
+		
+		IModel<List<CheckList>> checkListModel = new LoadableDetachableModel<List<CheckList>>() {
+
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected List<CheckList> load() {
+				return project.getCheckLists();
+				
+			}
+		};
+		
+		final WebMarkupContainer container = new WebMarkupContainer("container");
+		container.setOutputMarkupId(true);
+		ListView<CheckList> checkLists = new ListView<CheckList>("checkLists", checkListModel) {
+
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(ListItem<CheckList> item) {
+				Label listName = new Label("listName", item.getModel().getObject().getName());
+				item.add(listName);
+				
+			}
+		};
+		
+		container.add(checkLists);
+	}
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListTemplatePanel.html b/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListTemplatePanel.html
new file mode 100644
index 0000000000..acdf122fe6
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListTemplatePanel.html
@@ -0,0 +1,17 @@
+<!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="container">
+			<div wicket:id="checkListTemplates">
+				<div wicket:id="templateName"></div>
+				<div wicket:id="templateOwner"></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/ListCheckListTemplatePanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListTemplatePanel.java
new file mode 100644
index 0000000000..840ead4a8c
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/checklists/panels/ListCheckListTemplatePanel.java
@@ -0,0 +1,68 @@
+package se.su.dsv.scipro.checklists.panels;
+
+import java.util.List;
+
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+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.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.spring.injection.annot.SpringBean;
+
+import se.su.dsv.scipro.data.dao.interfaces.CheckListTemplateDao;
+import se.su.dsv.scipro.data.dataobjects.CheckListTemplate;
+
+
+/**
+ * @author Fredrik Norberg - fnorbe@dsv.su.se
+ *
+ */
+
+public class ListCheckListTemplatePanel extends Panel{
+	
+	@SpringBean
+	private CheckListTemplateDao checkListTemplateDao;
+	
+	private static final long serialVersionUID = 1L;
+	
+	public ListCheckListTemplatePanel(String id) {
+		super(id);
+	
+	IModel<List<CheckListTemplate>> checkListTemplateModel = new LoadableDetachableModel<List<CheckListTemplate>>() {
+
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected List<CheckListTemplate> load() {
+			return checkListTemplateDao.findAll();
+			
+		}
+	};
+	
+	
+	final WebMarkupContainer container = new WebMarkupContainer("container");
+	container.setOutputMarkupId(true);
+	ListView<CheckListTemplate> checkListTemplates = new ListView<CheckListTemplate>("checkListTemplates", checkListTemplateModel) {
+
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void populateItem(ListItem<CheckListTemplate> item) {
+			Label templateName = new Label("templateName", new PropertyModel<String>(item.getModel(),"name"));
+			Label templateOwner = new Label("templateOwner", new PropertyModel<String>(item.getModel(), "creator"));
+			item.add(templateName);
+			item.add(templateOwner);
+			
+		}
+	};
+	
+	container.add(checkListTemplates);
+	add(container);
+
+	}	
+}
+
+
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..9b0f684344
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.html
@@ -0,0 +1,26 @@
+<!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="trafficLightContainer">
+			<div wicket:id="group">
+				<div wicket:id="lights">
+				<table >
+					<tr >
+						<td><input type="radio" wicket:id="radio" /></td>
+						<td><img wicket:id="image"/></td>
+						</tr> 
+						<tr>
+							
+						</tr>
+					</table>
+					</div>
+				</div>
+			</div>
+	</wicket:panel>
+</body>
+</html>
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..81dcdee7ba
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/checklists/panels/TrafficLightPanel.java
@@ -0,0 +1,85 @@
+package se.su.dsv.scipro.checklists.panels;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+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.Model;
+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.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.knol.resource.page.StaticImage;
+
+/**
+ * @author fnorbe@dsv.su.se
+ */
+
+public class TrafficLightPanel extends Panel {
+
+	private List<TrafficLight> lights;
+	
+	enum TrafficLight{
+		GREEN, YELLOW, RED, NOT
+	}
+
+	private static final long serialVersionUID = 8862892008428526067L;
+
+	public TrafficLightPanel(String id) {
+		super(id);
+
+		WebMarkupContainer trafficLightContainer = new WebMarkupContainer(
+				"trafficLightContainer");
+		add(trafficLightContainer);
+		lights = new ArrayList<TrafficLight>();
+		lights.add(TrafficLight.GREEN);lights.add(TrafficLight.YELLOW);lights.add(TrafficLight.RED);lights.add(TrafficLight.NOT);
+		RadioGroup<TrafficLight> group = new RadioGroup<TrafficLight>("group");
+		trafficLightContainer.add(group);
+		
+
+
+		ListView<TrafficLight> lightList = new ListView<TrafficLight>("lights", lights) {
+	
+			private static final long serialVersionUID = 1L;
+
+			protected void populateItem(ListItem<TrafficLight> item) {
+				TrafficLight trafficLight = item.getModelObject();
+				item.add(new Radio<TrafficLight>("radio", item.getModel()));
+				StaticImage image = null;
+				if (trafficLight.equals(TrafficLight.GREEN)) {
+					image = new StaticImage("image", new Model<String>(
+							"images/icons/green_ball_32.png"));
+				} else if (trafficLight.equals(TrafficLight.YELLOW)) {
+					image = new StaticImage("image", new Model<String>(
+
+					"images/icons/red_ball_32.png"));
+				} else if (trafficLight.equals(TrafficLight.RED)) {
+
+					image = new StaticImage("image", new Model<String>(
+							"images/icons/yellow_ball_32.png"));
+				}
+				else if (trafficLight.equals(TrafficLight.NOT)) {
+					image = new StaticImage("image", new Model<String>(
+					"images/icons/grey_ball_32.png"));
+				}
+				item.add(image);
+			};
+		};
+
+		group.add(lightList);
+	}
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/checklists/panels/ViewCheckListPanel.java b/src/main/java/se/su/dsv/scipro/checklists/panels/ViewCheckListPanel.java
new file mode 100644
index 0000000000..777a44d6a7
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/checklists/panels/ViewCheckListPanel.java
@@ -0,0 +1,109 @@
+package se.su.dsv.scipro.checklists.panels;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.markup.html.basic.Label;
+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.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.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;
+
+public class ViewCheckListPanel extends Panel {
+	
+	
+	private static final long serialVersionUID = 1L;
+
+	@SpringBean
+	private CheckListDao checkListDao;
+
+	@SpringBean
+	private CheckListAnswerDao checkListAnswerDao;
+
+	@SpringBean
+	private CheckListQuestionDao checkListQuestionDao;
+
+	@SpringBean
+	private CheckListTemplateDao checkListTemplateDao;
+	
+	
+	public ViewCheckListPanel(String id){
+		super(id);
+
+	/*	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/components/AbstractMenuPanel.java b/src/main/java/se/su/dsv/scipro/components/AbstractMenuPanel.java
index aa60f5e574..1493f65bd0 100644
--- a/src/main/java/se/su/dsv/scipro/components/AbstractMenuPanel.java
+++ b/src/main/java/se/su/dsv/scipro/components/AbstractMenuPanel.java
@@ -18,6 +18,11 @@ import org.apache.wicket.model.Model;
 
 import se.su.dsv.scipro.icons.ImageIcon;
 
+/**
+ * ABC-class for menu's of different types.
+ * Subclasses should implement their own data feed mechanics via <code>getItemList</code> and provide a menu type via <code>getMenuType</code>
+ * The returned menu-type is used to provide CSS-class mappings for the menu structure, see the MenuType enum for alternatives.
+ */
 public abstract class AbstractMenuPanel extends Panel {
 	
 	private static final long serialVersionUID = 1L;
@@ -33,6 +38,9 @@ public abstract class AbstractMenuPanel extends Panel {
 		}
 	};
 	
+	/**
+	 * Enumeration of supported menu types.
+	 */
 	public enum MenuType {
 		NONE,
 		TAB,
@@ -41,7 +49,12 @@ public abstract class AbstractMenuPanel extends Panel {
 		VERTICAL
 	}
 	
-	
+	/**
+	 * Superclass constructor, arguments 
+	 * @param id Wicket identifier for the component
+	 * @param menuContainerCommonSuperClass [Needs documentation]
+	 * @param containerClass [Needs documentation]
+	 */
 	public AbstractMenuPanel(final String id, final Class<? extends Page> menuContainerCommonSuperClass,final Class<? extends Page> containerClass) {
 		super(id);
 		
@@ -56,7 +69,7 @@ public abstract class AbstractMenuPanel extends Panel {
 			protected void populateItem( ListItem<MenuItem> item ) {
 				final MenuItem mi = item.getModelObject();
 				boolean highLightAsCurrentByInterface = false;
-				Class<?> menuItemInterface = mi.getMenuHilightInterface();
+				Class<?> menuItemInterface = mi.getMenuHighlightInterface();
 				if( menuItemInterface != null ){
 					for( Class<?> actualPageInterface : containerClass.getInterfaces() ){
 						if( actualPageInterface.equals(menuItemInterface) ){
@@ -72,7 +85,7 @@ public abstract class AbstractMenuPanel extends Panel {
 						&& 
 							mi.getTargetClass().getSuperclass() != menuContainerCommonSuperClass
 						)				
-					){
+				){
 					//item.setMarkupId("current"); 
 					//item.setOutputMarkupId(true);
 					//Replaced the above because it generates invalid markup if two menus are added to the same page (id no longer unique)
@@ -99,11 +112,15 @@ public abstract class AbstractMenuPanel extends Panel {
 	}
 	/**
 	 * May not rely on anything in the implementing class's constructor as this will not have been initialized yet.
-	 * Items are rendered from left to right as you might expect, first item in the list will be first tab item on the left.
+	 * Items are rendered from left to right (or top to bottom depending on type of menu) as you might expect,
+	 * the first item in the list will be the first menu item on the left/top.
 	 * @return
 	 */
 	protected abstract List<MenuItem> getItemList();
-	
+	/**
+	 * Implement in subclass to return the wanted MenuType.
+	 * @return
+	 */
 	protected abstract MenuType getMenuType();
 	
 	/**
@@ -118,7 +135,7 @@ public abstract class AbstractMenuPanel extends Panel {
 		private Class<? extends Page> targetClass;
 		private PageParameters pp;
 		private String iconName;
-		private Class<? extends MenuHighlight> menuHilightInterface;
+		private Class<? extends MenuHighlight> menuHighlightInterface;
 		
 		public MenuItem(final String name, final Class<? extends Page> targetClass) {
 			this(name, targetClass, null, null, null);
@@ -148,7 +165,7 @@ public abstract class AbstractMenuPanel extends Panel {
 		public MenuItem(final String name, final Class<? extends Page> targetClass, final Class<? extends MenuHighlight> menuHilightInterface, PageParameters pp, String iconName) {
 			this.name = name;
 			this.targetClass = targetClass;
-			this.menuHilightInterface = menuHilightInterface;
+			this.menuHighlightInterface = menuHilightInterface;
 			this.pp = pp;
 			this.iconName = iconName == null ? ImageIcon.ICON_EMPTY : iconName;
 		}
@@ -169,13 +186,13 @@ public abstract class AbstractMenuPanel extends Panel {
 			return iconName;
 		}
 
-		public MenuItem setMenuHilightInterface(Class<? extends MenuHighlight> menuHilightInterface) {
-			this.menuHilightInterface = menuHilightInterface;
+		public MenuItem setMenuHighlightInterface(Class<? extends MenuHighlight> menuHighlightInterface) {
+			this.menuHighlightInterface = menuHighlightInterface;
 			return this;
 		}
 
-		public Class<? extends MenuHighlight> getMenuHilightInterface() {
-			return menuHilightInterface;
+		public Class<? extends MenuHighlight> getMenuHighlightInterface() {
+			return menuHighlightInterface;
 		}
 
 		
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..083e4f8b85 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,15 @@ 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());
+			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 +120,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.removeFromBoardMessages(boardMessageDao.reLoad(bm));
+						messageBoardDao.save(mb);
+						boardMessageDao.delete(boardMessageDao.reLoad(bm));
 						webMarkupContainer.removeAll();
 						loadUserDataView(new BoardMessageDataProvider(messageBoardModel));
 						webMarkupContainer.add(dataView);
@@ -242,23 +252,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/FinalSeminarUploadController.java b/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java
index 0c03a098ff..0d2252d6d8 100644
--- a/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java
+++ b/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java
@@ -6,11 +6,10 @@ import org.apache.wicket.markup.html.form.upload.FileUpload;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition;
 import se.su.dsv.scipro.data.dataobjects.User;
+import se.su.dsv.scipro.repository.util.FileStorageException;
 
 public interface FinalSeminarUploadController extends IClusterable {
 
-	void deleteSeminarFilesRecursive(FinalSeminar seminar);
-
 	void deleteOpponentFiles(FinalSeminarOpposition opp);
 	
 	/**
@@ -20,6 +19,15 @@ public interface FinalSeminarUploadController extends IClusterable {
 	 * @throws Exception
 	 */
 	FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception;
+	
+	/**
+	 * Delete the upload report for the seminar, adminOverrideMode = true means no intentional exceptions will be thrown
+	 * @param seminar
+	 * @param adminOverrideMode
+	 * @return
+	 * @throws Exception
+	 */
+	FinalSeminar deleteSeminarReport(FinalSeminar seminar, boolean adminOverrideMode) throws Exception;
 
 	void storeSeminarDocument(FileUpload upload, User uploader, FinalSeminar seminar) throws Exception;
 
diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java b/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java
index f9aa382f22..8a763dc75e 100644
--- a/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java
+++ b/src/main/java/se/su/dsv/scipro/data/controllers/NotificationController.java
@@ -26,9 +26,6 @@ public interface NotificationController {
 	public void notifyForComment(final User user, final String message,
 			final NotificationPriority notificationPriority, final String title,
 			final String classId, final String absolutePath);
-
-	public void notifyReplyPrivateMessage(final User user, final String message,
-			final String url);
 	
 	public void notifyFinalSeminarEdited(final User user,
 			final FinalSeminar finalSeminar, final NotificationPriority notificationPriority,
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 c010bb8378..1d3838e717 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
@@ -78,17 +78,9 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
 	}
 
 	private void delete(String path) {
-
 		fileRepository.delete(path);
 	}
 
-	public void deleteSeminarFilesRecursive(final FinalSeminar seminar) throws FileStorageException {
-		if (seminar.getDocument() != null) {
-			//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)); Use of deprecated path/method
@@ -103,18 +95,31 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
 	 * @return
 	 * @throws Exception
 	 */
-	public FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception {
+	public FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception{
+		return deleteSeminarReport(seminar, false);
+	}
+	/**
+	 * Delete the upload report for the seminar, adminOverrideMode = true means no intentional exceptions will be thrown
+	 * @param seminar
+	 * @param adminOverrideMode
+	 * @return
+	 * @throws Exception
+	 */
+	public FinalSeminar deleteSeminarReport(FinalSeminar seminar, boolean adminOverrideMode) throws Exception {
 		seminar = finalSeminarDao.reLoad(seminar);
-		if (!seminar.getOppositions().isEmpty() || !seminar.getActiveParticipations().isEmpty()) {
-			throw new Exception(
-					"Cannot delete seminar report, seminar has opponents or active participants");
+		if( !adminOverrideMode ){
+			if (!seminar.getOppositions().isEmpty() || !seminar.getActiveParticipations().isEmpty()) {
+				throw new Exception(
+				"Cannot delete seminar report, seminar has opponents or active participants");
+			}
 		}
 		for (CheckPlagiarismEvent cpe : checkPlagiarismEventDao.getWithFileDescription(seminar
 				.getDocument())) {
 			checkPlagiarismEventDao.delete(cpe);
 		}
-
-		fileRepository.delete(seminar.getDocument().getPath());
+		if(seminar.getDocument() != null)
+			if(seminar.getDocument().getPath() != null)
+				fileRepository.delete(seminar.getDocument().getPath());
 		seminar.setDocument(null);
 		return finalSeminarDao.save(seminar);
 	}
@@ -183,11 +188,11 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
 			}
 
 		} catch (IOException e) {
-			Logger.getRootLogger().log(Level.ERROR,
+			Logger.getLogger(this.getClass()).log(Level.ERROR,
 					"Error while storing seminardocument: " + e.getMessage());
 			throw new Exception(e);
 		} catch (PersistenceException e) {
-			Logger.getRootLogger().log(Level.ERROR,
+			Logger.getLogger(this.getClass()).log(Level.ERROR,
 					"Error while storing seminardocument : " + e.getMessage());
 			if (fd != null) {
 				fileDescriptionDao.delete(fd);
@@ -228,11 +233,11 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
 						SupervisorProjectsFinalSeminarPage.getAbsoluteURL());
 			}
 		} catch (IOException e) {
-			Logger.getRootLogger().log(Level.ERROR,
+			Logger.getLogger(this.getClass()).log(Level.ERROR,
 					"Error while storing opposition report: " + e.getMessage());
 			throw new Exception(e);
 		} catch (PersistenceException e) {
-			Logger.getRootLogger().log(Level.ERROR,
+			Logger.getLogger(this.getClass()).log(Level.ERROR,
 					"Error while storing opposition: " + e.getMessage());
 
 			if (fd != null) {
diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/HandInControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/HandInControllerImpl.java
index 75b28407b3..4d0cdd6ab9 100644
--- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/HandInControllerImpl.java
+++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/HandInControllerImpl.java
@@ -111,7 +111,7 @@ public class HandInControllerImpl implements HandInController, IClusterable {
 			return true;
 		} catch (Exception e) {
 			//Something went wrong...
-			Logger.getRootLogger().log(Level.ERROR, "An error occured while storing a handin..."+ e.getMessage());
+			Logger.getLogger(this.getClass()).log(Level.ERROR, "An error occured while storing a handin..."+ e.getMessage());
 			
 			//Delete from repository
 			//TODO: Possible delete the hand in activity folder for the event as well if it's empty
diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/HandInFeedbackControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/HandInFeedbackControllerImpl.java
index 54330e8616..e5eb7539de 100644
--- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/HandInFeedbackControllerImpl.java
+++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/HandInFeedbackControllerImpl.java
@@ -81,7 +81,7 @@ public class HandInFeedbackControllerImpl implements HandInFeedbackController {
 			handIn.setStatus(oldStatus);
 			handInFeedbackDao.save(handIn.getFeedback());
 			handInDao.save(handIn);
-			Logger.getRootLogger().log(Level.ERROR, "Failed to store feedback " + e.getMessage());
+			Logger.getLogger(this.getClass()).log(Level.ERROR, "Failed to store feedback " + e.getMessage());
 			return false;
 		}
 	}
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..0bd68ab8ce 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
@@ -1,11 +1,9 @@
 package se.su.dsv.scipro.data.controllers.impl;
 
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Properties;
-
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.RequestCycle;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.StringResourceModel;
 import org.apache.wicket.protocol.http.RequestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -32,7 +30,6 @@ import se.su.dsv.scipro.peer.data.dataobjects.PeerReview;
 import se.su.dsv.scipro.peer.pages.ProjectPeerReviewPage;
 import se.su.dsv.scipro.peer.pages.ProjectPeerStatsPage;
 import se.su.dsv.scipro.peer.pages.SupervisorPeerReviewPage;
-import se.su.dsv.scipro.util.PropsUtils;
 
 /**
  * TODO Think this through and do it properly, this is a rush-job implemented
@@ -65,7 +62,7 @@ public class NotificationControllerImpl implements NotificationController {
 		String systemFromName = generalSystemSettings.getMailFromName();
 		String systemFromEmail = generalSystemSettings.getSystemFromMail();
 		boolean sendMailEnabled = generalSystemSettings.isMailNotifications();
-		// Mailnotifications
+		// Mail notifications
 		if (sendMailEnabled) {
 			UserSettings userSettings = userSettingsDao.getUserSettings(usertoNotify);
 			if (userSettings == null) {
@@ -112,7 +109,7 @@ public class NotificationControllerImpl implements NotificationController {
 			}
 		}
 
-		// Webnotifications
+		// Web notifications
 		WebNotification notification = new WebNotification();
 		notification.setUser(usertoNotify);
 		notification.setInfoText(notificationMessage.getWebNotificationMessage());
@@ -120,86 +117,46 @@ public class NotificationControllerImpl implements NotificationController {
 		notificationDao.save(notification);
 	}
 
-	private String generateMail(String userFirstName, String addMessage, String absoluteUrl) {
-		String message = "";
-
-		Properties props = null;
-
-		try {
-			props = PropsUtils.load("notification.properties");
-			String twoNewLines = props.getProperty("twoNewLines");
-			String hello = props.getProperty("hello");
-			String autogenerated = props.getProperty("autogenerated");
-			String twoNewLinesWithComma = props.getProperty("twoNewLinesWithComma");
-			String linkText = props.getProperty("linkText");
-
-			message += hello;
-			message += userFirstName;
-			message += twoNewLinesWithComma;
-
-			message += addMessage;
-
-			message += twoNewLines;
-			message += linkText;
-			message += absoluteUrl;
-			message += twoNewLines;
-			message += autogenerated;
-
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-
-		return message;
+	/*
+	 * String resources is available in file SciProApplication.properties.
+	 */
+	private String generateMail(String userFirstName, String addMessage,
+			String absoluteUrl) {
+		return new StringResourceModel("mailNotification", null, new Object[] {
+				userFirstName, addMessage, absoluteUrl }).getString();
 	}
 
 	@Override
 	public void notifyPrivateMessage(final User user, final String message,
 			final String url) {
-		Properties props = null;
-		try {
-			props = PropsUtils.load("notification.properties");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		String mailSubject = props.getProperty("mailSubject");
-		String privateMessageNotification = props.getProperty("privateMessageNotification");
-		String twoNewLines = props.getProperty("twoNewLines");
-
-		String webNotificationMessage = SciProSession.get().getUser() + privateMessageNotification;
-
-		String mailMessage = webNotificationMessage + twoNewLines + message;
+	
+		String webNotificationMessage = new StringResourceModel("pm.webNotification", 
+				new Model<User>(SciProSession.get().getUser())).getString();
+		String mailBody = new StringResourceModel("mailBody", null, new Object[]{message}).getString();
+		
+		String mailMessage = webNotificationMessage + mailBody;
+		String mailSubject = new StringResourceModel("mailSubject", null).getString();
 
 		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
-				mailSubject, mailMessage);
+				mailSubject, mailMessage);		
 		processNotification(user, notificationMessage, url, NotificationPriority.MEDIUM);
-
 	}
 
 	@Override
 	public void notifyConferencePost(final User user, final String message,
 			final String messageboardTitle, final NotificationPriority notificationPriority,
-			final String absolutePath) {
+			final String url) {
 
-		Properties props = null;
-		try {
-			props = PropsUtils.load("notification.properties");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		String mailSubject = props.getProperty("mailSubject");
-		String conferenceNotification = props.getProperty("conferenceNotification");
-		String twoNewLines = props.getProperty("twoNewLines");
-		String quote = props.getProperty("quote");
-
-		String webNotificationMessage = SciProSession.get().getUser() + conferenceNotification
-				+ quote + messageboardTitle + quote;
-
-		String mailMessage = webNotificationMessage + twoNewLines + message;
+		String webNotificationMessage = new StringResourceModel("conferencePost.webNotification",
+				new Model<User>(SciProSession.get().getUser()), new Object[] {messageboardTitle}).getString();
+		String mailBody = new StringResourceModel("mailBody", null, new Object[]{message}).getString();
+		
+		String mailMessage = webNotificationMessage + mailBody;
+		String mailSubject = new StringResourceModel("mailSubject", null).getString();
 
 		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
 				mailSubject, mailMessage);
-		processNotification(user, notificationMessage, absolutePath, notificationPriority);
+		processNotification(user, notificationMessage, url, notificationPriority);
 	}
 
 	@Override
@@ -207,69 +164,27 @@ public class NotificationControllerImpl implements NotificationController {
 			final NotificationPriority notificationPriority, final String title,
 			final String classId, final String absolutePath) {
 
-		Properties props = null;
-		try {
-			props = PropsUtils.load("notification.properties");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		String mailSubject = props.getProperty("mailSubject");
-		String conferenceNotification = props.getProperty("conferenceNotificationComment");
-		String twoNewLines = props.getProperty("twoNewLines");
-
-		String webNotificationMessage = SciProSession.get().getUser() + conferenceNotification
-				+ title;
-
-		String mailMessage = webNotificationMessage + twoNewLines + message;
+		String webNotificationMessage = new StringResourceModel("comment.webNotification", 
+				new Model<User>(SciProSession.get().getUser()), new Object[] { title }).getString();
+		String mailBody = new StringResourceModel("mailBody", null, new Object[]{message}).getString();
+		
+		String mailMessage = webNotificationMessage + mailBody;
+		String mailSubject = new StringResourceModel("mailSubject", null).getString();
 
 		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
 				mailSubject, mailMessage);
-		processNotification(user, notificationMessage, absolutePath + "&" + classId,
+		processNotification(user, notificationMessage, absolutePath + "/cid/" + classId,
 				notificationPriority);
 	}
 
-	@Override
-	public void notifyReplyPrivateMessage(final User user, final String message,
-			final String absolutePath) {
-		Properties props = null;
-		try {
-			props = PropsUtils.load("notification.properties");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		String mailSubject = props.getProperty("mailSubject");
-		String privateMessageNotification = props.getProperty("privateMessageReplyNotification");
-		String twoNewLines = props.getProperty("twoNewLines");
-
-		String webNotificationMessage = SciProSession.get().getUser() + privateMessageNotification;
-
-		String mailMessage = webNotificationMessage + twoNewLines + message;
-
-		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
-				mailSubject, mailMessage);
-		processNotification(user, notificationMessage, absolutePath, NotificationPriority.MEDIUM);
-	}
-
 	@Override
 	public void notifyFinalSeminarEdited(final User user,
 			final FinalSeminar finalSeminar, final NotificationPriority notificationPriority,
 			final String absolutePath) {
 
-		Properties props = null;
-		try {
-			props = PropsUtils.load("notification.properties");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		String mailSubject = props.getProperty("mailSubject");
-		String finalSeminarReportEdited = props.getProperty("finalSeminarOppositionReportEdited");
-		String finalSeminarOppositionReportBeenEdited = props
-				.getProperty("finalSeminarOppositionReportBeenEdited");
-		String quote = props.getProperty("quote");
+		String webNotificationMessage = new StringResourceModel("finalSeminarEdit.webNotification", new Model<FinalSeminar>(finalSeminar)).getString();
 
-		String webNotificationMessage = finalSeminarReportEdited + quote
-				+ finalSeminar.getProject().getTitle() + quote
-				+ finalSeminarOppositionReportBeenEdited;
+		String mailSubject = new StringResourceModel("mailSubject", null).getString();
 		String mailMessage = webNotificationMessage;
 
 		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
@@ -279,37 +194,17 @@ public class NotificationControllerImpl implements NotificationController {
 
 	@Override
 	public void notifyCreateFinalSeminar(final User user,
-			final FinalSeminar finalSemniar, final NotificationPriority notificationPriority,
+			final FinalSeminar finalSeminar, final NotificationPriority notificationPriority,
 			final String absolutePath, final boolean opponent) {
-
-		Properties props = null;
-		try {
-			props = PropsUtils.load("notification.properties");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		String created = props.getProperty("finalSeminarCreated");
-		String mailSubject = props.getProperty("mailSubject");
-		String project = "";
+		String webNotificationMessage = "";
 		if (!opponent) {
-			project = props.getProperty("finalSeminarProject");
+			 webNotificationMessage = new StringResourceModel("finalSeminarCreated.webNotification", new Model<FinalSeminar>(finalSeminar), new Object[]{finalSeminar.getStartDate(), finalSeminar.getEndDate()}).getString();
 		} else {
-			project = props.getProperty("finalSeminarProjectOpponnent");
+			 webNotificationMessage = new StringResourceModel("finalSeminarCreatedOpponent.webNotification", new Model<FinalSeminar>(finalSeminar), new Object[]{finalSeminar.getStartDate(), finalSeminar.getEndDate()}).getString();
 		}
-
-		String comma = props.getProperty("comma");
-		String space = props.getProperty("space");
-		String quote = props.getProperty("quote");
-
-		DateFormat dfFrom = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-		DateFormat dfTo = new SimpleDateFormat("-HH:mm");
-		String webNotificationMessage = created + quote + finalSemniar.getProject().getTitle()
-				+ quote + project + finalSemniar.getRoom() + comma + space
-				+ dfFrom.format(finalSemniar.getStartDate())
-				+ dfTo.format(finalSemniar.getEndDate());
-
+		
 		String mailMessage = webNotificationMessage;
+		String mailSubject = new StringResourceModel("mailSubject", null).getString();
 
 		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
 				mailSubject, mailMessage);
@@ -321,108 +216,58 @@ public class NotificationControllerImpl implements NotificationController {
 			final FinalSeminar finalSeminar, final NotificationPriority notificationPriority,
 			final String absolutePath) {
 
-		Properties props = null;
-		try {
-			props = PropsUtils.load("notification.properties");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		String mailSubject = props.getProperty("mailSubject");
-		String finalSeminarReportUploaded = props.getProperty("finalSeminarReportUploaded");
-		String finalSeminarReportBeenUploaded = props.getProperty("finalSeminarReportBeenUploaded");
-		String quote = props.getProperty("quote");
-
-		String webNotificationMessage = finalSeminarReportUploaded + quote
-				+ finalSeminar.getProject().getTitle() + quote + finalSeminarReportBeenUploaded;
+		String webNotificationMessage = new StringResourceModel("thesisUpload.webNotification", 
+				new Model<FinalSeminar>(finalSeminar)).getString();
 		String mailMessage = webNotificationMessage;
+		String mailSubject = new StringResourceModel("mailSubject", null).getString();
 
 		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
 				mailSubject, mailMessage);
-		processNotification(user, notificationMessage, absolutePath, notificationPriority);
+		processNotification(user, notificationMessage, absolutePath, notificationPriority);			
+		System.out.println(generateMail(user.getFirstName(), notificationMessage.getMailMessage(), absolutePath));
 	}
 
 	@Override
 	public void notifyOppositionUploaded(final User user,
 			final FinalSeminarOpposition opposition,
 			final NotificationPriority notificationPriority, final String absolutePath) {
-
-		Properties props = null;
-		try {
-			props = PropsUtils.load("notification.properties");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		String mailSubject = props.getProperty("mailSubject");
-		String finalSeminarOppositionReportUploaded = props
-				.getProperty("finalSeminarOppositionReportUploaded");
-		String finalSeminarOppositionReportBeenUploaded = props
-				.getProperty("finalSeminarOppositionReportBeenUploaded");
-		String dot = props.getProperty("dot");
-		String quote = props.getProperty("quote");
-		String space = props.getProperty("space");
-
-		String webNotificationMessage = finalSeminarOppositionReportUploaded + quote
-				+ opposition.getFinalSeminar().getProject().getTitle() + quote
-				+ finalSeminarOppositionReportBeenUploaded
-				+ opposition.getOpponent().getUser().getFirstName() + space
-				+ opposition.getOpponent().getUser().getLastName() + dot;
+		
+		String webNotificationMessage = new StringResourceModel("oppositionUpload.webNotification", 
+				new Model<FinalSeminarOpposition>(opposition)).getString();
 		String mailMessage = webNotificationMessage;
-
+		String mailSubject = new StringResourceModel("mailSubject", null).getString();
+		
 		NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
 				mailSubject, mailMessage);
 		processNotification(user, notificationMessage, absolutePath, notificationPriority);
 	}
 
 	public void notifyAcceptOfReview(PeerRequest request, Student student, Project project) {
-		try {
-			Properties props = null;
+	
+		String webNotificationMessage = new StringResourceModel("reviewAccepted.webNotification", null, new Object[]{student.getUser(), project.getProjectClass().getProjectClassSettings()
+				.getNumDaysToSubmitPeerReview()}).getString();
+		String mailSubject = new StringResourceModel("acceptPeerReviewSubject", null).getString();
 
-			props = PropsUtils.load("notification.properties");
+		User requestingUser = request.getRequester().getUser();
 
-			String mailSubject = props.getProperty("acceptPeerReviewSubject");
-			String requestAccepted = props.getProperty("requestAccepted");
-			String heShe = props.getProperty("heShe");
-			String complete = props.getProperty("complete");
-
-			User requestingUser = request.getRequester().getUser();
-
-			String messageBody = requestAccepted
-					+ student.getUser().toString()
-					+ heShe
-					+ project.getProjectClass().getProjectClassSettings()
-							.getNumDaysToSubmitPeerReview() + complete;
-
-			String webNotificationMessage = requestAccepted + student.getUser().toString();
-
-			NotificationMessage notificationMessage = new NotificationMessage(
+		String messageBody = webNotificationMessage;	
+		NotificationMessage notificationMessage = new NotificationMessage(
 					webNotificationMessage, mailSubject, messageBody);
 
-			PageParameters pp = new PageParameters();
+		PageParameters pp = new PageParameters();
 
-			String peerStatsUrl = RequestUtils.toAbsolutePath(RequestCycle.get()
+		String peerStatsUrl = RequestUtils.toAbsolutePath(RequestCycle.get()
 					.urlFor(ProjectPeerStatsPage.class, pp).toString());
 
-			processNotification(requestingUser, notificationMessage, peerStatsUrl,
+		processNotification(requestingUser, notificationMessage, peerStatsUrl,
 					NotificationPriority.MEDIUM);
-		} catch (Exception e) {
-			e.printStackTrace();
 		}
-	}
 
 
 	public void notifyCompletionOfReview(PeerReview review) {
-		try {
-
-			Properties props = null;
-			props = PropsUtils.load("notification.properties");
-			String mailSubject = props.getProperty("completedReviewSubject");
-			String requestReviewed = props.getProperty("requestReviewed");
-			String supervisorMessageBody = props.getProperty("supervisorMessageBody");
-			String supervisorMessageBody2 = props.getProperty("supervisorMessageBody2");
-			String supervisorMessageBody3 = props.getProperty("supervisorMessageBody3");
-			String commaWithLinebreak = props.getProperty("commaWithLinebreak");
-			String inProject = props.getProperty("inProject");
-			String hasPerformed = props.getProperty("hasPerformed");
+			
+			String mailSubject = new StringResourceModel("completedReviewSubject", null).getString();
+			
 			PeerRequest peerRequest = review.getPeerRequest();
 			User requestingUser = peerRequest.getRequester().getUser();
 
@@ -435,21 +280,26 @@ public class NotificationControllerImpl implements NotificationController {
 					.urlFor(SupervisorPeerReviewPage.class, pp).toString());
 
 			// Message for student when his/her review request is completed.
-			String messageBody = requestReviewed;
+			String webNotificationMessageForRequester = new StringResourceModel(
+					"reviewCompletedforRequester.webNotification",
+					new Model<PeerReview>(review)).getString();
 
-			NotificationMessage notificationMessage = new NotificationMessage(messageBody,
-					mailSubject, messageBody);
+			NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessageForRequester,
+					mailSubject, webNotificationMessageForRequester);
 
 			processNotification(requestingUser, notificationMessage, reviewUrl,
 					NotificationPriority.MEDIUM);
 
 			// Message for supervisor of the project with a completed review.
-			messageBody = supervisorMessageBody + peerRequest.getProject().getTitle()
-					+ supervisorMessageBody2;
+			
+			String webNotificationMessageForSupervisorOfProject = new StringResourceModel(
+					"reviewCompletedforRequestSupervisor.webNotification",
+					new Model<PeerReview>(review)).getString();
+			
 			User requestSupervisor = peerRequest.getProject().getHeadSupervisor().getUser();
 
 			NotificationMessage notificationMessageSupervisorOfProject = new NotificationMessage(
-					messageBody, mailSubject, messageBody);
+					webNotificationMessageForSupervisorOfProject, mailSubject, webNotificationMessageForSupervisorOfProject);
 
 			processNotification(requestSupervisor, notificationMessageSupervisorOfProject,
 					supervisorReviewUrl, NotificationPriority.MEDIUM);
@@ -457,36 +307,22 @@ public class NotificationControllerImpl implements NotificationController {
 			// Message for supervisor of the reviewer that have made a review
 			// for another project.
 
-			String webNotificationMessage = review.getReviewer().getUser().toString() + inProject
-					+ review.getProject().getTitle() + hasPerformed;
-
-			messageBody = supervisorMessageBody + review.getProject().getTitle()
-					+ commaWithLinebreak + review.getReviewer().getUser().toString()
-					+ supervisorMessageBody3;
+			String webNotificationMessageForSupervisorOfReviewer = new StringResourceModel(
+					"reviewCompletedforReviewSupervisor.webNotification",
+					new Model<PeerReview>(review)).getString();
 
 			User reviewSupervisor = review.getProject().getHeadSupervisor().getUser();
 			NotificationMessage notificationMessageSupervisorOfReviewer = new NotificationMessage(
-					webNotificationMessage, mailSubject, messageBody);
+					webNotificationMessageForSupervisorOfReviewer, mailSubject, webNotificationMessageForSupervisorOfReviewer);
 
 			processNotification(reviewSupervisor, notificationMessageSupervisorOfReviewer,
 					supervisorReviewUrl, NotificationPriority.MEDIUM);
-
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
 	}
 
-	/**
-	 * TODO Rewrite
-	 * 
-	 * @param review
-	 */
 	public void notifyOfReviewRating(PeerReview review) {
-		try {
-			Properties props = null;
-			props = PropsUtils.load("notification.properties");
-			String mailSubject = props.getProperty("reviewRatedSubject");
-			String reviewRatedBody = props.getProperty("reviewRatedBody");
+		
+			String webNotificationMessage = new StringResourceModel("reviewRated.webNotification", null).getString();
+			String mailSubject = new StringResourceModel("completedReviewSubject", null).getString();
 			User reviewingUser = review.getReviewer().getUser();
 
 			PageParameters pp = new PageParameters();
@@ -494,16 +330,12 @@ public class NotificationControllerImpl implements NotificationController {
 			String projectReviewUrl = RequestUtils.toAbsolutePath(RequestCycle.get()
 					.urlFor(ProjectPeerReviewPage.class, pp).toString());
 
-			String messageBody = reviewRatedBody;
+			String mailMessage = webNotificationMessage;
 
-			NotificationMessage notificationMessage = new NotificationMessage(messageBody,
-					mailSubject, messageBody);
+			NotificationMessage notificationMessage = new NotificationMessage(webNotificationMessage,
+					mailSubject, mailMessage);
 
 			processNotification(reviewingUser, notificationMessage, projectReviewUrl,
 					NotificationPriority.MEDIUM);
-
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
 	}
 }
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/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..4e0117545c
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/interfaces/CheckListDao.java
@@ -0,0 +1,14 @@
+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;
+import se.su.dsv.scipro.data.enums.CheckListRole;
+
+public interface CheckListDao extends Dao<CheckList> {
+
+	public List<CheckList> findCheckLists(final Project project, CheckListRole role);
+	//use this if a dataview is necesary
+	//public int countCheckLists (final CheckList cl, Project project);
+}
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/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/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..7241462343
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dao/jpa/CheckListDaoJPAImp.java
@@ -0,0 +1,74 @@
+package se.su.dsv.scipro.data.dao.jpa;
+
+import java.util.ArrayList;
+import java.util.Date;
+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.joda.time.DateTime;
+import org.springframework.orm.jpa.JpaCallback;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+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;
+import se.su.dsv.scipro.data.dataobjects.ProjectClass;
+import se.su.dsv.scipro.data.enums.CheckListRole;
+
+/**
+ * 
+ * @author Fredrik Norberg - fnorbe@dsv.su.se
+ * 
+ */
+
+@Repository("checkListDao")
+public class CheckListDaoJPAImp extends AbstractDaoJPAImp<CheckList> implements CheckListDao {
+
+	public CheckListDaoJPAImp() {
+		super(CheckList.class);
+	}
+
+	public List<CheckList> findCheckLists(final Project project, CheckListRole role) {
+		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>();
+				}
+
+			}
+
+		});
+	}
+	//use this if a dataview is necesary
+	/*@Override
+	@Transactional(readOnly = true)
+	public int countCheckLists(final CheckList cl,final  Project project) {
+		return getJpaTemplate().execute(new JpaCallback<Integer>() {
+
+			@Override
+			public Integer doInJpa(EntityManager em)
+					throws PersistenceException {
+		String q = "SELECT COUNT(cl) from CheckList cl WHERE cl.project = :p" ;
+		TypedQuery<Long> query = em.createQuery(q,
+				Long.class);
+		query.setHint(QueryHints.HINT_CACHEABLE, "true");
+		query.setParameter("p", project);
+		
+		return (query.getSingleResult()).intValue();
+			}
+		});
+	}*/
+}
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/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/CheckList.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java
new file mode 100644
index 0000000000..a44465e669
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckList.java
@@ -0,0 +1,137 @@
+package se.su.dsv.scipro.data.dataobjects;
+
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+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.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
+ * 
+ */
+
+@Entity
+@Table(name = "checklist")
+@Cacheable(true)
+@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)
+	private String name;
+
+	@ManyToOne(optional = false)
+	private Project project;
+
+	
+	@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;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	/**
+	 * @return the questions
+	 */
+	public SortedSet<CheckListQuestion> getQuestions() {
+		return questions;
+	}
+
+	/**
+	 * @param questions
+	 *            the questions to set
+	 */
+	public void setQuestions(SortedSet<CheckListQuestion> questions) {
+		this.questions = questions;
+	}
+
+	/**
+	 * @return the project
+	 */
+	public Project getProject() {
+		return project;
+	}
+
+	/**
+	 * @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) {
+
+			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;
+	}
+
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+}
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..3045baded3
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListAnswer.java
@@ -0,0 +1,124 @@
+package se.su.dsv.scipro.data.dataobjects;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+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 se.su.dsv.scipro.data.enums.CheckListQuestionAnswer;
+
+/**
+ * @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)
+	@Column(nullable=false)
+	private CheckListQuestionAnswer answer;
+
+	@ManyToOne(optional=false)
+	private User user;
+	
+	@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;
+	}
+
+	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;
+	}
+	
+	
+
+	/**
+	 * @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) {
+
+			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..c81037bd91
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListQuestion.java
@@ -0,0 +1,133 @@
+package se.su.dsv.scipro.data.dataobjects;
+
+import java.util.ArrayList;
+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)
+public 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
+	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;
+	}
+
+	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;
+	}
+	
+	
+
+	/**
+	 * @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) {
+
+			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 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
new file mode 100644
index 0000000000..a4ba4cade7
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/CheckListTemplate.java
@@ -0,0 +1,126 @@
+package se.su.dsv.scipro.data.dataobjects;
+
+import java.util.ArrayList;
+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
+	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) {
+		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;
+	}
+	
+	
+	/**
+	 * @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;
+		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/dataobjects/Event.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/Event.java
index 413633c472..931c51f226 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,7 +154,17 @@ public abstract class Event extends LazyDeletableDomainObject
 
 	@Override
 	public int compareTo(Event other) {
-		return (int) (dueDate.getTime() - other.dueDate.getTime());
+		int dcomp = dueDate.compareTo(other.dueDate);
+		if (dcomp == 0){
+			if (id == null){
+				return -1;
+			}else if(other.id == null){
+				return 1;
+			}
+			else return id.compareTo(other.id);
+			}
+		
+		return dcomp;
 	}
 	
 	public Panel getDisplayPanel(String id){
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 24e44fee06..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
@@ -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;
@@ -70,32 +74,27 @@ public class MessageBoard extends DomainObject{
 		if(getCommentableKey().length() > 255)
 			throw new IllegalArgumentException("CommentThread-commentableKey may not be longer than 255 characters");
 	}
-	
+
+	@OrderColumn(name="orderIndex")
+	@ManyToMany
+	private List<BoardMessage> boardMessages = new ArrayList<BoardMessage>();
 
 	
-	@Sort(type=SortType.NATURAL)
-	@OneToMany(mappedBy="messageBoard", orphanRemoval=true, cascade=CascadeType.ALL, targetEntity=BoardMessage.class)
-	private SortedSet<BoardMessage> boardMessageSet = new TreeSet<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 commentableKey
-	 */
 	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);
+	}
+	
+	public void removeFromBoardMessages(BoardMessage boardMessage){
+        boardMessages.remove(boardMessage);
+	}
 	/**
 	 * @param commentableKey the commentableKey to set
 	 */
diff --git a/src/main/java/se/su/dsv/scipro/data/dataobjects/Project.java b/src/main/java/se/su/dsv/scipro/data/dataobjects/Project.java
index 455ff5a680..a97b96ccfa 100644
--- a/src/main/java/se/su/dsv/scipro/data/dataobjects/Project.java
+++ b/src/main/java/se/su/dsv/scipro/data/dataobjects/Project.java
@@ -1,6 +1,8 @@
 package se.su.dsv.scipro.data.dataobjects;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
@@ -41,6 +43,7 @@ public class Project extends DomainObject implements Comparable<Project>, Iconiz
 	private static final long serialVersionUID = 9071570648984376188L;
 	
 	public static final String PP_PROJECT_ID = "pid";
+	
 
 	@Id
 	@GeneratedValue
@@ -82,6 +85,10 @@ public class Project extends DomainObject implements Comparable<Project>, Iconiz
 	private String statusMessage = "";
 	
 	private Date daisyStartDate;
+	
+	@OneToMany(targetEntity=CheckList.class, cascade=CascadeType.ALL, orphanRemoval=true)
+	@Sort(type=SortType.NATURAL) //Required by hibernate
+	private List<CheckList> checkLists = new ArrayList<CheckList>();
 
 	public Project() {}
 
@@ -208,6 +215,18 @@ public class Project extends DomainObject implements Comparable<Project>, Iconiz
 	public void setStatusMessage(String statusMessage) {
 		this.statusMessage = statusMessage;
 	}
+	
+	public List<CheckList> getCheckLists() {
+		return checkLists;
+	}
+
+	public void setCheckLists(List<CheckList> checkLists) {
+		this.checkLists = checkLists;
+	}
+	
+	public void addCheckList(CheckList cl){
+		checkLists.add(cl);
+	}
 
 	@Override
 	public int hashCode() {
@@ -268,6 +287,5 @@ public class Project extends DomainObject implements Comparable<Project>, Iconiz
 	final public String getCommentKey() {
 		return Project.class.getCanonicalName().toString();
 	}
-	
-	
+
 }
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
+}
diff --git a/src/main/java/se/su/dsv/scipro/data/enums/CheckListRole.java b/src/main/java/se/su/dsv/scipro/data/enums/CheckListRole.java
new file mode 100644
index 0000000000..06cbbf71bf
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/data/enums/CheckListRole.java
@@ -0,0 +1,7 @@
+package se.su.dsv.scipro.data.enums;
+
+public enum CheckListRole {
+	AUTHOR,
+	SUPERVISOR,
+	ADMIN
+}
diff --git a/src/main/java/se/su/dsv/scipro/json/DefaultUserFullLookup.java b/src/main/java/se/su/dsv/scipro/json/DefaultUserFullLookup.java
index 17c7d943c9..8f9725f62f 100644
--- a/src/main/java/se/su/dsv/scipro/json/DefaultUserFullLookup.java
+++ b/src/main/java/se/su/dsv/scipro/json/DefaultUserFullLookup.java
@@ -40,7 +40,7 @@ public class DefaultUserFullLookup implements IUserLookup {
 	private Logger logger;
 	
 	public DefaultUserFullLookup(){
-		logger = Logger.getRootLogger();
+		logger = Logger.getLogger(this.getClass());
 	}
 	
 	/**
diff --git a/src/main/java/se/su/dsv/scipro/json/DefaultUserLookup.java b/src/main/java/se/su/dsv/scipro/json/DefaultUserLookup.java
index 8dda89b732..8fcb09944b 100644
--- a/src/main/java/se/su/dsv/scipro/json/DefaultUserLookup.java
+++ b/src/main/java/se/su/dsv/scipro/json/DefaultUserLookup.java
@@ -39,7 +39,7 @@ public class DefaultUserLookup implements IUserLookup {
 	private Logger logger;
 	
 	public DefaultUserLookup(){
-		logger = Logger.getRootLogger();
+		logger = Logger.getLogger(this.getClass());
 	}
 	
 	/**
diff --git a/src/main/java/se/su/dsv/scipro/json/ImportWorkerLookup.java b/src/main/java/se/su/dsv/scipro/json/ImportWorkerLookup.java
index 2b027be9c7..8d9742f3a6 100644
--- a/src/main/java/se/su/dsv/scipro/json/ImportWorkerLookup.java
+++ b/src/main/java/se/su/dsv/scipro/json/ImportWorkerLookup.java
@@ -33,7 +33,7 @@ public class ImportWorkerLookup {
 	private Logger logger;
 	
 	public ImportWorkerLookup(){
-		logger = Logger.getRootLogger();
+		logger = Logger.getLogger(this.getClass());
 	}
 	
 	public void lookup(Date updatedAfter, String type) throws IOException{
diff --git a/src/main/java/se/su/dsv/scipro/json/JsonResponseHandler.java b/src/main/java/se/su/dsv/scipro/json/JsonResponseHandler.java
index cfddb955c7..f2932281e0 100644
--- a/src/main/java/se/su/dsv/scipro/json/JsonResponseHandler.java
+++ b/src/main/java/se/su/dsv/scipro/json/JsonResponseHandler.java
@@ -71,7 +71,7 @@ public abstract class JsonResponseHandler implements IResponseHandler {
 	
 	public JsonResponseHandler(){
 		super();
-		logger = Logger.getRootLogger();
+		logger = Logger.getLogger(this.getClass());
 	}
 	
 	
diff --git a/src/main/java/se/su/dsv/scipro/json/RequestSender.java b/src/main/java/se/su/dsv/scipro/json/RequestSender.java
index c75ab5131d..a2f4629e2e 100644
--- a/src/main/java/se/su/dsv/scipro/json/RequestSender.java
+++ b/src/main/java/se/su/dsv/scipro/json/RequestSender.java
@@ -52,7 +52,7 @@ public class RequestSender {
 	
 	public RequestSender(IResponseHandler responseHandler, String url, Map<String, String> parameters, int requestType){
 		
-		logger = Logger.getRootLogger();
+		logger = Logger.getLogger(this.getClass());
 		
 		if(requestType != REQUEST_TYPE_GET && requestType != REQUEST_TYPE_POST){
 			logger.log(Level.ERROR, "Could not send request, no request type specified");
diff --git a/src/main/java/se/su/dsv/scipro/message/models/ReplyMessageModel.java b/src/main/java/se/su/dsv/scipro/message/models/ReplyMessageModel.java
index 6b8e13e712..54453abf3d 100644
--- a/src/main/java/se/su/dsv/scipro/message/models/ReplyMessageModel.java
+++ b/src/main/java/se/su/dsv/scipro/message/models/ReplyMessageModel.java
@@ -89,7 +89,7 @@ public class ReplyMessageModel implements IClusterable {
         r.setToUser(originalMessage.getFromUser());
         r.setPrivateMessage(pm);
         r = recipientDao.save(r);
-        notificationController.notifyReplyPrivateMessage(originalMessage.getFromUser(), getReplySubject() +"\n\n" + getReplyText(), PrivateMessagesPage.getAbsoluteURL());
+        notificationController.notifyPrivateMessage(originalMessage.getFromUser(), getReplySubject() +"\n\n" + getReplyText(), PrivateMessagesPage.getAbsoluteURL());
 
     }
     
diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html
index 4dd16f9bd7..9df136e249 100644
--- a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html
+++ b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html
@@ -2,78 +2,73 @@
 <html
 	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
 <body>
-	<wicket:panel>
-		<div wicket:id="titleContainer">
-			<strong>Project Title: </strong> <span wicket:id="projectTitle"></span>
-			<div>
-				<strong>Room: </strong> <span wicket:id="room"></span>
-			</div>
-		</div>
-		<div class="append-bottom">
-			<div>
-				<strong>Head supervisor:</strong>
-			</div>
-			<span wicket:id="headSupervisor"></span>
-		</div>
-		<div>
-			<strong>Author(s): </strong>
-			<ul class="no-list-style">
-				<li wicket:id="authorsList"><span wicket:id="author"></span></li>
-			</ul>
-		</div>
+<wicket:panel>
+	<div wicket:id="feedback"></div>
+	<div wicket:id="titleContainer"><strong>Project Title: </strong>
+	<span wicket:id="projectTitle"></span>
+	<div><strong>Room: </strong> <span wicket:id="room"></span></div>
+	</div>
+	<div class="append-bottom">
+	<div><strong>Head supervisor:</strong></div>
+	<span wicket:id="headSupervisor"></span></div>
+	<div><strong>Author(s): </strong>
+	<ul class="no-list-style">
+		<li wicket:id="authorsList"><span wicket:id="author"></span></li>
+	</ul>
+	</div>
 
-		<div>
-			<strong>Co-supervisor(s): </strong>
-			<ul class="no-list-style">
-				<li wicket:id="coSupervisorsList"><span
-					wicket:id="coSupervisor"></span></li>
-			</ul>
-		</div>
+	<div><strong>Co-supervisor(s): </strong>
+	<ul class="no-list-style">
+		<li wicket:id="coSupervisorsList"><span wicket:id="coSupervisor"></span></li>
+	</ul>
+	</div>
 
-		<div>
-			<strong>Reviewer(s): </strong>
-			<ul class="no-list-style">
-				<li wicket:id="reviewersList"><span wicket:id="reviewer"></span>
-				</li>
-			</ul>
-		</div>
+	<div><strong>Reviewer(s): </strong>
+	<ul class="no-list-style">
+		<li wicket:id="reviewersList"><span wicket:id="reviewer"></span>
+		</li>
+	</ul>
+	</div>
 
 
-		<div wicket:id="detailsContainer">
-			<div>
-				<strong>Opponent(s): </strong>
-				<ul class="no-list-style">
-					<li wicket:id="opponentsList"><span wicket:id="opponent"></span>
-					</li>
-				</ul>
-			</div>
-
-			<div>
-				<strong>Active participant(s): </strong>
-				<ul class="no-list-style">
-					<li wicket:id="activeParticipantsList"><span
-						wicket:id="activeParticipant"></span></li>
-				</ul>
-			</div>
-			<div>
-				<strong>Presentation Language: </strong>
-				<div wicket:id="seminarLanguage"></div>
-			</div>
-			<div>
-				<strong>Thesis/Report Language: </strong>
-				<div wicket:id="thesisLanguage"></div>
-			</div>
-
-			<strong>Thesis/Report: </strong>
-			<div>
-				<span wicket:id="seminarReportTitle"></span> <span
-					wicket:id="uploadInfoContainer"> <a href="#"
-					wicket:id="open"><img
-						src="images/icons/document-preview_16x16.png" alt="Open/Preview" />
-				</a> <a href="#" wicket:id="download"><img
-						src="images/icons/download_16x16.png" alt="Download" /> </a> </span>
-			</div>
+	<div wicket:id="detailsContainer">
+	<div><strong>Opponent(s): </strong>
+	<ul class="no-list-style">
+		<li wicket:id="opponentsList"><span wicket:id="opponent"></span>
+		<div wicket:id="oppositionContainer"><strong>Report:</strong> <span wicket:id="oppositionReportTitle"></span> <a href="#"
+			wicket:id="open"><img
+			src="images/icons/document-preview_16x16.png" alt="Open/Preview" />
+		</a> <a href="#" wicket:id="download"><img
+			src="images/icons/download_16x16.png" alt="Download" /> </a> <a href="#"
+			wicket:id="deleteOppositionReport"><img
+			src="images/icons/delete_16x16.png" alt="delete" /> </a>
 		</div>
-	</wicket:panel>
+		</li>
+	</ul>
+	</div>
+
+	<div><strong>Active participant(s): </strong>
+	<ul class="no-list-style">
+		<li wicket:id="activeParticipantsList"><span
+			wicket:id="activeParticipant"></span></li>
+	</ul>
+	</div>
+	<div><strong>Presentation Language: </strong>
+	<div wicket:id="seminarLanguage"></div>
+	</div>
+	<div><strong>Thesis/Report Language: </strong>
+	<div wicket:id="thesisLanguage"></div>
+	</div>
+
+	<strong>Thesis/Report: </strong>
+	<div><span wicket:id="seminarReportTitle"></span> <span
+		wicket:id="uploadInfoContainer"> <a href="#" wicket:id="open"><img
+		src="images/icons/document-preview_16x16.png" alt="Open/Preview" /> </a>
+	<a href="#" wicket:id="download"><img
+		src="images/icons/download_16x16.png" alt="Download" /> </a> <a href="#"
+		wicket:id="deleteSeminarReport"><img
+		src="images/icons/delete_16x16.png" alt="delete" /> </a> </span></div>
+	</div>
+</wicket:panel>
 </body>
 </html>
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java
index 172fa064a5..21d74e01be 100644
--- a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java
+++ b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java
@@ -3,16 +3,21 @@ package se.su.dsv.scipro.opponent.panels;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.EmptyPanel;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
+import se.su.dsv.scipro.data.controllers.FinalSeminarUploadController;
 import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarDao;
+import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarOppositionDao;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminarActiveParticipation;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition;
@@ -23,6 +28,9 @@ import se.su.dsv.scipro.data.dataobjects.User;
 import se.su.dsv.scipro.data.enums.ProjectTeamMemberRoles;
 import se.su.dsv.scipro.repository.components.FileDownloadLink;
 import se.su.dsv.scipro.repository.components.FileOpenLink;
+import se.su.dsv.scipro.security.auth.MetaDataActionStrategy;
+import se.su.dsv.scipro.security.auth.roles.Roles;
+import se.su.dsv.scipro.util.JavascriptEventConfirmation;
 
 public class FinalSeminarDetailsPanel extends Panel {
 
@@ -30,11 +38,15 @@ public class FinalSeminarDetailsPanel extends Panel {
 
 	@SpringBean
 	private FinalSeminarDao finalSeminarDao;
+	@SpringBean
+	private FinalSeminarOppositionDao finalSeminarOppositionDao;
+	@SpringBean
+	private FinalSeminarUploadController finalSeminarUploadController;
 
-	public FinalSeminarDetailsPanel(final String id, final FinalSeminar seminar2,
-			final boolean details) {
+	public FinalSeminarDetailsPanel(final String id, final FinalSeminar seminar2, final boolean details) {
 		super(id);
-
+		this.setOutputMarkupId(true);
+		add(new FeedbackPanel("feedback"));
 		final FinalSeminar seminar = finalSeminarDao.reLoad(seminar2);
 		final Project project = seminar.getProject();
 		WebMarkupContainer titleContainer = new WebMarkupContainer("titleContainer") {
@@ -53,8 +65,7 @@ public class FinalSeminarDetailsPanel extends Panel {
 		});
 		titleContainer.add(new Label("room", seminar.getRoom()));
 		add(titleContainer);
-		add(new ListView<Student>("authorsList", new ArrayList<Student>(
-				project.getProjectParticipants())) {
+		add(new ListView<Student>("authorsList", new ArrayList<Student>(project.getProjectParticipants())) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -111,41 +122,77 @@ public class FinalSeminarDetailsPanel extends Panel {
 
 		};
 
-		detailsContainer.add(new ListView<FinalSeminarOpposition>("opponentsList", seminar
-				.getOppositions()) {
+		detailsContainer.add(new ListView<FinalSeminarOpposition>("opponentsList", seminar.getOppositions()) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void populateItem(ListItem<FinalSeminarOpposition> item) {
-				item.add(item.getModelObject().getOpponent().getUser()
-						.getDisplayComponent("opponent", true));
+			protected void populateItem(final ListItem<FinalSeminarOpposition> item) {
+				item.add(item.getModelObject().getOpponent().getUser().getDisplayComponent("opponent", true));
+				WebMarkupContainer oppCon = new WebMarkupContainer("oppositionContainer"){
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					public boolean isVisible(){
+						return item.getModelObject().getOpponentReport() != null;
+					}
+				};
+				//Students are not allowed to view other students opposition reports
+				MetaDataActionStrategy.authorize(oppCon, Roles.EMPLOYEE);
+				item.add(oppCon);
+				
+				String reportTitle = "";
+				if(item.getModelObject().getOpponentReport() != null)
+					reportTitle = item.getModelObject().getOpponentReport().getName();						
+				oppCon.add(new Label("oppositionReportTitle", reportTitle));
+				
+				oppCon.add(new FileDownloadLink("download", item.getModelObject().getOpponentReport()));
+				oppCon.add(new FileOpenLink("open", item.getModelObject().getOpponentReport()));
+				oppCon.add(new AjaxLink<Void>("deleteOppositionReport"){
+					private static final long serialVersionUID = 1L;
+					{
+						MetaDataActionStrategy.authorize(this, Roles.ADMIN);
+						this.add(new JavascriptEventConfirmation("onclick", "Do you really want to delete this user-uploaded report?"));
+					}
+
+					@Override
+					public void onClick(AjaxRequestTarget target) {
+						try{
+							finalSeminarUploadController.deleteOpponentFiles(item.getModelObject());
+							FinalSeminarOpposition opp = item.getModelObject();
+							opp.setOpponentReport(null);
+							opp = finalSeminarOppositionDao.save(opp);
+							item.setModelObject(opp);
+							info("Opposition report deleted");
+						} catch(Exception e){
+							e.printStackTrace();
+							error("Something went wrong, see log files for stacktrace");
+						}						
+						target.addComponent(FinalSeminarDetailsPanel.this);
+					}
+				});
 				add(item);
 			}
 		});
 
-		detailsContainer.add(new ListView<FinalSeminarActiveParticipation>(
-				"activeParticipantsList", seminar.getActiveParticipations()) {
+		detailsContainer.add(new ListView<FinalSeminarActiveParticipation>("activeParticipantsList", seminar.getActiveParticipations()) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			protected void populateItem(ListItem<FinalSeminarActiveParticipation> item) {
-				item.add(item.getModelObject().getUser()
-						.getDisplayComponent("activeParticipant", true));
+				item.add(item.getModelObject().getUser().getDisplayComponent("activeParticipant", true));
 				add(item);
 			}
 
 		});
 
-		detailsContainer.add(new Label("seminarLanguage", seminar.getPresentationLanguage()
-				.toString()));
+		detailsContainer.add(new Label("seminarLanguage", seminar.getPresentationLanguage().toString()));
 		detailsContainer.add(new Label("thesisLanguage", seminar.getReportLanguage().toString()));
 		detailsContainer.add(new Label("seminarReportTitle", new Model<String>() {
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			public String getObject() {
-				return seminar.getDocument() == null ? "No thesis/report uploaded" : seminar
-						.getDocument().getName();
+				return seminar.getDocument() == null ? "No thesis/report uploaded" : seminar.getDocument().getName();
 			}
 		}));
 
@@ -161,6 +208,27 @@ public class FinalSeminarDetailsPanel extends Panel {
 		uploadInfoContainer.add(new FileDownloadLink("download", seminar.getDocument()));
 		uploadInfoContainer.add(new FileOpenLink("open", seminar.getDocument()));
 
+		uploadInfoContainer.add(new AjaxLink<Void>("deleteSeminarReport") {
+			private static final long serialVersionUID = 1L;
+			{
+				MetaDataActionStrategy.authorize(this, Roles.ADMIN);
+				this.add(new JavascriptEventConfirmation("onclick", "Do you really want to delete this user-uploaded report?"));
+			}
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				try {
+					finalSeminarUploadController.deleteSeminarReport(seminar, true);
+					seminar.setDocument(null); //Only to repaint the ajax call without the document icons
+					info("Report deleted");
+				} catch (Exception e) {
+					e.printStackTrace();
+					error("Deletion failed");
+				}
+				target.addComponent(FinalSeminarDetailsPanel.this);
+			}
+		});
+
 		detailsContainer.add(uploadInfoContainer);
 		add(detailsContainer);
 
diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html
index e1b8c0eed1..acc47fd40b 100644
--- a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html
+++ b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html
@@ -5,6 +5,7 @@
 	<wicket:panel>
 
 		<div class="span-22 prepend-top last">
+			<div wicket:id="feedback"></div>
 			<table class="rounded-table seminar-table even-rows">
 				<tr>
 					<th>Date</th>
diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java
index 2132c6d34b..b8bca3392b 100644
--- a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java
+++ b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java
@@ -47,8 +47,8 @@ import se.su.dsv.scipro.opponent.models.OpponentModel;
 public class OpponentListViewPanel extends Panel {
 
 	/**
-     * 
-     */
+	 * 
+	 */
 	private static final long serialVersionUID = 4988253889884804250L;
 
 	@SpringBean
@@ -76,6 +76,10 @@ public class OpponentListViewPanel extends Panel {
 		super(id);
 		this.adminView = adminView;
 		loadListView(seminarList);
+		feedbackPanel = new FeedbackPanel("feedback");
+		add(feedbackPanel);
+		this.setOutputMarkupId(true);
+		
 		editSeminarDialogContainer = new WebMarkupContainer("dialogContainer");
 		editSeminarDialog = new Dialog("dialog");
 		editSeminarDialog.setModal(true);
@@ -96,7 +100,7 @@ public class OpponentListViewPanel extends Panel {
 		add(contactsSeminarDialog);
 		contactsDialogContainer.setOutputMarkupId(true);
 		contactsDialogContainer.add(contactsSeminarForm = new ContactsSeminarForm(
-				"contactsSeminarForm"));
+		"contactsSeminarForm"));
 		contactsSeminarForm.setOutputMarkupId(true);
 
 		add(linkListView);
@@ -125,7 +129,7 @@ public class OpponentListViewPanel extends Panel {
 				User headSupervisor = seminar.getProject().getHeadSupervisor().getUser();
 
 				headSupervisorString += headSupervisor.getFirstName() + " "
-						+ headSupervisor.getLastName();
+				+ headSupervisor.getLastName();
 				item.add(new Label("headSupervisor", headSupervisorString));
 
 				item.add(new Label("projectClass", seminar.getProject().getProjectClass().getName()));
@@ -191,20 +195,25 @@ public class OpponentListViewPanel extends Panel {
 					@Override
 					public void onClick(AjaxRequestTarget target) {
 						FinalSeminar seminar2 = finalSeminarDao.reLoad(seminar);
-						seminarUploadController.deleteSeminarFilesRecursive(seminar2);
-						for (FinalSeminarActiveParticipation al : seminar2
-								.getActiveParticipations()) {
-							finalSeminarActiveParticipationDao.delete(al);
-						}
+						try{
+							seminarUploadController.deleteSeminarReport(seminar2, true);
+							for (FinalSeminarActiveParticipation al : seminar2
+									.getActiveParticipations()) {
+								finalSeminarActiveParticipationDao.delete(al);
+							}
 
-						for (FinalSeminarOpposition fso : seminar2
-								.getOppositions()) {
-							seminarUploadController.deleteOpponentFiles(fso);
-							finalSeminarOppositionDao.delete(fso);
+							for (FinalSeminarOpposition fso : seminar2
+									.getOppositions()) {
+								seminarUploadController.deleteOpponentFiles(fso);
+								finalSeminarOppositionDao.delete(fso);
+							}
+							finalSeminarDao.delete(seminar2);
+							info("Final seminar deleted");
+						} catch (Exception e){
+							error("Something went wrong, see logs for stacktrace");
+							e.printStackTrace();
 						}
-						finalSeminarDao.delete(seminar2);
-						setResponsePage(AdminFinalSeminarPage.class);
-
+						target.addComponent(OpponentListViewPanel.this);
 					}
 
 					@Override
@@ -227,7 +236,7 @@ public class OpponentListViewPanel extends Panel {
 							@Override
 							public CharSequence decorateScript(CharSequence script) {
 								String ret = "if(!confirm('The attendees of this seminar will NOT be notified that the seminar has been deleted, are you sure you wish to delete it?')) return false; "
-										+ script;
+									+ script;
 								return ret;
 							}
 						};
@@ -243,8 +252,8 @@ public class OpponentListViewPanel extends Panel {
 	private class EditSeminarForm extends Form<OpponentModel> {
 
 		/**
-         * 
-         */
+		 * 
+		 */
 		private static final long serialVersionUID = -5004827722926732419L;
 
 		public EditSeminarForm(String name) {
@@ -257,8 +266,8 @@ public class OpponentListViewPanel extends Panel {
 	private class EditForm extends Form<Void> {
 
 		/**
-         * 
-         */
+		 * 
+		 */
 		private static final long serialVersionUID = 5882957818616996808L;
 
 		public EditForm(String name, final FinalSeminar seminar) {
@@ -290,8 +299,8 @@ public class OpponentListViewPanel extends Panel {
 	private class ContactsSeminarForm extends Form<OpponentModel> {
 
 		/**
-         * 
-         */
+		 * 
+		 */
 		private static final long serialVersionUID = -5004827722926732419L;
 
 		public ContactsSeminarForm(String name) {
@@ -306,8 +315,8 @@ public class OpponentListViewPanel extends Panel {
 	private class ContactsForm extends Form<Void> {
 
 		/**
-         * 
-         */
+		 * 
+		 */
 		private static final long serialVersionUID = -8271761600388217566L;
 
 		public ContactsForm(String name, final FinalSeminar seminar) {
@@ -316,8 +325,8 @@ public class OpponentListViewPanel extends Panel {
 			add(new AjaxButton("contacts", new Model<String>("Details")) {
 
 				/**
-                 * 
-                 */
+				 * 
+				 */
 				private static final long serialVersionUID = 1211337464815824507L;
 
 				@Override
diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarContainerPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarContainerPanel.java
index 8a7fa59e52..adcd3edf62 100644
--- a/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarContainerPanel.java
+++ b/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarContainerPanel.java
@@ -23,22 +23,15 @@ public class ProjectFinalSeminarContainerPanel extends Panel {
 	public ProjectFinalSeminarContainerPanel(final String id, final Project project, final boolean isSupervisorView){
 		super(id);
 		
-		final List<FinalSeminar> seminars = finalSeminarDao.findFinalSeminarsByProject(project);
+		List<FinalSeminar> seminars = finalSeminarDao.findFinalSeminarsByProject(project);
 		
-		if(isSupervisorView && !seminars.isEmpty() ){
+		if(isSupervisorView && seminars.isEmpty() ){
 			add(new OpponentPanel("addSeminar", project));
 		}
 		else {
 			add(new EmptyPanel("addSeminar"));
 		}
-		add(new Label("noSeminarsMessage", "No final seminar has been created for this project"){
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public boolean isVisible(){
-				return seminars.size() == 0;
-			}
-		});
+		add(new Label("noSeminarsMessage", "No final seminar has been created for this project").setVisible(seminars.isEmpty()));
 
 		add(new ListView<FinalSeminar>("seminarList", seminars){
 			private static final long serialVersionUID = 1L;
diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java
index aaa19fdec7..1f5223261e 100644
--- a/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java
+++ b/src/main/java/se/su/dsv/scipro/opponent/panels/ProjectFinalSeminarPanel.java
@@ -221,7 +221,7 @@ public class ProjectFinalSeminarPanel extends Panel {
 			public boolean isVisible() {
 
 				return !isSupervisorView && seminar.getActiveParticipations().isEmpty()
-						&& seminar.getOppositions().isEmpty() && seminar.getTurnitinId() != null;
+						&& seminar.getOppositions().isEmpty() && seminar.getTurnitinId() == null;
 			}
 
 			@Override
diff --git a/src/main/java/se/su/dsv/scipro/peer/data/dao/controllers/PeerPortalControllerImpl.java b/src/main/java/se/su/dsv/scipro/peer/data/dao/controllers/PeerPortalControllerImpl.java
index 4aa454fe5e..976f6c49c9 100644
--- a/src/main/java/se/su/dsv/scipro/peer/data/dao/controllers/PeerPortalControllerImpl.java
+++ b/src/main/java/se/su/dsv/scipro/peer/data/dao/controllers/PeerPortalControllerImpl.java
@@ -237,7 +237,7 @@ public class PeerPortalControllerImpl implements PeerPortalController {
 
 			return review;
 		} catch (Exception e) {
-			Logger.getRootLogger().log(Level.ERROR,
+			Logger.getLogger(this.getClass()).log(Level.ERROR,
 					"Error while accepting peer request: " + e.getMessage());
 			if (review.getId() != null) {
 				// Something must have gone wrong while updating request status
@@ -286,7 +286,7 @@ public class PeerPortalControllerImpl implements PeerPortalController {
 				return peerRequestDao.save(request);
 			}
 		} catch (Exception e) {
-			Logger.getRootLogger().log(Level.ERROR,
+			Logger.getLogger(this.getClass()).log(Level.ERROR,
 					"Error while storing Peer Request: " + e.getMessage());
 			if (request.getId() != null) {
 				peerRequestDao.delete(request);
@@ -328,7 +328,7 @@ public class PeerPortalControllerImpl implements PeerPortalController {
 			review.setFile(fdesc.get(0));
 			return true;
 		} catch (Exception e) {
-			Logger.getRootLogger().log(Level.ERROR,
+			Logger.getLogger(this.getClass()).log(Level.ERROR,
 					"Error while storing file for peer review: " + e.getMessage());
 			if (review.getFile() != null) {
 				// Clean up the repository
diff --git a/src/main/java/se/su/dsv/scipro/peer/pages/AbstractProjectPeerPage.java b/src/main/java/se/su/dsv/scipro/peer/pages/AbstractProjectPeerPage.java
index 1792cc242c..54b4362e62 100644
--- a/src/main/java/se/su/dsv/scipro/peer/pages/AbstractProjectPeerPage.java
+++ b/src/main/java/se/su/dsv/scipro/peer/pages/AbstractProjectPeerPage.java
@@ -4,9 +4,12 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.wicket.PageParameters;
+import org.apache.wicket.spring.injection.annot.SpringBean;
 
 import se.su.dsv.scipro.SciProSession;
 import se.su.dsv.scipro.components.AbstractMenuPanel;
+import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao;
+import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings;
 import se.su.dsv.scipro.data.dataobjects.Project;
 import se.su.dsv.scipro.data.dataobjects.User;
 import se.su.dsv.scipro.exceptions.AccessDeniedException;
@@ -20,6 +23,9 @@ import se.su.dsv.scipro.security.auth.roles.Roles;
 @Authorization(authorizedRoles={Roles.SYSADMIN}) //TODO Hidden for initial deployment
 public abstract class AbstractProjectPeerPage extends ProjectPage {
 
+	@SpringBean
+	private GeneralSystemSettingsDao generalSystemSettingsDao;
+	
 	public AbstractProjectPeerPage(final PageParameters pp) {
 		super(pp);
 		
@@ -45,7 +51,7 @@ public abstract class AbstractProjectPeerPage extends ProjectPage {
 	}
 	
 	protected void checkAccessPrivileges(final PeerReview peerReview) {
-
+		GeneralSystemSettings gsettings = generalSystemSettingsDao.getGeneralSystemSettingsInstance();
 		final Project requestingProject = peerReview.getPeerRequest().getProject();
 		final User user = SciProSession.get().getUser();
 		if( SciProSession.get().authorizedForRole(Roles.SYSADMIN) ) //Can view any review
@@ -55,6 +61,8 @@ public abstract class AbstractProjectPeerPage extends ProjectPage {
 		final Project reviewingProject = peerReview.getProject();
 		if( projectDao.isPartOf(user, reviewingProject) )
 			return;
+		if(gsettings.isPublicReviewsActivated())
+			return;
 		//If we've come this far, the user doesn't have access to the project and it's reviews
 		throw new AccessDeniedException(this);
 	}
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/PeerRequestSubmissionPage.html b/src/main/java/se/su/dsv/scipro/peer/pages/PeerRequestSubmissionPage.html
index f631ee2539..77ceb00a1d 100644
--- a/src/main/java/se/su/dsv/scipro/peer/pages/PeerRequestSubmissionPage.html
+++ b/src/main/java/se/su/dsv/scipro/peer/pages/PeerRequestSubmissionPage.html
@@ -1,86 +1,102 @@
 <!DOCTYPE html>
-<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<html
+	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
 <body>
-<wicket:extend>
-	<div class="span-22">
-		<div wicket:id="feedbackPanel"></div>
-    	<form wicket:id="requestForm" class="wizard-form">
-    		<div class="span-22 last">
-	    		<div class="span-11 colborder">
-		    		<div>
-		    			<fieldset>
-		    				<legend>Step 1 - Read instructions</legend>
-		    				<p>The instructions are located in the box to the right</p>
-		    			</fieldset>
-		    			<fieldset>
-		    				<legend wicket:id="fileUploadLabel">[Step 2 - Attach a file]</legend>
-		    				<input wicket:id="fileUpload" type="file" />
-		    			</fieldset>
-		    			<fieldset>
-		    				<legend>Step 3 - Write review guideline/comment (optional)</legend>
-		    				<textarea wicket:id="comment"></textarea>
-		    			</fieldset>
-		    		</div>
-	    		</div>
-		    	<div class="span-8 last info-box rounded-box">
-					<ul>
-						<li><p>Providing a review template is of great help for the reviewer, browse available templates and try to find an appropriate one!</p></li>
-						<li><p>If you cannot find an suitable review template, make sure to use the review guideline/comment to point out what you'd like feedback on.</p></li>
-						<li><p>If a review template covers too much, make sure to point out questions that you don't feel like they apply</p></li>
-						<li><p>If you're missing relevant questions in the review template, make sure to mention them in the comment.</p></li>
-						<li><p>If you have several files you'd like to attach, compress them to an archived file (ie. zip-file).</p></li>
-						<li><p><strong>Remember that the more guidelines (review template, questions you'd like answered etc.) you provide the reviewer, the greater the chance of a useful review!</strong></p></li>
-					</ul>	    		
+	<wicket:extend>
+		<div class="span-22">
+			<div wicket:id="feedbackPanel"></div>
+			<form wicket:id="requestForm" class="wizard-form">
+				<div class="span-22">
+					<div>
+						<h5 class="peer-title">Step 1 - Read instructions</h5>
+						<ul>
+							<li>Providing a review template is of great help for the
+								reviewer, browse available templates and try to find an
+								appropriate one!</li>
+							<li>If you cannot find an suitable review template, make
+								sure to use the review guideline/comment to point out what you'd
+								like feedback on.</li>
+							<li>If a review template covers too much, make sure to point
+								out questions that you don't feel like they apply</li>
+							<li>If you're missing relevant questions in the review
+								template, make sure to mention them in the comment.</li>
+							<li>If you have several files you'd like to attach, compress
+								them to an archived file (ie. zip-file).</li>
+							<li>Remember that the more guidelines (review template,
+								questions you'd like answered etc.) you provide the reviewer,
+								the greater the chance of a useful review!</li>
+						</ul>
+					</div>
+					<div class="span-22 forcedPaddingBottom">
+						<div class="span-11 first">
+							<h5 class="peer-title" wicket:id="fileUploadLabel">[Step 2 -
+								Attach a file]</h5>
+							<input wicket:id="fileUpload" type="file" style="margin-top:2em;"/>
+						</div>
+						<div class="span-11 last">
+							<h5 class="peer-title">Step 3 - Write review
+								guideline/comment (optional)</h5>
+							<textarea wicket:id="comment"></textarea>
+						</div>
+					</div>
 				</div>
-			</div>
-			<div class="span-22 last">
-				<fieldset>
-					<legend>Step 4 - Select a suitable review template (optional)</legend>
-		    		<div wicket:id="listContainer">
-			    		<table class="rounded-table">
-			    			<tr>
-			    				<th>Select</th>
-			    				<th>Name</th>
-			    				<th>Description</th>
-			    				<th>Questions</th>
-			    				<th>Preview</th>
-			    			</tr>
-			    			<tr>
-			    				<td colspan="5"><i><span wicket:id="noTemplatesFoundMsg"></span></i></td>
-			    			</tr>
-			    			<tr wicket:id="templateList">
-			    				<td><a wicket:id="selectTemplateLink"  href="#">Select</a></td>
-			    				<td><span wicket:id="templateName"></span></td>
-			    				<td><div class="span-8"><span wicket:id="templateDescription"></span></div></td>
-			    				<td><span wicket:id="templateNumQuestions"></span></td>
-			    				<td><a href="#" wicket:id="previewTemplateLink">Preview</a></td>
-			    			</tr>
-			    			<tr><td wicket:id="pager" colspan="5"></td></tr>
-			    		</table>
-		    		</div>
-		    		<div wicket:id="selectedTemplateContainer">
-		    			<strong>Selected template: </strong>
-		    			<span wicket:id="selectedTemplate"></span>
-		    			<a href="#" wicket:id="unSelectTemplateLink">
-		    				<img class="icon-12" src="images/icons/delete_16x16.png" alt="Unselect template"/> Unselect
-		    			</a>
-		    		</div>
-	    		</fieldset>
-	    		
-	    		<fieldset>
-	    			<legend>Step 5 - Submit your request</legend>
-	    			<div wicket:id="feedbackPanel">
-	    				<!-- The feedback panel -->
-	    			</div>
-	    			<div>
-						<button wicket:id="sendRequestButton" class="button">Submit your request for review
-							<img src="css/blueprint/plugins/buttons/icons/tick.png" alt=""/>
+				<div class="span-22">
+					<h5 class="peer-title">Step 4 - Select a suitable review
+						template (optional)</h5>
+					<div wicket:id="listContainer">
+						<table class="rounded-table">
+							<tr>
+								<th>Select</th>
+								<th>Name</th>
+								<th>Description</th>
+								<th>Questions</th>
+								<th>Preview</th>
+							</tr>
+							<tr>
+								<td colspan="5"><i><span
+										wicket:id="noTemplatesFoundMsg"></span>
+								</i>
+								</td>
+							</tr>
+							<tr wicket:id="templateList">
+								<td><a wicket:id="selectTemplateLink" href="#">Select</a>
+								</td>
+								<td><span wicket:id="templateName"></span>
+								</td>
+								<td><div class="span-8">
+										<span wicket:id="templateDescription"></span>
+									</div>
+								</td>
+								<td><span wicket:id="templateNumQuestions"></span>
+								</td>
+								<td><a href="#" wicket:id="previewTemplateLink"><img src="images/icons/document-preview_16x16.png" class="icon-16" alt="Preview template"/></a>
+								</td>
+							</tr>
+							<tr>
+								<td wicket:id="pager" colspan="5"></td>
+							</tr>
+						</table>
+					</div>
+					<div wicket:id="selectedTemplateContainer" class="forcedPaddingBottom">
+						<strong>Selected template: </strong> <span
+							wicket:id="selectedTemplate"></span> <a href="#"
+							wicket:id="unSelectTemplateLink"> <img class="icon-12"
+							src="images/icons/delete_16x16.png" alt="Unselect template" />
+							Unselect </a>
+					</div>
+					<h5 class="peer-title">Step 5 - Submit your request</h5>
+					<div wicket:id="feedbackPanel">
+						<!-- The feedback panel -->
+					</div>
+					<div>
+						<button wicket:id="sendRequestButton" class="button">
+							Submit your request for review <img
+								src="css/blueprint/plugins/buttons/icons/tick.png" alt="" />
 						</button>
-	    			</div>
-	    		</fieldset>
-			</div>
-    	</form>
-    </div>
-</wicket:extend>
+					</div>
+				</div>
+			</form>
+		</div>
+	</wicket:extend>
 </body>
 </html>
\ No newline at end of file
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) {
diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.html
index 721f5125e9..21fac7dd7d 100644
--- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.html
+++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.html
@@ -89,7 +89,7 @@
 			<span class="box-title">Best rated reviewers</span>
 			<div wicket:id="bestRatedPanel" class="append-bottom"></div>
 		</div>
-		<div>
+		<div wicket:id="statsTimespanContainer">
 			<i><span class="small right">Last 12 months</span></i>
 		</div>
 	</div>
diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.java b/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.java
index 3d70815e37..d4db753c68 100644
--- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.java
+++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerPortalPanel.java
@@ -221,16 +221,23 @@ public class PeerPortalPanel extends Panel {
 		int displayedReviews = gsettings.getNumberOfLatestReviewsDisplayed();
 		
 		
+		boolean showStatsTimespan = false;
 		if(gsettings.isPeerDisplayNumberOfReviewsPerformed()){
 			add(new MostFrequentReviewersPanel(mostFrequentPanel));
+			showStatsTimespan = true;
 		} else {
 			add(new InvisiblePanel(mostFrequentPanel));
 		}
 		if( gsettings.isPeerRatingsEnabled() ){
 			add(new WebMarkupContainer(bestRatedContainer).add(new BestRatedReviewersPanel("bestRatedPanel") ) );
+			showStatsTimespan = true;
 		} else {
 			add(new InvisiblePanel(bestRatedContainer));
 		}
+		WebMarkupContainer statsTimespanContainer = new WebMarkupContainer("statsTimespanContainer");
+		statsTimespanContainer.setVisible(showStatsTimespan);
+		add(statsTimespanContainer);
+		
 		if(gsettings.isPeerDisplayLatestReviews()) {
 			// Checkbox on the AdminPeerSettingsPage is not visible since it's
 			// not decided what kind of info that should be public for students.
diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoRequestsPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoRequestsPanel.html
index 404fb4e62d..c103d699bd 100644
--- a/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoRequestsPanel.html
+++ b/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoRequestsPanel.html
@@ -6,7 +6,7 @@
 <body>
 <wicket:panel>
 	<div class="append-bottom">
-		<h6>Requests with completed reviews</h6>
+		<h6>Completed reviews</h6>
 		<i wicket:id="noReceivedReviewsCompletedMessage"></i>
 		<ul class="no-list-style small">
 			<li wicket:id="receivedReviewsCompleted">
@@ -20,7 +20,7 @@
 	</div>
 	
 	<div class="append-bottom">
-		<h6>Requests with reviews in progress</h6>
+		<h6>In progress</h6>
 		<i wicket:id="noReceivedReviewsInProgressMessage"></i>
 		<ul class="no-list-style small">
 			<li wicket:id="receivedReviewsInProgress">
@@ -34,7 +34,7 @@
 	</div>
 	
 	<div class="append-bottom">
-		<h6>Requests waiting to be accepted</h6>
+		<h6>Awaiting review</h6>
 		<div wicket:id="peerInfoRequestsFeedback"></div>
 		<i wicket:id="noAwaitingAcceptMsg"></i>
 		<ul class="no-list-style small">
diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.html
index 4626e86bad..aaa71585ed 100644
--- a/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.html
+++ b/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.html
@@ -6,7 +6,7 @@
 <body>
 <wicket:panel>
 	<div class="append-bottom">
-		<h6>Reviews completed</h6>
+		<h6>Completed</h6>
 		<i wicket:id="noAcceptedReviewsCompletedMessage"></i>
 		<ul class="no-list-style small">
 			<li wicket:id="acceptedReviewsCompleted">
@@ -19,7 +19,7 @@
 	</div>
 	
 	<div class="append-bottom">
-		<h6>Reviews in progress</h6>
+		<h6>In progress</h6>
 		<i wicket:id="noAcceptedInProgressMessage"></i>
 		<ul class="no-list-style small">
 			<li wicket:id="acceptedInProgress">
@@ -32,7 +32,7 @@
 	</div>
 	
 	<div>
-		<h6>Reviews aborted: <span wicket:id="abortedReviews"></span></h6>
+		<h6>Aborted: <span wicket:id="abortedReviews"></span></h6>
 	</div>
 </wicket:panel>
 </body>
diff --git a/src/main/java/se/su/dsv/scipro/peer/workerthreads/ExpiredReviewResetWorker.java b/src/main/java/se/su/dsv/scipro/peer/workerthreads/ExpiredReviewResetWorker.java
index 17a3710fc9..2c4760b0bf 100644
--- a/src/main/java/se/su/dsv/scipro/peer/workerthreads/ExpiredReviewResetWorker.java
+++ b/src/main/java/se/su/dsv/scipro/peer/workerthreads/ExpiredReviewResetWorker.java
@@ -43,7 +43,7 @@ public class ExpiredReviewResetWorker extends AbstractWorker {
 			Date expirationDate = new DateTime().minusDays(settings.getNumDaysToSubmitPeerReview()).toDate();
 			
 			if( peerReview.getDateCreated().compareTo( expirationDate ) < 0 ) {
-				Logger logger = Logger.getRootLogger();
+				Logger logger = Logger.getLogger(this.getClass());
 				logger.log(Level.INFO,"Expiring peerReview: "+peerReview+" and making "+peerRequest+" available for review again");
 
 				peerReview.setAborted(true);
diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.html b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.html
new file mode 100644
index 0000000000..2921c71d9a
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html
+	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<body>
+<wicket:extend>
+<!-- 	<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..8fbc7f753c
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectChecklistPage.java
@@ -0,0 +1,27 @@
+package se.su.dsv.scipro.project.pages;
+
+import org.apache.wicket.PageParameters;
+
+import se.su.dsv.scipro.SciProSession;
+import se.su.dsv.scipro.checklists.panels.ListCheckListPanel;
+import se.su.dsv.scipro.data.enums.CheckListRole;
+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}) 
+public class ProjectChecklistPage extends ProjectPage {
+
+	public ProjectChecklistPage(PageParameters pp) {
+		super(pp);
+		add(new ListCheckListPanel("listCheckListPanel", CheckListRole.AUTHOR,
+				SciProSession.get().getActiveProject()));
+		//add(new TrafficLightPanel("trafficLightPanel"));
+		//add(new CreateCheckListTemplatePanel("createCheckList"));
+	}
+
+}
diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPage.java b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPage.java
index 9dacb4dea1..68ee7374f8 100644
--- a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPage.java
+++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPage.java
@@ -27,6 +27,7 @@ public abstract class ProjectPage extends MenuPage implements FilePanelContainer
 	public ProjectPage(PageParameters pp)  {
 		
 		Project activeProject = SciProSession.get().getActiveProject();
+		User u = SciProSession.get().getUser();
 		
 		if(activeProject == null && (this.getClass() != NoActiveProjectPage.class && this.getClass() != ProjectPartnerPage.class)){
 			User user = SciProSession.get().getUser();
diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.html b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.html
index 2195675938..5ac372575a 100644
--- a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.html
+++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.html
@@ -7,7 +7,6 @@
 	<div class="span-22 last">
 	<div wicket:id=feedback></div>
 	<!-- Left column -->
-	
 		<div class="span-10 colborder">
 			<div class="span-10 last">
 				<h5 class="peer-title">Look for project partner</h5>
diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.java b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.java
index 2f738710b4..83ffa48803 100644
--- a/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.java
+++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectPartnerPage.java
@@ -59,7 +59,6 @@ public class ProjectPartnerPage extends ProjectPage {
 	
 	private DataView<ProjectPartner> dataView;
 	private WebMarkupContainer wmc;
-	private IModel<List<ProjectPartner>> listModel;
 	
 	private RadioChoice<ProjectClass> degreeChoice;
 	private RadioChoice<ProjectClass> showChoice;
@@ -76,7 +75,7 @@ public class ProjectPartnerPage extends ProjectPage {
 			
 			settings = generalSystemSettingsDao.getGeneralSystemSettingsInstance();
 			choices = new ArrayList<ProjectClass>();
-			days = settings.getProjectPartnerDaysToLive();
+			setDays(settings.getProjectPartnerDaysToLive());
 			ProjectClass bachelor = projectClassDao.getProjectClass(ProjectClass.BACHELOR);
 			choices.add(bachelor);
 			choices.add(projectClassDao.getProjectClass(ProjectClass.MASTER));
@@ -142,7 +141,6 @@ public class ProjectPartnerPage extends ProjectPage {
 		
 		private void loadListView(ProjectPartnerDataProvider projectPartnerDataProvider){
 			dataView = new DataView<ProjectPartner>("list", projectPartnerDataProvider, 5 ){
-			//wmc.add(new ListView<ProjectPartner>("list", new PropertyModel<List<ProjectPartner>>(this, "ProjectPartnerDao.getProjectPartner")){
 			
 			
 				
@@ -160,5 +158,13 @@ public class ProjectPartnerPage extends ProjectPage {
 				}
 			};	
 		}
+
+		public int getDays() {
+			return days;
+		}
+
+		public void setDays(int days) {
+			this.days = days;
+		}
 	}
 
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..8ce4db2f10 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.ProjectChecklistPage;
 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("Checklists", ProjectChecklistPage.class));
 		} else {
 			itemList.add(new MenuItem("No active project!", NoActiveProjectPage.class));
 			itemList.add(new MenuItem("Project Partner", ProjectPartnerPage.class));
@@ -56,7 +58,7 @@ public class ProjectTabMenuPanel extends AbstractMenuPanel {
 
 	@Override
 	protected MenuType getMenuType() {
-		return MenuType.TAB;
+		return MenuType.TAB_MULTIPLE_ROWS;
 	}
 	
 }
diff --git a/src/main/java/se/su/dsv/scipro/repository/icons/document-open-folder.png b/src/main/java/se/su/dsv/scipro/repository/icons/document-open-folder.png
index 98b8a9448a..89eea033be 100644
Binary files a/src/main/java/se/su/dsv/scipro/repository/icons/document-open-folder.png and b/src/main/java/se/su/dsv/scipro/repository/icons/document-open-folder.png differ
diff --git a/src/main/java/se/su/dsv/scipro/repository/icons/folder-documents.png b/src/main/java/se/su/dsv/scipro/repository/icons/folder-documents.png
index c02a648a50..a6c11bb0e7 100644
Binary files a/src/main/java/se/su/dsv/scipro/repository/icons/folder-documents.png and b/src/main/java/se/su/dsv/scipro/repository/icons/folder-documents.png differ
diff --git a/src/main/java/se/su/dsv/scipro/repository/panels/AbstractFilePanel.html b/src/main/java/se/su/dsv/scipro/repository/panels/AbstractFilePanel.html
index d1cd51adda..bce6646f81 100644
--- a/src/main/java/se/su/dsv/scipro/repository/panels/AbstractFilePanel.html
+++ b/src/main/java/se/su/dsv/scipro/repository/panels/AbstractFilePanel.html
@@ -64,7 +64,7 @@
 		<tbody>
 			<tr>
 				<td></td>
-				<td><a href="#" wicket:id="up">[..]</a></td>
+				<td><a href="#" wicket:id="up"><img src="images/icons/daisyIcons/plain/folder_up.png" class="icon-24" alt="Parent folder"/></a></td>
 			</tr>
 		</tbody>
 		
@@ -72,7 +72,7 @@
 
 			<tr wicket:id="content">
 				<td><a href="delete" wicket:id="delete"><img src="images/icons/edit-delete_16x16.png" alt="X" /></a></td>
-				<td><a href="#" wicket:id="link"><img wicket:id="folderIcon" src="#" alt="folderIcon" /> <span wicket:id="name">name</span></a></td>
+				<td><a href="#" wicket:id="link"><img wicket:id="folderIcon" src="#" alt="folderIcon" class="icon-24"/> <span wicket:id="name">name</span></a></td>
 				<td><span wicket:id="created"></span></td>
 			</tr>
 		</tbody>
diff --git a/src/main/java/se/su/dsv/scipro/security/auth/Authenticator.java b/src/main/java/se/su/dsv/scipro/security/auth/Authenticator.java
index 4c53a0580d..bf7bf940ee 100644
--- a/src/main/java/se/su/dsv/scipro/security/auth/Authenticator.java
+++ b/src/main/java/se/su/dsv/scipro/security/auth/Authenticator.java
@@ -39,7 +39,7 @@ public class Authenticator {
 		
 		//Catch exceptions if 	
 		} catch (LoginException le){
-			Logger logger = Logger.getRootLogger();
+			Logger logger = Logger.getLogger(this.getClass());
 			logger.log(Level.ERROR, "System error, Failed to create logincontext:" + le.getMessage());
 			throw le;
 		} catch (SecurityException se){
diff --git a/src/main/java/se/su/dsv/scipro/wiquery/mainmenu/MainMenuJavascriptResourceReference.java b/src/main/java/se/su/dsv/scipro/wiquery/mainmenu/MainMenuJavascriptResourceReference.java
deleted file mode 100644
index e8be4f6e39..0000000000
--- a/src/main/java/se/su/dsv/scipro/wiquery/mainmenu/MainMenuJavascriptResourceReference.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.su.dsv.scipro.wiquery.mainmenu;
-
-import org.apache.wicket.markup.html.resources.JavascriptResourceReference;
-
-public class MainMenuJavascriptResourceReference extends
-        JavascriptResourceReference {
-
-    private static final long serialVersionUID = -5062441830192125794L;
-    
-    private static MainMenuJavascriptResourceReference INSTANCE = 
-        new MainMenuJavascriptResourceReference();
-    
-    private MainMenuJavascriptResourceReference() {
-        super(MainMenuJavascriptResourceReference.class, "jquery.mainmenu.js");
-    }
-    
-    public static MainMenuJavascriptResourceReference get() {
-        return INSTANCE;
-    }
-}
diff --git a/src/main/java/se/su/dsv/scipro/wiquery/mainmenu/jquery.mainmenu.js b/src/main/java/se/su/dsv/scipro/wiquery/mainmenu/jquery.mainmenu.js
deleted file mode 100644
index 7efe8da153..0000000000
--- a/src/main/java/se/su/dsv/scipro/wiquery/mainmenu/jquery.mainmenu.js
+++ /dev/null
@@ -1,49 +0,0 @@
-$(document).ready(function() {
-		$("img.nav-arrow").click(function() {
-		var parent = $(this).parents(".parent");
-		if (parent != null)
-			showMenu(parent);
-	})
-	.mouseover(function() {
-		//$(this).attr("src", "./images/site_nav_arrow_hover.png");
-	})
-	.mouseout(function() {
-		//$(this).attr("src", "./images/site_nav_arrow.png");
-	});
-	
-	$(document).click(function(e) {
-		if ($(e.target).parents("#nav-list").length == 0) {
-			closeMenus(null);
-		}
-	});
-	
-	$(document).mouseover(function(e) {
-		if ($(e.target).parents("#main-nav").length == 0) {
-			closeMenus(null);
-		}
-	});
-	
-	addCurrentClassToIdentifier = function(identifier) {
-		var t = $("#nav-list").find(identifier).parents(".nav-list-item").get(0);
-		$(t).addClass("current");
-	};
-	
-	closeMenus = function(node) {
-		$("#nav-list .parent").children(".over").each(function() {
-			if (this != node || node == null) {
-				$(this).removeClass("over");
-			}
-		});
-	};
-
-	showMenu = function(node) {
-		var thisMenu = $(node);
-		var isActive = $(node).find("div.submenu").hasClass("over");
-		closeMenus(thisMenu);
-		if (!isActive) {
-			thisMenu.find("div.submenu").toggleClass("over");
-		}
-	};
-	
-	addCurrentClassToIdentifier("#current");
-});
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/workerthreads/AbstractWorker.java b/src/main/java/se/su/dsv/scipro/workerthreads/AbstractWorker.java
index 432331f33e..09a66a5fcd 100644
--- a/src/main/java/se/su/dsv/scipro/workerthreads/AbstractWorker.java
+++ b/src/main/java/se/su/dsv/scipro/workerthreads/AbstractWorker.java
@@ -105,7 +105,7 @@ public abstract class AbstractWorker extends Thread {
 				this.commitTransaction();
 			} catch ( Exception e ){
 				this.rollbackTransaction();
-				Logger logger = Logger.getRootLogger();
+				Logger logger = Logger.getLogger(this.getClass());
 				logger.log(Level.ERROR, getNameString(this.getClass())+" failed to save it's workerdata!");
 			}			
 
diff --git a/src/main/java/se/su/dsv/scipro/workerthreads/UserAndProjectImportWorker.java b/src/main/java/se/su/dsv/scipro/workerthreads/UserAndProjectImportWorker.java
index bdf7e909c9..b7d37410bd 100644
--- a/src/main/java/se/su/dsv/scipro/workerthreads/UserAndProjectImportWorker.java
+++ b/src/main/java/se/su/dsv/scipro/workerthreads/UserAndProjectImportWorker.java
@@ -27,7 +27,7 @@ public class UserAndProjectImportWorker extends AbstractWorker{
 	@Override
 	protected void doManualTransactionWork(){
 		Date startDate = this.getStartedWorkingDate();
-		Logger logger = Logger.getRootLogger();
+		Logger logger = Logger.getLogger(this.getClass());
 		logger.log(Level.INFO,"Starting import-from-matchsystem ImportWorker:"+startDate);
 				
 		//Get stats of how many Users and Projects changed scince last update
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/resources/applicationContext.xml b/src/main/resources/applicationContext.xml
index 78cb9aa86b..14ed77e032 100644
--- a/src/main/resources/applicationContext.xml
+++ b/src/main/resources/applicationContext.xml
@@ -38,6 +38,10 @@
 	"projectClassDao"
 	"projectScheduleDao"
 	"projectFollowerDao"
+	"checkListDao"
+	"checkListQuestion"
+	"checkListTemplate"
+	"checkListAnswer"
 	"stringResourceDao"
 	"fileDescriptionDao"
 	"projectEventTemplateDao"
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
 
diff --git a/src/main/resources/notification.properties b/src/main/resources/notification.properties
deleted file mode 100644
index b483ba1726..0000000000
--- a/src/main/resources/notification.properties
+++ /dev/null
@@ -1,52 +0,0 @@
-#General
-twoNewLines=\n\n
-twoNewLinesWithComma=,\n\n
-linkText = Click on the link to see it in SciPro:\n
-mailSubject=Notification for SciPro
-hello=Hello 
-autogenerated=This is an auto-generated message from SciPro
-colon=:
-comma=,
-dot=.
-space=\ 
-quote="
-#Conference
-conferenceNotification=\ posted on conference 
-conferenceNotificationComment=\ commented on conference 
-#Private message
-privateMessageNotification=\ wrote a private message to you.
-#Private message reply
-privateMessageReplyNotification=\ replied with a private message to you.
-#Peer accepted
-acceptPeerReviewSubject=Your request for peer-review has been accepted
-requestAccepted=Your peer request was accepted by 
-heShe=, he/she now has 
-complete=\ days to complete a review.
-#Peer completed
-completedReviewSubject=A peer review has been completed!
-requestReviewed=Your peer request has now been reviewed and is available.
-supervisorMessageBody=You are getting this message because you are supervisor of "
-#Peer completed supervisor of project
-supervisorMessageBody2=".\nA peer review on this project has been completed and is available for you.
-#Peer completed supervisor of reviewer
-supervisorMessageBody3=\ has performed a peer review on someone elses work which is available for you.
-#Peer completed webnotification
-inProject=in project: 
-hasPerformed=\ has performed a peer review.
-commaWithLinebreak=".\n
-#Peer rated
-reviewRatedSubject=You have received a rating for a review you have done!
-reviewRatedBody=Your review has been rated.
-#Final seminar created
-finalSeminarCreated=Head supervisor for 
-finalSeminarProject=\ has created a final seminar, room  
-finalSeminarProjectOpponnent=\ has created a final seminar and added you as an opponent, room  
-#Final seminar report uploaded
-finalSeminarReportUploaded=Thesis for the project 
-finalSeminarReportBeenUploaded=\ has been uploaded.
-#Final seminar opposition report uploaded
-finalSeminarOppositionReportUploaded=Opposition-report for the project 
-finalSeminarOppositionReportBeenUploaded=\ has been uploaded by 
-#Final seminar edited
-finalSeminarOppositionReportEdited=Final seminar for project  
-finalSeminarOppositionReportBeenEdited=\ has been edited. 
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 7ea6274a27..d1b02a7ae0 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/main/webapp/css/menu.css b/src/main/webapp/css/menu.css
index 9a83ca77c0..ea13b18f47 100644
--- a/src/main/webapp/css/menu.css
+++ b/src/main/webapp/css/menu.css
@@ -1,98 +1,14 @@
-#main-nav {
-	
-}
-
-#nav-list {
-	margin-top: 4px;
-	z-index: 8001;
-}
-
-#nav-list li.nav-list-item {
-	float: left;
-	display: inline;
-	margin: 5px 8px 0 8px;
-	position: relative;
-}
-
-#nav-list li.nav-list-item .menu-item {
-	display: block;
-	height: 23px;
-	padding: 4px 2px 3px 2px;
-}
-#nav-list li.nav-list-item .menu-item a {
-	color: #fff;
-	font: 1.1em/1.5 arial, sans-serif;
-	font-weight: bold;
-	text-decoration: none;
-	padding: 0px 4px;
-}
-#nav-list li.nav-list-item .menu-item > a#current {
-	/* padding: 0 10px 7px 10px;
-	border-bottom: 5px solid #ccc; */
-}
-.menu-item img.nav-arrow {
-	vertical-align: middle;
-	width: 23px;
-	height: 23px;
-	margin-left: 4px;
-	margin-right: -3px;
-}
-
-#nav-list a#current {
-	/* Feel free to replace with something nicer */
-	/* padding-bottom: 7px; */
-	/* border-bottom: 5px solid #ccc; */
-}
-#nav-list li.current .menu-item,
-#nav-list li.nav-list-item:hover .menu-item {
-	background-color: #fff;
-	-webkit-border-top-left-radius: 4px;
-	-moz-border-radius-topleft: 4px;
-	border-top-left-radius: 4px;
-	-webkit-border-top-right-radius: 4px;
-	-moz-border-radius-topright: 4px;
-	border-top-right-radius: 4px;
-	text-decoration: none;
-}
-#nav-list li.current .menu-item a,
-#nav-list li.nav-list-item:hover .menu-item a {
-	color: #002f5f;
-}
-
-#nav-list li.nav-list-item.parent .submenu {
-	position: absolute;
-	top: 30px;
-	left: -1px;
-	width: 140px;
-	background: #fff;
-	padding: 5px;
-	display: none;
-	border-bottom: 1px solid #ccc;
-	border-left: 1px solid #ccc;
-	border-right: 1px solid #ccc;
-	z-index: 8000;
-}
-#nav-list li.nav-list-item.parent .over {
-	display: block;
-}
-#nav-list li.nav-list-item.parent .submenu {
-	font-size: 0.9em;
-	
-}
-#nav-list li.nav-list-item.parent .submenu a:link,
-#nav-list li.nav-list-item.parent .submenu a:visited,
-#nav-list li.nav-list-item.parent .submenu a:hover {
-	display: block;
-	padding: 4px;
-	text-decoration: none;
-}
-
-#main-nav #user-links {
-	margin-top: 5px;
+.user-links{
+	margin-top:5px;
 	font-size: 0.9em;
 	text-align: right;
 }
-
-#main-nav #user-links a {
+.user-links a{
 	color: #99acbf;
+}
+.main-menu{
+	float:left;
+}
+.service-menu{
+	float: right;
 }
\ No newline at end of file
diff --git a/src/main/webapp/css/scipro.css b/src/main/webapp/css/scipro.css
index 37d3b9d4f3..f7cb778017 100644
--- a/src/main/webapp/css/scipro.css
+++ b/src/main/webapp/css/scipro.css
@@ -63,6 +63,7 @@ img.department-logotype {
 #main-content {
 	min-height: 500px;
 	background: url('../images/background.png') repeat-y;
+	padding-bottom: 1.5em;
 }
 
 #main-content h1,
@@ -253,6 +254,10 @@ ul.no-list-style li {
 	margin-left: -1.5em;
 }
 
+.rounded-table,
+.rounded-table-top{
+	padding-top: 0.5em;
+}
 .rounded-table th,
 .rounded-table-top th {
 	background: #ccc;	
@@ -848,7 +853,6 @@ td.active {
 	text-align:right;
 	white-space: nowrap;
 }
-
 .question-rounded-box { 
 	font-size: 0.9em; 
 	padding:1.5em; 
@@ -947,7 +951,9 @@ h5.peer-box-subtitle {
 .shortened-table-header {
 	cursor: help;
 }
-
+.forcedPaddingBottom{
+	padding-bottom: 1.5em;
+}
 table.seminar-table {
 	font-size: 0.9em;
 }
@@ -1070,3 +1076,7 @@ div.wicket-aa ul li.selected {
 	font-size: 1.4em; 
 	font-style: strong; 
 }
+
+body {
+	font: 0.8em/21px arial,sans-serif;
+}
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/about.png b/src/main/webapp/images/icons/daisyIcons/plain/about.png
new file mode 100644
index 0000000000..f49ee9f52b
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/about.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/add2.png b/src/main/webapp/images/icons/daisyIcons/plain/add2.png
new file mode 100644
index 0000000000..25afcff531
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/add2.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_blue.png b/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_blue.png
new file mode 100644
index 0000000000..9b48dd2034
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_blue.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_green.png b/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_green.png
new file mode 100644
index 0000000000..e14d3a017f
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_green.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_red.png b/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_red.png
new file mode 100644
index 0000000000..776fac7269
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_red.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_yellow.png b/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_yellow.png
new file mode 100644
index 0000000000..a5a2f617c2
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/bullet_ball_glass_yellow.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/check.png b/src/main/webapp/images/icons/daisyIcons/plain/check.png
new file mode 100644
index 0000000000..1cced5b5a2
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/check.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/check2.png b/src/main/webapp/images/icons/daisyIcons/plain/check2.png
new file mode 100644
index 0000000000..a144c40770
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/check2.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/copy.png b/src/main/webapp/images/icons/daisyIcons/plain/copy.png
new file mode 100644
index 0000000000..fde32253cd
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/copy.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/delete2.png b/src/main/webapp/images/icons/daisyIcons/plain/delete2.png
new file mode 100644
index 0000000000..e24f744391
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/delete2.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/document.png b/src/main/webapp/images/icons/daisyIcons/plain/document.png
new file mode 100644
index 0000000000..2c001f69dd
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/document.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/document_add.png b/src/main/webapp/images/icons/daisyIcons/plain/document_add.png
new file mode 100644
index 0000000000..aac984195b
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/document_add.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/document_down.png b/src/main/webapp/images/icons/daisyIcons/plain/document_down.png
new file mode 100644
index 0000000000..35ade52942
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/document_down.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/document_edit.png b/src/main/webapp/images/icons/daisyIcons/plain/document_edit.png
new file mode 100644
index 0000000000..b78dc0037e
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/document_edit.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/documents.png b/src/main/webapp/images/icons/daisyIcons/plain/documents.png
new file mode 100644
index 0000000000..51f6aa1e6c
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/documents.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/folder_add.png b/src/main/webapp/images/icons/daisyIcons/plain/folder_add.png
new file mode 100644
index 0000000000..78ddbbbac4
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/folder_add.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/folder_closed.png b/src/main/webapp/images/icons/daisyIcons/plain/folder_closed.png
new file mode 100644
index 0000000000..89eea033be
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/folder_closed.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/folder_delete.png b/src/main/webapp/images/icons/daisyIcons/plain/folder_delete.png
new file mode 100644
index 0000000000..18f4baa280
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/folder_delete.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/folder_document.png b/src/main/webapp/images/icons/daisyIcons/plain/folder_document.png
new file mode 100644
index 0000000000..a6c11bb0e7
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/folder_document.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/folder_edit.png b/src/main/webapp/images/icons/daisyIcons/plain/folder_edit.png
new file mode 100644
index 0000000000..71726bce4a
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/folder_edit.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/folder_up.png b/src/main/webapp/images/icons/daisyIcons/plain/folder_up.png
new file mode 100644
index 0000000000..d3fbff15bc
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/folder_up.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/folder_view.png b/src/main/webapp/images/icons/daisyIcons/plain/folder_view.png
new file mode 100644
index 0000000000..3aa65417ad
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/folder_view.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/gear.png b/src/main/webapp/images/icons/daisyIcons/plain/gear.png
new file mode 100644
index 0000000000..e0dd63cb22
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/gear.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/help2.png b/src/main/webapp/images/icons/daisyIcons/plain/help2.png
new file mode 100644
index 0000000000..1e671d6d10
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/help2.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/navigate_close.png b/src/main/webapp/images/icons/daisyIcons/plain/navigate_close.png
new file mode 100644
index 0000000000..51aa3f2ca8
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/navigate_close.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/navigate_left.png b/src/main/webapp/images/icons/daisyIcons/plain/navigate_left.png
new file mode 100644
index 0000000000..3b510ec6e8
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/navigate_left.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/navigate_left2.png b/src/main/webapp/images/icons/daisyIcons/plain/navigate_left2.png
new file mode 100644
index 0000000000..4280a3896a
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/navigate_left2.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/navigate_open.png b/src/main/webapp/images/icons/daisyIcons/plain/navigate_open.png
new file mode 100644
index 0000000000..c00c19ae63
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/navigate_open.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/navigate_right.png b/src/main/webapp/images/icons/daisyIcons/plain/navigate_right.png
new file mode 100644
index 0000000000..1a91320823
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/navigate_right.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/navigate_right2.png b/src/main/webapp/images/icons/daisyIcons/plain/navigate_right2.png
new file mode 100644
index 0000000000..7f838b63f0
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/navigate_right2.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/star_blue.png b/src/main/webapp/images/icons/daisyIcons/plain/star_blue.png
new file mode 100644
index 0000000000..ca898a2944
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/star_blue.png differ
diff --git a/src/main/webapp/images/icons/daisyIcons/plain/user1.png b/src/main/webapp/images/icons/daisyIcons/plain/user1.png
new file mode 100644
index 0000000000..014e5deca5
Binary files /dev/null and b/src/main/webapp/images/icons/daisyIcons/plain/user1.png differ
diff --git a/src/main/webapp/images/icons/grey_ball_32.png b/src/main/webapp/images/icons/grey_ball_32.png
new file mode 100644
index 0000000000..a9017f0aa5
Binary files /dev/null and b/src/main/webapp/images/icons/grey_ball_32.png differ
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
diff --git a/src/main/webapp/styles/global.css b/src/main/webapp/styles/global.css
deleted file mode 100644
index f310472cf1..0000000000
--- a/src/main/webapp/styles/global.css
+++ /dev/null
@@ -1,230 +0,0 @@
-@CHARSET "UTF-8";
-
-html, body {
-	font-family: Calibri, Tahoma, Verdana, sans-serif;
-	margin: 0 0 0 0;
-	padding: 0 0 0 0;
-	font-size: 0.94em;
-	line-height: 1.5em;
-	padding-top: 30px;
-}
-
-h1, h2, h3 {
-	font-family: Cambria, Tahoma, Verdana, sans-serif;
-}
-
-#container {
-	width: 960px;
-	margin: auto;
-}
-
-#ajax-loader {
-	z-index:9999;
-	position: fixed;
-	top: 0;
-	left: 0;
-	width: 80px;
-	height: 30px;
-	background-color: #FFFF80;
-	border-bottom: 1px solid black;
-	border-right: 1px solid black;		
-}
-
-#veil {
-	opacity:0.3;
-	filter:alpha(opacity=50);
-	position:absolute;
-	width: 100%;
-	height: 100%;
-	z-index:9998;
-	background-color: white;
-}
-
-#veil-loader {
-	z-index:9999;
-	position: absolute;
-	top: 30%;
-	left: 45%;
-	width: 100px;
-	height: 100px;
-	background: url(../images/ajax-loader.gif) center no-repeat;	
-}
-
-p.inline {
-	display: inline;	
-}
-
-.connectedSortable {
-	cursor: move;	
-}
-
-.float-right {
-	float:right;
-}
-
-.float-left {
-	float:left;	
-}
-
-td.icon,
-span.icon {
-	padding-left: 20px;
-	line-height: 20px; /* To center the text vertically with the icon */
-}
-
-span.floating-icon {
-	width: 20px;
-	height: 20px;
-}
-
-td.icon-button,
-span.icon-button {
-	cursor: pointer;	
-}
-
-td.icon-user,
-span.icon-user { /*The background image*/
-	background: url(../images/user.png) no-repeat left center;
-}
-
-td.icon-project,
-span.icon-project { /*The background image*/
-	background: url(../images/project.png) no-repeat left center;
-}
-
-td.icon-arrowDown,
-span.icon-arrowDown {
-	background: url(../images/icons/arrow-down.png) no-repeat left center;	
-}
-
-td.icon-plus,
-span.icon-plus {
-	background: url(../images/icons/add.gif) no-repeat left center;
-}
-
-td.icon-minus,
-span.icon-minus {
-	background: url(../images/icons/minus.gif) no-repeat left center;
-}
-
-td.icon-check,
-span.icon-check {
-	background: url(../images/icons/circle-check.png) no-repeat left center;
-}
-
-td.icon-pencil,
-span.icon-pencil { /*The background image*/
-	background: url(../images/icons/pencil.png) no-repeat left center;
-}
-
-td.icon-delete,
-span.icon-delete { /*The background image*/
-	background: url(../images/icons/circle-delete.png) no-repeat left center;
-}
-
-td.icon-zoom-in,
-span.icon-zoom-in { /*The background image*/
-	background: url(../images/icons/zoom-in.png) no-repeat left center;
-}
-
-.bordered-box {
-	border: 1px solid #CCE6FF;
-	padding: 0.5em 0.5em;
-}
-
-.float-left {
-	float: left;
-}
-
-.float-right {
-	float: right;
-}
-
-.boxContent {
-	margin: 0.5em 0.5em;
-}
-
-.boxContent h4 {
-	border: 1px solid #0099CC;
-	background-color: #CCE6FF;
-	padding: 0.3em 0.3em;
-}
-
-.dashboardBox {
-	border: 1px solid #3300CC;
-	width: 50em;
-	min-height: 10em;
-}
-
-.dashboardBox h3 {
-	border-bottom: 1px solid #3300CC;
-	background-color: blue;
-	color: white;
-	padding: 0.2em;
-	margin: 0 0;
-}
-
-form.div {
-	display:block;	
-}
-
-form.formRow {
-	display: inline;	
-}
-
-#schedulePlannerCtrlContainer {
-	border: 1px solid #CCE6FF;
-}
-
-#schedulePlannerCtrlContainer ul {
-	list-style-type: none;
-	display: inline;
-}
-
-.scheduleEventList {
-	margin: 1em 0;
-}
-
-.scheduleEvent {
-	padding: 0.2em 0.2em;
-	-webkit-border-radius: 3px;
-	background-color: #E5F3FF;
-	border: 1px solid #B3DBFF;
-}
-
-.scheduleEventHeader {
-	padding: 0.4em 0.2em;
-}
-
-.scheduleEventHeaderBar {
-	margin-left: 0.5em;	
-}
-
-.scheduleEventHeaderBar img {
-	float:left;
-	margin-right: 1em;
-	margin-left: 0.5em;
-}
-
-.scheduleEventHeaderBar span {
-	display: inline;
-	margin-left: 0.1em;
-}
-
-.scheduleEventIconbar {
-	margin: 0.4em 1em;
-	padding: 0.3em;
-}
-
-.scheduleEventContent {
-	padding: 0.3em 0.5em;
-	width: 45em;
-}
-
-.scheduleEventFooter {
-	margin-top: 1em;
-}
-
-form.dialogForm {
-	font-size: 0.9em;	
-}
\ No newline at end of file
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..5203a6add4 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.addToBoardMessages(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));
+	}
 
 }
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);
 	}
diff --git a/target/work/WicketMockServlet-filestore/2225/4400/e95749e4_308e_4698_a057_bb86050ac96e/pm-null b/target/work/WicketMockServlet-filestore/2225/4400/e95749e4_308e_4698_a057_bb86050ac96e/pm-null
deleted file mode 100644
index 147e0c190a..0000000000
Binary files a/target/work/WicketMockServlet-filestore/2225/4400/e95749e4_308e_4698_a057_bb86050ac96e/pm-null and /dev/null differ
diff --git a/target/work/WicketMockServlet-filestore/2349/5733/fd6064a1_8b84_4446_82cc_69fd7167e7c6/pm-null b/target/work/WicketMockServlet-filestore/2349/5733/fd6064a1_8b84_4446_82cc_69fd7167e7c6/pm-null
deleted file mode 100644
index 147e0c190a..0000000000
Binary files a/target/work/WicketMockServlet-filestore/2349/5733/fd6064a1_8b84_4446_82cc_69fd7167e7c6/pm-null and /dev/null differ
diff --git a/target/work/WicketMockServlet-filestore/4435/793/a137fc0e_994c_4fd1_94a7_801290d34f88/pm-null b/target/work/WicketMockServlet-filestore/4435/793/a137fc0e_994c_4fd1_94a7_801290d34f88/pm-null
deleted file mode 100644
index 147e0c190a..0000000000
Binary files a/target/work/WicketMockServlet-filestore/4435/793/a137fc0e_994c_4fd1_94a7_801290d34f88/pm-null and /dev/null differ
diff --git a/target/work/WicketMockServlet-filestore/6408/4902/a7851e5b_30d6_4edf_a954_3f4f8c6690fb/pm-null b/target/work/WicketMockServlet-filestore/6408/4902/a7851e5b_30d6_4edf_a954_3f4f8c6690fb/pm-null
deleted file mode 100644
index 147e0c190a..0000000000
Binary files a/target/work/WicketMockServlet-filestore/6408/4902/a7851e5b_30d6_4edf_a954_3f4f8c6690fb/pm-null and /dev/null differ
diff --git a/target/work/WicketMockServlet-filestore/7238/3517/7b8c41d4_a788_46e0_a576_ab3eb0b03be8/pm-null b/target/work/WicketMockServlet-filestore/7238/3517/7b8c41d4_a788_46e0_a576_ab3eb0b03be8/pm-null
deleted file mode 100644
index ec76752917..0000000000
Binary files a/target/work/WicketMockServlet-filestore/7238/3517/7b8c41d4_a788_46e0_a576_ab3eb0b03be8/pm-null and /dev/null differ