Coser-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- 1258 discussions
r523 - trunk/coser-web/src/main/webapp/styles
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
18 Jan '11
Author: chatellier
Date: 2011-01-18 15:44:04 +0000 (Tue, 18 Jan 2011)
New Revision: 523
Log:
Some css fix
Modified:
trunk/coser-web/src/main/webapp/styles/coser.css
Modified: trunk/coser-web/src/main/webapp/styles/coser.css
===================================================================
--- trunk/coser-web/src/main/webapp/styles/coser.css 2011-01-18 15:34:01 UTC (rev 522)
+++ trunk/coser-web/src/main/webapp/styles/coser.css 2011-01-18 15:44:04 UTC (rev 523)
@@ -314,7 +314,7 @@
text-transform: uppercase;
}
-h3 {
+.col_droite h3 {
text-transform: uppercase;
color: #ffffff;
font-weight: normal;
@@ -521,11 +521,11 @@
height: 23px;
}
-#middle .col_droite ul li a {
+a {
color: #2C9EFF;
}
-#middle .col_droite ul li a:hover {
+a:hover {
color: #ffe600;
}
@@ -630,4 +630,4 @@
.barre_select select {
background-color: #fff;
border: 1px solid #ccc;
-}
\ No newline at end of file
+}
1
0
r522 - in trunk/coser-web/src/main: resources/fr/ifremer/coser/web webapp/WEB-INF/content/map
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
18 Jan '11
Author: chatellier
Date: 2011-01-18 15:34:01 +0000 (Tue, 18 Jan 2011)
New Revision: 522
Log:
Ajout des titres et ?\195?\169l?\195?\169ments manquant sur les cartes.
Modified:
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/survey.jsp
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-18 15:20:22 UTC (rev 521)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-18 15:34:01 UTC (rev 522)
@@ -50,8 +50,12 @@
message.map.citationtitle=Citation
message.map.citation=Trenkel V.M., O. Berthel\u00E9, P. Lorance, J.A. Bertrand, A. Brind''Amour, M.L. Cochard, F. Coppin, J.P. Leaut\u00E9, J.C. Mah\u00E9, J. Morin, M.J. Rochet, M. Salaun, A. Souplet & Y. V\u00E9rin, 2009. Grands invert\u00E9br\u00E9s et poissons observ\u00E9s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. Ifremer, Nantes. EMH : 09-003. {0}. 100 p.
message.map.downloadaspdf=Download as PDF
+message.map.linkarchimer=Acc\u00E8s \u00E0 l''atlas : {0}
message.map.paragraph1=L''objectif de cet atlas est de donner un aper\u00E7u de la distribution spatiale des esp\u00E8ces de poissons et de certains invert\u00E9br\u00E9s marin \u00E0 partir des observations des campagnes de p\u00EAche scientifiques.
message.map.paragraph2=Pour chaque zone un quadrillage syst\u00E9matique a \u00E9t\u00E9 d\u00E9fini, puis la densit\u00E9 moyenne par km\u00B2 dans chaque cellule a \u00E9t\u00E9 calcul\u00E9e en utilisant les observations de toute la p\u00E9riode. Pour la repr\u00E9sentation cartographique, les cellules avec des densit\u00E9s moyenne correspondant aux quartiles de densit\u00E9 ont re\u00E7u la m\u00EAme couleur\u00A0: bleu\u00A0: esp\u00E8ce jamais observ\u00E9e, jaune clair\u00A0: densit\u00E9 moyenne entre [0 et 25\u00A0%[; jaune fonc\u00E9\u00A0: [25-50\u00A0%[, orange\u00A0: [50-75\u00A0%[ et rouge\u00A0: [75-100\u00A0%]. Donc, les zones o\u00F9 se trouvent les densit\u00E9s les plus \u00E9lev\u00E9es en moyenne sont repr\u00E9sent\u00E9es en rouge.
+message.map.title=Cartes de distribution
+message.map.warning=Warning
+message.map.warningcontent=Les cartes pr\u00E9sent\u00E9es ne doivent pas \u00EAtre interpr\u00E9t\u00E9es comme des cartes de distribution des esp\u00E8ces mais comme celle des zones o\u00F9 elles sont captur\u00E9es lors des campagnes scientifiques. Les campagnes \u00E9tant r\u00E9alis\u00E9es avec des chaluts diff\u00E9rents et \u00E0 diff\u00E9rentes saisons, les esp\u00E8ces peuvent avoir des capturabilit\u00E9s tr\u00E8s diff\u00E9rentes entre les s\u00E9ries de campagnes, donc d''une zone \u00E0 l''autre.
message.source.download=Download
message.survey.maintitle=Les campagnes de surveillance halieutique de l''Ifremer
message.survey.paragraph1=Les campagnes de p\u00EAche scientifique standardis\u00E9es ont pour objectif d''observer les ressources halieutiques, en suivant toujours les m\u00EAmes m\u00E9thodes d\u2019\u00E9chantillonnage. Elles sont toujours r\u00E9alis\u00E9es dans la m\u00EAme zone, \u00E0 la m\u00EAme saison, avec des engins de p\u00EAche standardis\u00E9s, afin que les donn\u00E9es soient comparables d''ann\u00E9e en ann\u00E9e. Elles servent \u00E0 d\u00E9crire les esp\u00E8ces, qu''elles soient commerciales ou non, d\'une zone et \u00E0 observer les changements s\u2019il y en a. Les poissons, les mollusques et les crustac\u00E9s sont d\u00E9nombr\u00E9s, mesur\u00E9s et pes\u00E9s. Certains d\'entre eux font l''objet de pr\u00E9l\u00E8vements biologiques. Chaque campagne fournit ainsi une repr\u00E9sentation quantitative de l''ensemble des esp\u00E8ces de la zone \u00E0 une p\u00E9riode donn\u00E9e. Selon les s\u00E9ries, d'''autres informations sont relev\u00E9es (temp\u00E9rature, salinit\u00E9, macrofaune, observation des mammif\u00E8res marins, oiseaux, macro d\u00E9chets etc., mais ne sont pas pr\u00E9sent\u00E9es dans ce site)
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-18 15:20:22 UTC (rev 521)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-18 15:34:01 UTC (rev 522)
@@ -50,8 +50,12 @@
message.map.citationtitle=Citation
message.map.citation=Trenkel V.M., O. Berthel\u00E9, P. Lorance, J.A. Bertrand, A. Brind''Amour, M.L. Cochard, F. Coppin, J.P. Leaut\u00E9, J.C. Mah\u00E9, J. Morin, M.J. Rochet, M. Salaun, A. Souplet & Y. V\u00E9rin, 2009. Grands invert\u00E9br\u00E9s et poissons observ\u00E9s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. Ifremer, Nantes. EMH : 09-003. {0}. 100 p.
message.map.downloadaspdf=T\u00E9l\u00E9charger en PDF
+message.map.linkarchimer=Acc\u00E8s \u00E0 l''atlas : {0}
message.map.paragraph1=L''objectif de cet atlas est de donner un aper\u00E7u de la distribution spatiale des esp\u00E8ces de poissons et de certains invert\u00E9br\u00E9s marin \u00E0 partir des observations des campagnes de p\u00EAche scientifiques.
message.map.paragraph2=Pour chaque zone un quadrillage syst\u00E9matique a \u00E9t\u00E9 d\u00E9fini, puis la densit\u00E9 moyenne par km\u00B2 dans chaque cellule a \u00E9t\u00E9 calcul\u00E9e en utilisant les observations de toute la p\u00E9riode. Pour la repr\u00E9sentation cartographique, les cellules avec des densit\u00E9s moyenne correspondant aux quartiles de densit\u00E9 ont re\u00E7u la m\u00EAme couleur\u00A0: bleu\u00A0: esp\u00E8ce jamais observ\u00E9e, jaune clair\u00A0: densit\u00E9 moyenne entre [0 et 25\u00A0%[; jaune fonc\u00E9\u00A0: [25-50\u00A0%[, orange\u00A0: [50-75\u00A0%[ et rouge\u00A0: [75-100\u00A0%]. Donc, les zones o\u00F9 se trouvent les densit\u00E9s les plus \u00E9lev\u00E9es en moyenne sont repr\u00E9sent\u00E9es en rouge.
+message.map.title=Cartes de distribution
+message.map.warning=Avertissement
+message.map.warningcontent=Les cartes pr\u00E9sent\u00E9es ne doivent pas \u00EAtre interpr\u00E9t\u00E9es comme des cartes de distribution des esp\u00E8ces mais comme celle des zones o\u00F9 elles sont captur\u00E9es lors des campagnes scientifiques. Les campagnes \u00E9tant r\u00E9alis\u00E9es avec des chaluts diff\u00E9rents et \u00E0 diff\u00E9rentes saisons, les esp\u00E8ces peuvent avoir des capturabilit\u00E9s tr\u00E8s diff\u00E9rentes entre les s\u00E9ries de campagnes, donc d''une zone \u00E0 l''autre.
message.source.download=T\u00E9l\u00E9charger
message.survey.maintitle=Les campagnes de surveillance halieutique de l''Ifremer
message.survey.paragraph1=Les campagnes de p\u00EAche scientifique standardis\u00E9es ont pour objectif d''observer les ressources halieutiques, en suivant toujours les m\u00EAmes m\u00E9thodes d\u2019\u00E9chantillonnage. Elles sont toujours r\u00E9alis\u00E9es dans la m\u00EAme zone, \u00E0 la m\u00EAme saison, avec des engins de p\u00EAche standardis\u00E9s, afin que les donn\u00E9es soient comparables d''ann\u00E9e en ann\u00E9e. Elles servent \u00E0 d\u00E9crire les esp\u00E8ces, qu''elles soient commerciales ou non, d\'une zone et \u00E0 observer les changements s\u2019il y en a. Les poissons, les mollusques et les crustac\u00E9s sont d\u00E9nombr\u00E9s, mesur\u00E9s et pes\u00E9s. Certains d\'entre eux font l''objet de pr\u00E9l\u00E8vements biologiques. Chaque campagne fournit ainsi une repr\u00E9sentation quantitative de l''ensemble des esp\u00E8ces de la zone \u00E0 une p\u00E9riode donn\u00E9e. Selon les s\u00E9ries, d'''autres informations sont relev\u00E9es (temp\u00E9rature, salinit\u00E9, macrofaune, observation des mammif\u00E8res marins, oiseaux, macro d\u00E9chets etc., mais ne sont pas pr\u00E9sent\u00E9es dans ce site)
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp 2011-01-18 15:20:22 UTC (rev 521)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp 2011-01-18 15:34:01 UTC (rev 522)
@@ -26,10 +26,12 @@
<%@taglib uri="/struts-tags" prefix="s" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.map.title" /></title>
</head>
<body>
+ <h2><s:text name="message.map.title" /></h2>
+
<img src="<s:url value='/images/zonesmap.jpg' />" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp 2011-01-18 15:20:22 UTC (rev 521)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp 2011-01-18 15:34:01 UTC (rev 522)
@@ -24,15 +24,21 @@
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
-
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.map.title" /></title>
</head>
<body>
+ <h2><s:text name="message.map.title" /></h2>
+
<p><s:text name="message.map.paragraph1" /></p>
<p><s:text name="message.map.paragraph2" /></p>
+
+ <p style="border: 1px solid black">
+ <span style="font-weight:bold"><s:text name="message.map.warning" /></span><br />
+ <s:text name="message.map.warningcontent" />
+ </p>
<img src="<s:url action='map-data'>
<s:param name="survey" value="%{survey}" />
@@ -46,6 +52,11 @@
</s:a>.</p>
<p>
+ <s:text name="message.map.linkarchimer">
+ <s:param><a href="http://archimer.ifremer.fr/doc/00000/6976/">http://archimer.ifremer.fr/doc/00000/6976/</a></s:param>
+ </s:text>
+ </p>
+ <p>
<span style="font-weight:bold"><s:text name="message.map.citationtitle" /></span> : <s:text name="message.map.citation">
<s:param><a href="http://archimer.ifremer.fr/doc/00000/6976/">http://archimer.ifremer.fr/doc/00000/6976/</a></s:param>
</s:text>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp 2011-01-18 15:20:22 UTC (rev 521)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp 2011-01-18 15:34:01 UTC (rev 522)
@@ -24,13 +24,14 @@
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
-
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.map.title" /></title>
</head>
<body>
+ <h2><s:text name="message.map.title" /></h2>
+
<img src="<s:url value='/images/zones/' /><s:property value='zonePicture' />" style="width: 590px; heigth: 812px" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/survey.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/survey.jsp 2011-01-18 15:20:22 UTC (rev 521)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/survey.jsp 2011-01-18 15:34:01 UTC (rev 522)
@@ -26,10 +26,12 @@
<%@taglib uri="/struts-tags" prefix="s" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title>Coser</title>
+ <title><s:text name="message.map.title" /></title>
</head>
<body>
+ <h2><s:text name="message.map.title" /></h2>
+
<img src="<s:url value='/images/zonesmap.jpg' />" />
<br />
1
0
r521 - in trunk: . coser-business coser-business/src/main/java/fr/ifremer/coser coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/main/resources coser-business/src/main/resources/ftl coser-business/src/test/java/fr/ifremer/coser coser-business/src/test/java/fr/ifremer/coser/services coser-web/src/main/java/fr/ifremer/coser/web/actions/map coser-web/src/main/java/fr/ifremer/coser/web/actions/source coser-web/src/main/resources coser-web/src/main/resources/fr/ifremer/co
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
18 Jan '11
Author: chatellier
Date: 2011-01-18 15:20:22 +0000 (Tue, 18 Jan 2011)
New Revision: 521
Log:
T?\195?\169l?\195?\169chargement des cartes en PDF
Added:
trunk/coser-business/src/main/resources/ftl/
trunk/coser-business/src/main/resources/ftl/map.ftl
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapPdfAction.java
Removed:
trunk/coser-web/src/main/resources/ftl/
Modified:
trunk/coser-business/pom.xml
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
trunk/coser-business/src/test/java/fr/ifremer/coser/CoserUtilsTest.java
trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp
trunk/pom.xml
Modified: trunk/coser-business/pom.xml
===================================================================
--- trunk/coser-business/pom.xml 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-business/pom.xml 2011-01-18 15:20:22 UTC (rev 521)
@@ -102,6 +102,10 @@
<groupId>org.xhtmlrenderer</groupId>
<artifactId>core-renderer</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>freemarker</artifactId>
+ </dependency>
</dependencies>
<name>Coser :: Business</name>
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserUtils.java 2011-01-18 15:20:22 UTC (rev 521)
@@ -25,6 +25,8 @@
package fr.ifremer.coser;
+import java.io.IOException;
+import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
@@ -32,8 +34,15 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
import org.apache.commons.lang.StringUtils;
import org.nuiton.util.StringUtil;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
/**
* Coser utility class.
@@ -128,4 +137,25 @@
List<String> strList = Arrays.asList(strArray);
return strList;
}
+
+ /**
+ * Convert string to {@link Document}.
+ *
+ * @param content content
+ * @return document
+ * @throws IOException
+ */
+ public static Document parseDocument(String content) throws IOException {
+ Document result = null;
+ try {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ result = builder.parse(new InputSource(new StringReader(content)));
+ } catch (ParserConfigurationException e) {
+ throw new IOException(e);
+ } catch (SAXException e) {
+ throw new IOException(e);
+ }
+ return result;
+ }
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2011-01-18 15:20:22 UTC (rev 521)
@@ -86,7 +86,7 @@
import fr.ifremer.coser.storage.DataStorage;
/**
- * Publication service (charts, reports, export...)
+ * Publication service (charts, reports, export, pdf...)
*
* @author chatellier
* @version $Revision$
@@ -714,6 +714,7 @@
* @param resultDirectory
* @param rsufiResult
* @param species
+ * @param indicator
* @param locale
* @return
* @throws CoserBusinessException
@@ -773,7 +774,6 @@
}
return result;
-
}
}
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-18 15:20:22 UTC (rev 521)
@@ -30,7 +30,11 @@
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStream;
+import java.io.StringWriter;
+import java.io.Writer;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
@@ -38,6 +42,7 @@
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Matcher;
@@ -50,7 +55,6 @@
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.http.HttpResponse;
-import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
@@ -62,7 +66,11 @@
import org.nuiton.util.FileUtil;
import org.nuiton.util.StringUtil;
import org.nuiton.util.ZipUtil;
+import org.w3c.dom.Document;
+import org.xhtmlrenderer.pdf.ITextRenderer;
+import com.lowagie.text.DocumentException;
+
import fr.ifremer.coser.CoserBusinessConfig;
import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.CoserConstants;
@@ -75,6 +83,10 @@
import fr.ifremer.coser.storage.MemoryDataStorage;
import fr.ifremer.coser.util.ProgressMonitor;
import fr.ifremer.coser.util.ProgressStream;
+import freemarker.cache.ClassTemplateLoader;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
/**
* Service specifique à l'interface web de visualisation.
@@ -111,12 +123,25 @@
/** Zones map (etat du service). */
protected DataStorage zonesMap;
+ /** Freemarker */
+ protected Configuration freemarkerConfiguration;
+
public WebService(CoserBusinessConfig config) {
this.config = config;
-
+
importService = new ImportService(config);
projectService = new ProjectService(config);
publicationService = new PublicationService(config);
+
+ freemarkerConfiguration = new Configuration();
+
+ // needed to overwrite "Defaults to default system encoding."
+ // fix encoding issue on some systems
+ freemarkerConfiguration.setEncoding(Locale.getDefault(), "UTF-8");
+
+ // specific template loader to get template from jars (classpath)
+ ClassTemplateLoader templateLoader = new ClassTemplateLoader(WebService.class, "/ftl");
+ freemarkerConfiguration.setTemplateLoader(templateLoader);
}
/**
@@ -1364,8 +1389,57 @@
return result;
}
-
+
/**
+ * Generate map file into pdf file.
+ *
+ * @param survey survey
+ * @param species species
+ * @return pdf file
+ * @throws CoserBusinessException
+ */
+ public File getMapFileAsPDF(String survey, String species) throws CoserBusinessException {
+
+ File result = null;
+
+ try {
+ // render freemarker template
+ File mapFile = getMapFile(survey, species);
+
+ Template mapTemplate = freemarkerConfiguration.getTemplate("map.ftl");
+ Map<String, Object> root = new HashMap<String, Object>();
+ root.put("mapFile", mapFile.getAbsolutePath());
+
+ Writer out = new StringWriter();
+ mapTemplate.process(root, out);
+ out.flush();
+
+ // get content as w3c document
+ Document document = CoserUtils.parseDocument(out.toString());
+
+ // render template output as pdf
+ result = File.createTempFile("coserpdf", ".pdf");
+ result.deleteOnExit();
+ OutputStream os = new FileOutputStream(result);
+
+ ITextRenderer renderer = new ITextRenderer();
+ renderer.setDocument(document, null);
+ renderer.layout();
+ renderer.createPDF(os);
+
+ os.close();
+
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't generate pdf with map", ex);
+ } catch (TemplateException ex) {
+ throw new CoserBusinessException("Can't generate pdf with map", ex);
+ } catch (DocumentException ex) {
+ throw new CoserBusinessException("Can't generate pdf with map", ex);
+ }
+ return result;
+ }
+
+ /**
* Genere un fichier zip des sources d'un projet.
*
* Contient:
Added: trunk/coser-business/src/main/resources/ftl/map.ftl
===================================================================
--- trunk/coser-business/src/main/resources/ftl/map.ftl (rev 0)
+++ trunk/coser-business/src/main/resources/ftl/map.ftl 2011-01-18 15:20:22 UTC (rev 521)
@@ -0,0 +1,17 @@
+<html>
+ <body><p>L'objectif de cet atlas est de donner un aperçu de la distribution
+ spatiale des espèces de poissons et de certains invertébrés marin à partir
+ des observations des campagnes de pêche scientifiques.</p>
+ <p>
+Pour chaque zone un quadrillage systématique a été défini, puis la densité
+moyenne par km² dans chaque cellule a été calculée en utilisant les observations
+de toute la période. Pour la représentation cartographique, les cellules avec
+des densités moyenne correspondant aux quartiles de densité ont reçu la même
+couleur : bleu : espèce jamais observée, jaune clair : densité moyenne entre
+[0 et 25 %[; jaune foncé : [25-50 %[, orange : [50-75 %[ et rouge : [75-100 %].
+Donc, les zones où se trouvent les densités les plus élevées en moyenne sont
+représentées en rouge.</p>
+
+<img src="file://${mapFile}" />
+</body>
+</html>
\ No newline at end of file
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/CoserUtilsTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/CoserUtilsTest.java 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/CoserUtilsTest.java 2011-01-18 15:20:22 UTC (rev 521)
@@ -25,6 +25,8 @@
package fr.ifremer.coser;
+import java.io.IOException;
+
import org.junit.Assert;
import org.junit.Test;
@@ -48,4 +50,23 @@
Assert.assertEquals("cap.tu.res_se.csv", CoserUtils.addSuffixBeforeExtension("cap.tu.res.csv", CoserConstants.STORAGE_SELECTION_SUFFIX));
Assert.assertEquals("captures_co", CoserUtils.addSuffixBeforeExtension("captures", CoserConstants.STORAGE_CONTROL_SUFFIX));
}
+
+ /**
+ * Test le parsing xml.
+ * @throws IOException
+ */
+ @Test
+ public void testParseDocument() throws IOException {
+ Assert.assertNotNull(CoserUtils.parseDocument("<html><body>test</body></html>"));
+ }
+
+ /**
+ * Test le parsing xml avec erreur.
+ * @throws IOException
+ */
+ @Test(expected=IOException.class)
+ public void testParseDocumentError() throws IOException {
+ Assert.assertNotNull(CoserUtils.parseDocument("<html>"));
+ }
+
}
Modified: trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java
===================================================================
--- trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2011-01-18 15:20:22 UTC (rev 521)
@@ -69,6 +69,18 @@
}
/**
+ * Simule la publication de nouveaux resultats (uplaod client lourd).
+ *
+ * @param path result to upload
+ * @throws CoserBusinessException
+ */
+ protected void registerUploadedResult(String path) throws CoserBusinessException {
+ URL firstUpload = WebServiceTest.class.getResource(path);
+ File firstUploadFile = new File(firstUpload.getFile());
+ webService.registerNewUploadedResults(firstUploadFile);
+ }
+
+ /**
* Test de lecture du fichier des indicateurs des resources de test.
*
* @throws CoserBusinessException
@@ -98,14 +110,10 @@
*/
@Test
public void testUploadDirectoyMerge() throws CoserBusinessException {
- URL firstUpload = WebServiceTest.class.getResource("/web/upload1.zip");
- File firstUploadFile = new File(firstUpload.getFile());
- webService.registerNewUploadedResults(firstUploadFile);
+ registerUploadedResult("/web/upload1.zip");
// second upload with merge
- URL secondUpload = WebServiceTest.class.getResource("/web/upload2.zip");
- File secondUploadFile = new File(secondUpload.getFile());
- webService.registerNewUploadedResults(secondUploadFile);
+ registerUploadedResult("/web/upload2.zip");
// some tests (from first)
assertFileNotExists(config.getWebProjectsDirectory() + "/projet1/selections/selection11/results/result111");
@@ -126,9 +134,7 @@
*/
@Test
public void testSourceZip() throws CoserBusinessException, IOException {
- URL firstUpload = WebServiceTest.class.getResource("/web/upload1.zip");
- File firstUploadFile = new File(firstUpload.getFile());
- webService.registerNewUploadedResults(firstUploadFile);
+ registerUploadedResult("/web/upload1.zip");
File zip = webService.getSourceZip("testzone1", "en");
File tempDir = FileUtil.createTempDirectory("coser", ".tmp");
@@ -136,4 +142,28 @@
Assert.assertTrue(new File(tempDir, "coser-sources" + File.separator + "testcatch.csv").isFile());
FileUtils.deleteDirectory(tempDir);
}
+
+ /**
+ * Test la récupération d'une image parmit les resultat de type "mapReference".
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testGetMapFile() throws CoserBusinessException {
+ registerUploadedResult("/web/upload2.zip");
+ File file = webService.getMapFile("Medits", "SPECIES1");
+ Assert.assertNotNull(file);
+ }
+
+ /**
+ * Test la generation pdf avec l'inclusion d'image.
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testGetMapFileAsPDF() throws CoserBusinessException {
+ registerUploadedResult("/web/upload2.zip");
+ File file = webService.getMapFileAsPDF("Medits", "SPECIES1");
+ Assert.assertNotNull(file);
+ }
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java 2011-01-18 15:20:22 UTC (rev 521)
@@ -38,7 +38,7 @@
import fr.ifremer.coser.web.ServiceFactory;
/**
- * Action index, recupere la liste des resultats.
+ * Appéle par le navigateur pour recuperer le contenu de l'image.
*
* @author chatellier
* @version $Revision$
Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapPdfAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapPdfAction.java (rev 0)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapPdfAction.java 2011-01-18 15:20:22 UTC (rev 521)
@@ -0,0 +1,98 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+package fr.ifremer.coser.web.actions.map;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+
+import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.convention.annotation.Result;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.services.WebService;
+import fr.ifremer.coser.web.CoserWebException;
+import fr.ifremer.coser.web.ServiceFactory;
+
+/**
+ * Génére la carte sous forme de pdf.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class MapPdfAction extends ActionSupport {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 1663244944108703571L;
+
+ protected String survey;
+
+ protected String species;
+
+ public String getSurvey() {
+ return survey;
+ }
+
+ public void setSurvey(String survey) {
+ this.survey = survey;
+ }
+
+ public String getSpecies() {
+ return species;
+ }
+
+ public void setSpecies(String species) {
+ this.species = species;
+ }
+
+ @Action(results= {@Result(type="stream", params={"contentType", "application/pdf", "inputName", "inputStream", "contentDisposition", "attachment; filename=\"${filename}\""})})
+ public String execute() {
+ return SUCCESS;
+ }
+
+ public String getFilename() {
+ return survey + "-" + species + ".pdf";
+ }
+
+ public InputStream getInputStream() {
+ WebService webService = ServiceFactory.getWebService();
+
+ InputStream input = null;
+ try {
+ File mapImage = webService.getMapFileAsPDF(survey, species);
+ input = new FileInputStream(mapImage);
+ } catch (CoserBusinessException ex) {
+ throw new CoserWebException("Can't get map pdf", ex);
+ } catch (FileNotFoundException ex) {
+ throw new CoserWebException("Can't get map pdf", ex);
+ }
+
+ return input;
+ }
+}
Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapPdfAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java 2011-01-18 15:20:22 UTC (rev 521)
@@ -22,8 +22,6 @@
package fr.ifremer.coser.web.actions.source;
-import java.util.Locale;
-
import com.opensymphony.xwork2.ActionSupport;
import fr.ifremer.coser.CoserBusinessException;
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-18 15:20:22 UTC (rev 521)
@@ -47,6 +47,11 @@
message.common.selectindicator=Select an indicator
message.common.noresults=No results available
message.common.selectspecies=Select a species
+message.map.citationtitle=Citation
+message.map.citation=Trenkel V.M., O. Berthel\u00E9, P. Lorance, J.A. Bertrand, A. Brind''Amour, M.L. Cochard, F. Coppin, J.P. Leaut\u00E9, J.C. Mah\u00E9, J. Morin, M.J. Rochet, M. Salaun, A. Souplet & Y. V\u00E9rin, 2009. Grands invert\u00E9br\u00E9s et poissons observ\u00E9s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. Ifremer, Nantes. EMH : 09-003. {0}. 100 p.
+message.map.downloadaspdf=Download as PDF
+message.map.paragraph1=L''objectif de cet atlas est de donner un aper\u00E7u de la distribution spatiale des esp\u00E8ces de poissons et de certains invert\u00E9br\u00E9s marin \u00E0 partir des observations des campagnes de p\u00EAche scientifiques.
+message.map.paragraph2=Pour chaque zone un quadrillage syst\u00E9matique a \u00E9t\u00E9 d\u00E9fini, puis la densit\u00E9 moyenne par km\u00B2 dans chaque cellule a \u00E9t\u00E9 calcul\u00E9e en utilisant les observations de toute la p\u00E9riode. Pour la repr\u00E9sentation cartographique, les cellules avec des densit\u00E9s moyenne correspondant aux quartiles de densit\u00E9 ont re\u00E7u la m\u00EAme couleur\u00A0: bleu\u00A0: esp\u00E8ce jamais observ\u00E9e, jaune clair\u00A0: densit\u00E9 moyenne entre [0 et 25\u00A0%[; jaune fonc\u00E9\u00A0: [25-50\u00A0%[, orange\u00A0: [50-75\u00A0%[ et rouge\u00A0: [75-100\u00A0%]. Donc, les zones o\u00F9 se trouvent les densit\u00E9s les plus \u00E9lev\u00E9es en moyenne sont repr\u00E9sent\u00E9es en rouge.
message.source.download=Download
message.survey.maintitle=Les campagnes de surveillance halieutique de l''Ifremer
message.survey.paragraph1=Les campagnes de p\u00EAche scientifique standardis\u00E9es ont pour objectif d''observer les ressources halieutiques, en suivant toujours les m\u00EAmes m\u00E9thodes d\u2019\u00E9chantillonnage. Elles sont toujours r\u00E9alis\u00E9es dans la m\u00EAme zone, \u00E0 la m\u00EAme saison, avec des engins de p\u00EAche standardis\u00E9s, afin que les donn\u00E9es soient comparables d''ann\u00E9e en ann\u00E9e. Elles servent \u00E0 d\u00E9crire les esp\u00E8ces, qu''elles soient commerciales ou non, d\'une zone et \u00E0 observer les changements s\u2019il y en a. Les poissons, les mollusques et les crustac\u00E9s sont d\u00E9nombr\u00E9s, mesur\u00E9s et pes\u00E9s. Certains d\'entre eux font l''objet de pr\u00E9l\u00E8vements biologiques. Chaque campagne fournit ainsi une repr\u00E9sentation quantitative de l''ensemble des esp\u00E8ces de la zone \u00E0 une p\u00E9riode donn\u00E9e. Selon les s\u00E9ries, d'''autres informations sont relev\u00E9es (temp\u00E9rature, salinit\u00E9, macrofaune, observation des mammif\u00E8res marins, oiseaux, macro d\u00E9chets etc., mais ne sont pas pr\u00E9sent\u00E9es dans ce site)
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-18 15:20:22 UTC (rev 521)
@@ -47,6 +47,11 @@
message.common.selectindicator=Selectionnez un indicateur
message.common.selectspecies=Selectionnez une esp\u00E8ces
message.common.noresults=Aucun r\u00E9sultat disponible
+message.map.citationtitle=Citation
+message.map.citation=Trenkel V.M., O. Berthel\u00E9, P. Lorance, J.A. Bertrand, A. Brind''Amour, M.L. Cochard, F. Coppin, J.P. Leaut\u00E9, J.C. Mah\u00E9, J. Morin, M.J. Rochet, M. Salaun, A. Souplet & Y. V\u00E9rin, 2009. Grands invert\u00E9br\u00E9s et poissons observ\u00E9s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. Ifremer, Nantes. EMH : 09-003. {0}. 100 p.
+message.map.downloadaspdf=T\u00E9l\u00E9charger en PDF
+message.map.paragraph1=L''objectif de cet atlas est de donner un aper\u00E7u de la distribution spatiale des esp\u00E8ces de poissons et de certains invert\u00E9br\u00E9s marin \u00E0 partir des observations des campagnes de p\u00EAche scientifiques.
+message.map.paragraph2=Pour chaque zone un quadrillage syst\u00E9matique a \u00E9t\u00E9 d\u00E9fini, puis la densit\u00E9 moyenne par km\u00B2 dans chaque cellule a \u00E9t\u00E9 calcul\u00E9e en utilisant les observations de toute la p\u00E9riode. Pour la repr\u00E9sentation cartographique, les cellules avec des densit\u00E9s moyenne correspondant aux quartiles de densit\u00E9 ont re\u00E7u la m\u00EAme couleur\u00A0: bleu\u00A0: esp\u00E8ce jamais observ\u00E9e, jaune clair\u00A0: densit\u00E9 moyenne entre [0 et 25\u00A0%[; jaune fonc\u00E9\u00A0: [25-50\u00A0%[, orange\u00A0: [50-75\u00A0%[ et rouge\u00A0: [75-100\u00A0%]. Donc, les zones o\u00F9 se trouvent les densit\u00E9s les plus \u00E9lev\u00E9es en moyenne sont repr\u00E9sent\u00E9es en rouge.
message.source.download=T\u00E9l\u00E9charger
message.survey.maintitle=Les campagnes de surveillance halieutique de l''Ifremer
message.survey.paragraph1=Les campagnes de p\u00EAche scientifique standardis\u00E9es ont pour objectif d''observer les ressources halieutiques, en suivant toujours les m\u00EAmes m\u00E9thodes d\u2019\u00E9chantillonnage. Elles sont toujours r\u00E9alis\u00E9es dans la m\u00EAme zone, \u00E0 la m\u00EAme saison, avec des engins de p\u00EAche standardis\u00E9s, afin que les donn\u00E9es soient comparables d''ann\u00E9e en ann\u00E9e. Elles servent \u00E0 d\u00E9crire les esp\u00E8ces, qu''elles soient commerciales ou non, d\'une zone et \u00E0 observer les changements s\u2019il y en a. Les poissons, les mollusques et les crustac\u00E9s sont d\u00E9nombr\u00E9s, mesur\u00E9s et pes\u00E9s. Certains d\'entre eux font l''objet de pr\u00E9l\u00E8vements biologiques. Chaque campagne fournit ainsi une repr\u00E9sentation quantitative de l''ensemble des esp\u00E8ces de la zone \u00E0 une p\u00E9riode donn\u00E9e. Selon les s\u00E9ries, d'''autres informations sont relev\u00E9es (temp\u00E9rature, salinit\u00E9, macrofaune, observation des mammif\u00E8res marins, oiseaux, macro d\u00E9chets etc., mais ne sont pas pr\u00E9sent\u00E9es dans ce site)
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp 2011-01-18 15:20:22 UTC (rev 521)
@@ -31,10 +31,25 @@
</head>
<body>
+ <p><s:text name="message.map.paragraph1" /></p>
+ <p><s:text name="message.map.paragraph2" /></p>
+
<img src="<s:url action='map-data'>
<s:param name="survey" value="%{survey}" />
<s:param name="species" value="%{species}" />
</s:url>" />
+ <p><s:a action="map-pdf">
+ <s:param name="survey" value="%{survey}" />
+ <s:param name="species" value="%{species}" />
+ <s:text name="message.map.downloadaspdf"></s:text>
+ </s:a>.</p>
+
+ <p>
+ <span style="font-weight:bold"><s:text name="message.map.citationtitle" /></span> : <s:text name="message.map.citation">
+ <s:param><a href="http://archimer.ifremer.fr/doc/00000/6976/">http://archimer.ifremer.fr/doc/00000/6976/</a></s:param>
+ </s:text>
+ </p>
+
</body>
</html>
\ No newline at end of file
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp 2011-01-18 15:20:22 UTC (rev 521)
@@ -35,10 +35,15 @@
<br />
- <s:form action="map" method="get">
- <s:select name="species" list="species" label="%{getText('message.common.selectspecies')}" />
- <s:hidden name="survey" property="survey"/>
- <s:submit label="Suite"/>
- </s:form>
+ <s:if test="%{species.isEmpty()}">
+ <s:text name="message.common.noresults"></s:text>
+ </s:if>
+ <s:else>
+ <s:form action="map" method="get">
+ <s:select name="species" list="species" label="%{getText('message.common.selectspecies')}" />
+ <s:hidden name="survey" property="survey"/>
+ <s:submit label="Suite"/>
+ </s:form>
+ </s:else>
</body>
</html>
\ No newline at end of file
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-01-18 15:19:02 UTC (rev 520)
+++ trunk/pom.xml 2011-01-18 15:20:22 UTC (rev 521)
@@ -273,6 +273,13 @@
<version>R8pre2</version>
<scope>compile</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>freemarker</artifactId>
+ <version>2.3.16</version>
+ <scope>compile</scope>
+ </dependency>
</dependencies>
</dependencyManagement>
1
0
r520 - trunk/coser-business/src/test/resources/web
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
by chatellier@users.labs.libre-entreprise.org 18 Jan '11
18 Jan '11
Author: chatellier
Date: 2011-01-18 15:19:02 +0000 (Tue, 18 Jan 2011)
New Revision: 520
Log:
Ajout d'une carte dans les jeux d'essai
Modified:
trunk/coser-business/src/test/resources/web/upload1.zip
trunk/coser-business/src/test/resources/web/upload2.zip
Modified: trunk/coser-business/src/test/resources/web/upload1.zip
===================================================================
(Binary files differ)
Modified: trunk/coser-business/src/test/resources/web/upload2.zip
===================================================================
(Binary files differ)
1
0
r519 - in trunk/coser-web/src/main: java/fr/ifremer/coser/web/actions java/fr/ifremer/coser/web/actions/com java/fr/ifremer/coser/web/actions/common java/fr/ifremer/coser/web/actions/map java/fr/ifremer/coser/web/actions/pop java/fr/ifremer/coser/web/actions/source resources/fr/ifremer/coser/web webapp/WEB-INF/content webapp/WEB-INF/content/com webapp/WEB-INF/content/map webapp/WEB-INF/content/pop webapp/WEB-INF/content/source webapp/WEB-INF/decorators
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
17 Jan '11
Author: chatellier
Date: 2011-01-17 17:03:28 +0000 (Mon, 17 Jan 2011)
New Revision: 519
Log:
Refactoring pour le code commun aux actions.
Ajout de la pr?\195?\169sentation des campagnes.
Added:
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/SurveyAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonFacade.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SurveyAction.java
trunk/coser-web/src/main/webapp/WEB-INF/content/map/survey.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/survey.jsp
Removed:
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties
trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp
Modified:
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/IndicatorAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/ZoneAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/FacadeAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SpeciesAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/FacadeAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/SurveyAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/SurveyAction.java (rev 0)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/SurveyAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -0,0 +1,41 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+package fr.ifremer.coser.web.actions;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+/**
+ * Survey description action.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class SurveyAction extends ActionSupport {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = -7450643911834502103L;
+
+}
Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/SurveyAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/IndicatorAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/IndicatorAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/IndicatorAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -22,21 +22,10 @@
package fr.ifremer.coser.web.actions.com;
-import java.util.Locale;
-import java.util.Map;
+import fr.ifremer.coser.web.actions.common.CommonIndicator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-import fr.ifremer.coser.CoserBusinessException;
-import fr.ifremer.coser.services.WebService;
-import fr.ifremer.coser.web.CoserWebException;
-import fr.ifremer.coser.web.ServiceFactory;
-
/**
- * Action index, recupere la liste des resultats.
+ * Action index, recupere la liste des indicateurs.
*
* @author chatellier
* @version $Revision$
@@ -44,47 +33,9 @@
* Last update : $Date$
* By : $Author$
*/
-public class IndicatorAction extends ActionSupport {
+public class IndicatorAction extends CommonIndicator {
/** serialVersionUID. */
private static final long serialVersionUID = 1663244944108703571L;
- private static final Log log = LogFactory.getLog(IndicatorAction.class);
-
- protected String zone;
-
- protected Map<String, String> indicators;
-
- public String getZone() {
- return zone;
- }
-
- public void setZone(String zone) {
- this.zone = zone;
- }
-
- public Map<String, String> getIndicators() {
- return indicators;
- }
-
- @Override
- public String execute() {
-
- if (log.isInfoEnabled()) {
- log.info(String.format("Looking for com indicator for zone %s", zone));
- }
-
- WebService webService = ServiceFactory.getWebService();
-
- Locale locale = getLocale();
- String localeCode = locale.getLanguage();
-
- try {
- indicators = webService.getIndicators(zone, null, localeCode);
- } catch (CoserBusinessException ex) {
- throw new CoserWebException("Can't get indicators", ex);
- }
-
- return SUCCESS;
- }
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/ZoneAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/ZoneAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/com/ZoneAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -22,15 +22,8 @@
package fr.ifremer.coser.web.actions.com;
-import java.util.Map;
+import fr.ifremer.coser.web.actions.common.CommonZone;
-import com.opensymphony.xwork2.ActionSupport;
-
-import fr.ifremer.coser.CoserBusinessException;
-import fr.ifremer.coser.services.WebService;
-import fr.ifremer.coser.web.CoserWebException;
-import fr.ifremer.coser.web.ServiceFactory;
-
/**
* Affiche la liste des sous zones (zone).
*
@@ -40,37 +33,9 @@
* Last update : $Date$
* By : $Author$
*/
-public class ZoneAction extends ActionSupport {
+public class ZoneAction extends CommonZone {
/** serialVersionUID. */
private static final long serialVersionUID = 3385467755357775199L;
- protected String facade;
-
- public void setFacade(String facade) {
- this.facade = facade;
- }
-
- protected Map<String, String> zones;
-
- public Map<String, String> getZones() {
- return zones;
- }
-
- @Override
- public String execute() {
-
- WebService webService = ServiceFactory.getWebService();
- try {
-
- // renvoi la liste des id subzone-survey et leurs label
- // associé
- zones = webService.getZoneForFacade(facade);
-
- } catch (CoserBusinessException ex) {
- throw new CoserWebException("Can't get zone map", ex);
- }
-
- return SUCCESS;
- }
}
Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonFacade.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonFacade.java (rev 0)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonFacade.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -0,0 +1,68 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+package fr.ifremer.coser.web.actions.common;
+
+import java.util.Map;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.services.WebService;
+import fr.ifremer.coser.web.CoserWebException;
+import fr.ifremer.coser.web.ServiceFactory;
+
+/**
+ * Facade list action.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class CommonFacade extends ActionSupport {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 3385467755357775199L;
+
+ protected Map<String, String> facades;
+
+ public Map<String, String> getFacades() {
+ return facades;
+ }
+
+ @Override
+ public String execute() {
+
+ WebService webService = ServiceFactory.getWebService();
+ try {
+ // renvoi la liste des facadeid et leur label associé
+ facades = webService.getFacades();
+
+ } catch (CoserBusinessException ex) {
+ throw new CoserWebException("Can't get facades", ex);
+ }
+
+ return SUCCESS;
+ }
+}
Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonFacade.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java (rev 0)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -0,0 +1,109 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+package fr.ifremer.coser.web.actions.common;
+
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.services.WebService;
+import fr.ifremer.coser.web.CoserWebException;
+import fr.ifremer.coser.web.ServiceFactory;
+
+/**
+ * Recupere la liste des indicateurs à partir d'une zone et d'une espece (peut
+ * être null dans le cas des communautés).
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class CommonIndicator extends ActionSupport {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 1663244944108703571L;
+
+ private static final Log log = LogFactory.getLog(CommonIndicator.class);
+
+ protected String zone;
+
+ protected String species;
+
+ protected String zonePicture;
+
+ protected Map<String, String> indicators;
+
+ public String getZone() {
+ return zone;
+ }
+
+ public void setZone(String zone) {
+ this.zone = zone;
+ }
+
+ public String getSpecies() {
+ return species;
+ }
+
+ public void setSpecies(String species) {
+ this.species = species;
+ }
+
+ public Map<String, String> getIndicators() {
+ return indicators;
+ }
+
+ public String getZonePicture() {
+ return zonePicture;
+ }
+
+ @Override
+ public String execute() {
+
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Looking for indicator for zone %s and species %s", zone, species));
+ }
+
+ WebService webService = ServiceFactory.getWebService();
+
+ Locale locale = getLocale();
+ String localeCode = locale.getLanguage();
+
+ try {
+ indicators = webService.getIndicators(zone, species, localeCode);
+
+ zonePicture = webService.getZonePictures().get(zone);
+ } catch (CoserBusinessException ex) {
+ throw new CoserWebException("Can't get indicators", ex);
+ }
+
+ return SUCCESS;
+ }
+}
Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonIndicator.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java (rev 0)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -0,0 +1,89 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+package fr.ifremer.coser.web.actions.common;
+
+import java.util.Map;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.services.WebService;
+import fr.ifremer.coser.web.CoserWebException;
+import fr.ifremer.coser.web.ServiceFactory;
+
+/**
+ * Affiche la liste des sous zones (zone) et leurs liste des cartes
+ * et commentaires associés.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class CommonZone extends ActionSupport {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 3385467755357775199L;
+
+ protected String facade;
+
+ protected Map<String, String> zones;
+
+ protected Map<String, String> zonesPictures;
+
+ protected Map<String, String> zonesMetaInfo;
+
+ public void setFacade(String facade) {
+ this.facade = facade;
+ }
+
+ public Map<String, String> getZones() {
+ return zones;
+ }
+
+ public Map<String, String> getZonesPictures() {
+ return zonesPictures;
+ }
+
+ public Map<String, String> getZonesMetaInfo() {
+ return zonesMetaInfo;
+ }
+
+ @Override
+ public String execute() {
+
+ WebService webService = ServiceFactory.getWebService();
+
+ try {
+ // renvoi la liste des id subzone-survey et leurs label associé
+ zones = webService.getZoneForFacade(facade);
+ zonesPictures = webService.getZonePictures();
+ zonesMetaInfo = webService.getZoneMetaInfo();
+ } catch (CoserBusinessException ex) {
+ throw new CoserWebException("Can't get zone map", ex);
+ }
+
+ return SUCCESS;
+ }
+}
Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/common/CommonZone.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/FacadeAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/FacadeAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/FacadeAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -22,15 +22,8 @@
package fr.ifremer.coser.web.actions.map;
-import java.util.Map;
+import fr.ifremer.coser.web.actions.common.CommonFacade;
-import com.opensymphony.xwork2.ActionSupport;
-
-import fr.ifremer.coser.CoserBusinessException;
-import fr.ifremer.coser.services.WebService;
-import fr.ifremer.coser.web.CoserWebException;
-import fr.ifremer.coser.web.ServiceFactory;
-
/**
* Action index, affiche la liste des facades majeures.
*
@@ -40,29 +33,9 @@
* Last update : $Date$
* By : $Author$
*/
-public class FacadeAction extends ActionSupport {
+public class FacadeAction extends CommonFacade {
/** serialVersionUID. */
private static final long serialVersionUID = 3385467755357775199L;
- protected Map<String, String> facades;
-
- public Map<String, String> getFacades() {
- return facades;
- }
-
- @Override
- public String execute() {
-
- WebService webService = ServiceFactory.getWebService();
- try {
- // renvoi la liste des facadeid et leur label associé
- facades = webService.getFacades();
-
- } catch (CoserBusinessException ex) {
- throw new CoserWebException("Can't get zone map", ex);
- }
-
- return SUCCESS;
- }
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -38,16 +38,16 @@
/** serialVersionUID. */
private static final long serialVersionUID = 1663244944108703571L;
- protected String zone;
+ protected String survey;
protected String species;
- public String getZone() {
- return zone;
+ public String getSurvey() {
+ return survey;
}
- public void setZone(String zone) {
- this.zone = zone;
+ public void setSurvey(String survey) {
+ this.survey = survey;
}
public String getSpecies() {
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/MapDataAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -51,16 +51,16 @@
/** serialVersionUID. */
private static final long serialVersionUID = 1663244944108703571L;
- protected String zone;
+ protected String survey;
protected String species;
- public String getZone() {
- return zone;
+ public String getSurvey() {
+ return survey;
}
- public void setZone(String zone) {
- this.zone = zone;
+ public void setSurvey(String survey) {
+ this.survey = survey;
}
public String getSpecies() {
@@ -81,7 +81,7 @@
InputStream input = null;
try {
- File mapImage = webService.getMapFile(zone, species);
+ File mapImage = webService.getMapFile(survey, species);
input = new FileInputStream(mapImage);
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't get map file", ex);
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SpeciesAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SpeciesAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SpeciesAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -35,7 +35,7 @@
import fr.ifremer.coser.web.ServiceFactory;
/**
- * Action index, recupere la liste des resultats.
+ * Recupere la liste des especes correspondant a une campagne.
*
* @author chatellier
* @version $Revision$
@@ -50,16 +50,16 @@
private static final Log log = LogFactory.getLog(SpeciesAction.class);
- protected String zone;
+ protected String survey;
protected Map<String, String> species;
- public String getZone() {
- return zone;
+ public String getSurvey() {
+ return survey;
}
- public void setZone(String zone) {
- this.zone = zone;
+ public void setSurvey(String survey) {
+ this.survey = survey;
}
public Map<String, String> getSpecies() {
@@ -70,13 +70,13 @@
public String execute() {
if (log.isInfoEnabled()) {
- log.info("Looking for species for zone " + zone);
+ log.info("Looking for species for survey " + survey);
}
WebService webService = ServiceFactory.getWebService();
try {
- species = webService.getSpecies(zone);
+ species = webService.getSpeciesForSurvey(survey);
if (log.isDebugEnabled()) {
log.debug("Species are : " + species);
Copied: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SurveyAction.java (from rev 500, trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java)
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SurveyAction.java (rev 0)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/SurveyAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -0,0 +1,76 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+package fr.ifremer.coser.web.actions.map;
+
+import java.util.Map;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.services.WebService;
+import fr.ifremer.coser.web.CoserWebException;
+import fr.ifremer.coser.web.ServiceFactory;
+
+/**
+ * Affiche la liste des sous zones (zone).
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class SurveyAction extends ActionSupport {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 3385467755357775199L;
+
+ protected String facade;
+
+ public void setFacade(String facade) {
+ this.facade = facade;
+ }
+
+ protected Map<String, String> surveys;
+
+ public Map<String, String> getSurveys() {
+ return surveys;
+ }
+
+ @Override
+ public String execute() {
+
+ WebService webService = ServiceFactory.getWebService();
+ try {
+
+ // renvoie la liste des id subzone-survey et leurs label
+ // associé
+ surveys = webService.getSurveyForFacade(facade);
+
+ } catch (CoserBusinessException ex) {
+ throw new CoserWebException("Can't get zone map", ex);
+ }
+
+ return SUCCESS;
+ }
+}
Deleted: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/map/ZoneAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -1,76 +0,0 @@
-/*
- * #%L
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * #L%
- */
-
-package fr.ifremer.coser.web.actions.map;
-
-import java.util.Map;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-import fr.ifremer.coser.CoserBusinessException;
-import fr.ifremer.coser.services.WebService;
-import fr.ifremer.coser.web.CoserWebException;
-import fr.ifremer.coser.web.ServiceFactory;
-
-/**
- * Affiche la liste des sous zones (zone).
- *
- * @author chatellier
- * @version $Revision$
- *
- * Last update : $Date$
- * By : $Author$
- */
-public class ZoneAction extends ActionSupport {
-
- /** serialVersionUID. */
- private static final long serialVersionUID = 3385467755357775199L;
-
- protected String facade;
-
- public void setFacade(String facade) {
- this.facade = facade;
- }
-
- protected Map<String, String> zones;
-
- public Map<String, String> getZones() {
- return zones;
- }
-
- @Override
- public String execute() {
-
- WebService webService = ServiceFactory.getWebService();
- try {
-
- // renvoi la liste des id subzone-survey et leurs label
- // associé
- zones = webService.getZoneForFacade(facade);
-
- } catch (CoserBusinessException ex) {
- throw new CoserWebException("Can't get zone map", ex);
- }
-
- return SUCCESS;
- }
-}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/IndicatorAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -22,19 +22,8 @@
package fr.ifremer.coser.web.actions.pop;
-import java.util.Locale;
-import java.util.Map;
+import fr.ifremer.coser.web.actions.common.CommonIndicator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-import fr.ifremer.coser.CoserBusinessException;
-import fr.ifremer.coser.services.WebService;
-import fr.ifremer.coser.web.CoserWebException;
-import fr.ifremer.coser.web.ServiceFactory;
-
/**
* Action index, recupere la liste des resultats.
*
@@ -44,57 +33,9 @@
* Last update : $Date$
* By : $Author$
*/
-public class IndicatorAction extends ActionSupport {
+public class IndicatorAction extends CommonIndicator {
/** serialVersionUID. */
private static final long serialVersionUID = 1663244944108703571L;
- private static final Log log = LogFactory.getLog(IndicatorAction.class);
-
- protected String zone;
-
- protected String species;
-
- protected Map<String, String> indicators;
-
- public String getZone() {
- return zone;
- }
-
- public void setZone(String zone) {
- this.zone = zone;
- }
-
- public String getSpecies() {
- return species;
- }
-
- public void setSpecies(String species) {
- this.species = species;
- }
-
- public Map<String, String> getIndicators() {
- return indicators;
- }
-
- @Override
- public String execute() {
-
- if (log.isInfoEnabled()) {
- log.info(String.format("Looking for indicator for zone %s and species %s", zone, species));
- }
-
- WebService webService = ServiceFactory.getWebService();
-
- Locale locale = getLocale();
- String localeCode = locale.getLanguage();
-
- try {
- indicators = webService.getIndicators(zone, species, localeCode);
- } catch (CoserBusinessException ex) {
- throw new CoserWebException("Can't get indicators", ex);
- }
-
- return SUCCESS;
- }
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/SpeciesAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -54,6 +54,8 @@
protected Map<String, String> species;
+ protected String zonePicture;
+
public String getZone() {
return zone;
}
@@ -66,6 +68,10 @@
return species;
}
+ public String getZonePicture() {
+ return zonePicture;
+ }
+
@Override
public String execute() {
@@ -77,7 +83,9 @@
try {
species = webService.getSpecies(zone);
-
+
+ zonePicture = webService.getZonePictures().get(zone);
+
if (log.isDebugEnabled()) {
log.debug("Species are : " + species);
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -22,15 +22,8 @@
package fr.ifremer.coser.web.actions.pop;
-import java.util.Map;
+import fr.ifremer.coser.web.actions.common.CommonZone;
-import com.opensymphony.xwork2.ActionSupport;
-
-import fr.ifremer.coser.CoserBusinessException;
-import fr.ifremer.coser.services.WebService;
-import fr.ifremer.coser.web.CoserWebException;
-import fr.ifremer.coser.web.ServiceFactory;
-
/**
* Affiche la liste des sous zones (zone).
*
@@ -40,49 +33,8 @@
* Last update : $Date$
* By : $Author$
*/
-public class ZoneAction extends ActionSupport {
+public class ZoneAction extends CommonZone {
/** serialVersionUID. */
private static final long serialVersionUID = 3385467755357775199L;
-
- protected String facade;
-
- protected Map<String, String> zones;
-
- protected Map<String, String> zonesPictures;
-
- protected Map<String, String> zonesMetaInfo;
-
- public void setFacade(String facade) {
- this.facade = facade;
- }
-
- public Map<String, String> getZones() {
- return zones;
- }
-
- public Map<String, String> getZonesPictures() {
- return zonesPictures;
- }
-
- public Map<String, String> getZonesMetaInfo() {
- return zonesMetaInfo;
- }
-
- @Override
- public String execute() {
-
- WebService webService = ServiceFactory.getWebService();
-
- try {
- // renvoi la liste des id subzone-survey et leurs label associé
- zones = webService.getZoneForFacade(facade);
- zonesPictures = webService.getZonePictures();
- zonesMetaInfo = webService.getZoneMetaInfo();
- } catch (CoserBusinessException ex) {
- throw new CoserWebException("Can't get zone map", ex);
- }
-
- return SUCCESS;
- }
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/FacadeAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/FacadeAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/FacadeAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -22,15 +22,8 @@
package fr.ifremer.coser.web.actions.source;
-import java.util.Map;
+import fr.ifremer.coser.web.actions.common.CommonFacade;
-import com.opensymphony.xwork2.ActionSupport;
-
-import fr.ifremer.coser.CoserBusinessException;
-import fr.ifremer.coser.services.WebService;
-import fr.ifremer.coser.web.CoserWebException;
-import fr.ifremer.coser.web.ServiceFactory;
-
/**
* Action index, affiche la liste des facades majeures.
*
@@ -40,29 +33,9 @@
* Last update : $Date$
* By : $Author$
*/
-public class FacadeAction extends ActionSupport {
+public class FacadeAction extends CommonFacade {
/** serialVersionUID. */
- private static final long serialVersionUID = 3385467755357775199L;
+ private static final long serialVersionUID = 4252429273272803414L;
- protected Map<String, String> facades;
-
- public Map<String, String> getFacades() {
- return facades;
- }
-
- @Override
- public String execute() {
-
- WebService webService = ServiceFactory.getWebService();
- try {
- // renvoi la liste des facadeid et leur label associé
- facades = webService.getFacades();
-
- } catch (CoserBusinessException ex) {
- throw new CoserWebException("Can't get zone map", ex);
- }
-
- return SUCCESS;
- }
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/SourceAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -22,8 +22,15 @@
package fr.ifremer.coser.web.actions.source;
+import java.util.Locale;
+
import com.opensymphony.xwork2.ActionSupport;
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.services.WebService;
+import fr.ifremer.coser.web.CoserWebException;
+import fr.ifremer.coser.web.ServiceFactory;
+
/**
* Affiche les liens de téléchargement du zip pour le projet choisit.
*
@@ -40,6 +47,8 @@
protected String zone;
+ protected String zonePicture;
+
public String getZone() {
return zone;
}
@@ -48,9 +57,21 @@
this.zone = zone;
}
+ public String getZonePicture() {
+ return zonePicture;
+ }
+
@Override
public String execute() {
+ WebService webService = ServiceFactory.getWebService();
+
+ try {
+ zonePicture = webService.getZonePictures().get(zone);
+ } catch (CoserBusinessException ex) {
+ throw new CoserWebException("Can't get zone picture", ex);
+ }
+
return SUCCESS;
}
}
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/source/ZoneAction.java 2011-01-17 17:03:28 UTC (rev 519)
@@ -22,15 +22,8 @@
package fr.ifremer.coser.web.actions.source;
-import java.util.Map;
+import fr.ifremer.coser.web.actions.common.CommonZone;
-import com.opensymphony.xwork2.ActionSupport;
-
-import fr.ifremer.coser.CoserBusinessException;
-import fr.ifremer.coser.services.WebService;
-import fr.ifremer.coser.web.CoserWebException;
-import fr.ifremer.coser.web.ServiceFactory;
-
/**
* Affiche la liste des sous zones (zone).
*
@@ -40,37 +33,9 @@
* Last update : $Date$
* By : $Author$
*/
-public class ZoneAction extends ActionSupport {
+public class ZoneAction extends CommonZone {
/** serialVersionUID. */
private static final long serialVersionUID = 3385467755357775199L;
- protected String facade;
-
- public void setFacade(String facade) {
- this.facade = facade;
- }
-
- protected Map<String, String> zones;
-
- public Map<String, String> getZones() {
- return zones;
- }
-
- @Override
- public String execute() {
-
- WebService webService = ServiceFactory.getWebService();
- try {
-
- // renvoi la liste des id subzone-survey et leurs label
- // associé
- zones = webService.getZoneForFacade(facade);
-
- } catch (CoserBusinessException ex) {
- throw new CoserWebException("Can't get zone map", ex);
- }
-
- return SUCCESS;
- }
}
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-17 17:03:28 UTC (rev 519)
@@ -31,23 +31,87 @@
message.index.paragraph3=Chaque s\u00E9rie de campagnes est conduite selon une strat\u00E9gie d''\u00E9chantillonnage sp\u00E9cifique. Sauf cas particuliers, les analyses et interpr\u00E9tations doivent \u00EAtre conduites par s\u00E9rie, en prenant en compte les strat\u00E9gies d''\u00E9chantillonnage propres \u00E0 chacune de ces s\u00E9ries. Sur le site, les donn\u00E9es sont pr\u00E9sent\u00E9es par s\u00E9rie.
message.index.paragraph4=Dans les tables de donn\u00E9es, toutes les esp\u00E8ces sont identifi\u00E9es selon le r\u00E9f\u00E9rentiel taxinomique du Syst\u00E8me d''informations halieutiques de l''Ifremer ({0}).
message.index.datatypetitle=Quatre types de donn\u00E9es sont pr\u00E9sent\u00E9es
-message.index.datatype1=Des donn\u00E9es par op\u00E9ration d''\u00E9chantillonnage (en g\u00E9n\u00E9ral par trait de chalut)
-message.index.datatype2=Des cartes de distribution par esp\u00E8ce et par zone
-message.index.datatype3=Des indices biologiques par esp\u00E8ce et par zone
-message.index.datatype4=Des indices de communaut\u00E9 par zone.
+message.index.datatypesource=Des donn\u00E9es par op\u00E9ration d''\u00E9chantillonnage (en g\u00E9n\u00E9ral par trait de chalut)
+message.index.datatypemap=Des cartes de distribution par esp\u00E8ce et par zone
+message.index.datatypepop=Des indices biologiques par esp\u00E8ce et par zone
+message.index.datatypecom=Des indices de communaut\u00E9 par zone.
message.index.quotetitle=Pour citer ce site
message.index.quotemessage=Ifremer {0,date,yyyy}. Indices de populations et de communautés issus des campagnes de surveillance halieutique de l''Ifremer. {1} ({0,date,dd MMMM})
message.index.qualitytitle=Avertissement qualit\u00E9
message.index.qualitymessage=Avertissement qualit\u00E9
-message.quality.title=Avertissement qualit\u00E9
+message.index.surveytitle=Description des campagnes
+message.index.surveyparagraph=Des manuels des protocoles d\u00E9crivent les modalit\u00E9s techniques de r\u00E9alisation de chaque s\u00E9rie de campagnes.
+message.common.selectpop=Select a population
+message.common.selectzone=Select a zone
+message.common.selectfacade=Select a facade
+message.common.selectindicator=Select an indicator
+message.common.noresults=No results available
+message.common.selectspecies=Select a species
+message.source.download=Download
+message.survey.maintitle=Les campagnes de surveillance halieutique de l''Ifremer
+message.survey.paragraph1=Les campagnes de p\u00EAche scientifique standardis\u00E9es ont pour objectif d''observer les ressources halieutiques, en suivant toujours les m\u00EAmes m\u00E9thodes d\u2019\u00E9chantillonnage. Elles sont toujours r\u00E9alis\u00E9es dans la m\u00EAme zone, \u00E0 la m\u00EAme saison, avec des engins de p\u00EAche standardis\u00E9s, afin que les donn\u00E9es soient comparables d''ann\u00E9e en ann\u00E9e. Elles servent \u00E0 d\u00E9crire les esp\u00E8ces, qu''elles soient commerciales ou non, d\'une zone et \u00E0 observer les changements s\u2019il y en a. Les poissons, les mollusques et les crustac\u00E9s sont d\u00E9nombr\u00E9s, mesur\u00E9s et pes\u00E9s. Certains d\'entre eux font l''objet de pr\u00E9l\u00E8vements biologiques. Chaque campagne fournit ainsi une repr\u00E9sentation quantitative de l''ensemble des esp\u00E8ces de la zone \u00E0 une p\u00E9riode donn\u00E9e. Selon les s\u00E9ries, d'''autres informations sont relev\u00E9es (temp\u00E9rature, salinit\u00E9, macrofaune, observation des mammif\u00E8res marins, oiseaux, macro d\u00E9chets etc., mais ne sont pas pr\u00E9sent\u00E9es dans ce site)
+message.survey.paragraph2=Depuis une vingtaine d''ann\u00E9es, l''Ifremer organise des campagnes de p\u00EAche scientifique en mer du Nord, en Manche, en Atlantique et en M\u00E9diterran\u00E9e concernant les ressources d\u00E9mersales et benthiques. L''objectif prioritaire est de produire des indices d''abondance des principales esp\u00E8ces commerciales. Elles recueillent \u00E9galement des donn\u00E9es sur les esp\u00E8ces captur\u00E9es non commerciales. Elles contribuent ainsi aux connaissances n\u00E9cessaires au d\u00E9veloppement de l''approche \u00E9cosyst\u00E9mique des p\u00EAches, notamment dans le cadre de la politique commune des p\u00EAches et plus largement de la strat\u00E9gie marine de l''Union europ\u00E9enne.
+message.survey.dataengintitle=Diff\u00E9rents engins d''\u00E9chantillonnage sont utilis\u00E9s :
+message.survey.dataenginfond=Un chalut de fond \u00E0 grande ouverture verticale pour l''observation des ressources d\u00E9mersales, sur les plateaux continentaux et le haut des pentes continentales (accores) en mer du Nord, Manche orientale, mer Celtique, golfe de Gascogne, golfe du Lion et Est de la Corse,
+message.survey.dataenginperche=Un chalut \u00E0 perche pour les zones tr\u00E8s c\u00F4ti\u00E8res et les estuaires lors des campagnes visant les juv\u00E9niles de poissons plats : baies de Somme et de Vilaine,
+message.survey.dataengincasier=Un \u00E9chantillonnage au casier pour les campagnes d''\u00E9valuation des grands crustac\u00E9s, en particulier le homard, aux abords du cap de Flamanville.
+message.survey.paragraph3=Les campagnes sont r\u00E9alis\u00E9es selon des plans d''\u00E9chantillonnage standardis\u00E9s. L\u2019engin de p\u00EAche et son gr\u00E9ement, la position des stations, le tri des captures, les pr\u00E9l\u00E8vements biologiques suivent des protocoles fix\u00E9s.
+message.survey.paragraph4=Pour les campagnes coordonn\u00E9es entre navires de recherche des pays riverains en mer du Nord, Manche orientale, mer Celtique, golfe de Gascogne et M\u00E9diterran\u00E9e, les protocoles sont communs \u00E0 l''ensemble des pays partenaires. Les traits de chalut des diff\u00E9rents navires de recherche sont comparables.
+message.survey.paragraph5=Chaque zone \u00E9tudi\u00E9e est d\u00E9coup\u00E9e en strates en fonction de la profondeur, de la latitude ou d''autres crit\u00E8res. L''\u00E9chantillonnage pr\u00E9voit un nombre de traits de chalut ou de mouillages de casiers par strate.
+message.survey.paragraph6=Dans une campagne de chalutage scientifique, les positions des traits de chalut sont choisies selon un plan d''\u00E9chantillonnage statistique. L''objectif n''est pas d''obtenir les meilleures captures possibles comme le recherchent les p\u00EAcheurs, mais de r\u00E9colter des donn\u00E9es comparables d''une ann\u00E9e sur l''autre afin de relever des \u00E9volutions.
+message.survey.detailstitle=Caract\u00E9ristiques des campagnes de surveillance halieutique de l''Ifremer
+message.survey.merdunord=Fa\u00E7ade Mer du Nord
+message.survey.merdunord.sudmerdunord=Sud mer du Nord
+message.survey.merdunord.sudmerdunord.desc=Contribution fran\u00E7aise d''un mois \u00E0 la campagne internationale IBTS (International Bottom Trawl Survey) au premier trimestre, tous les ans depuis 1980, au chalut de fond \u00E0 grande ouverture verticale. En moyenne, le navire fran\u00E7ais fait 58 chalutages par an. Le sud de la mer du Nord est couvert par 4 navires (fran\u00E7ais, belge, danois et allemand) qui r\u00E9alisent en tout environ 200 traits par an. Chaque trait dure une demi-heure et couvre une surface d\'environ 0,067 km\u00B2. Cette campagne est repr\u00E9sentative des 678\u00A0000\u00A0km\u00B2 de la zone.
+message.survey.merdunord.sudmerdunord.plus=Pour en savoir plus sur les campagnes IBTS
+message.survey.merdunord.sudmerdunord.ibts6=Manuel des protocoles IBTS - R\u00E9vision VI (1999)
+message.survey.merdunord.sudmerdunord.ibts7=Manuel des protocoles IBTS - R\u00E9vision VII (2004)
+message.survey.mancheorientale=Fa\u00E7ade Manche orientale
+message.survey.mancheorientale.mancheorientale=Manche orientale
+message.survey.mancheorientale.mancheorientale.desc=Campagne fran\u00E7aise CGFS (Channel Ground Fish Survey) d''un mois en octobre, coordonn\u00E9e au plan international avec les campagnes IBTS. La campagne a lieu tous les ans depuis 1988. En moyenne 90 traits d''une demi-heure, au chalut de fond \u00E0 grande ouverture verticale, sont r\u00E9alis\u00E9s. Chaque trait couvre une surface d''environ 0,03 km\u00B2. Cette campagne est repr\u00E9sentative des 70 748 km\u00B2 de la Manche orientale.
+message.survey.mancheorientale.mancheorientale.plus=Pour en savoir plus sur les campagnes CGFS
+message.survey.mancheorientale.mancheorientale.cgfs1=Manuel des protocoles CGFS - Version 1.0 (2002)
+message.survey.mancheorientale.baiedesomme=Baie de Somme
+message.survey.mancheorientale.baiedesomme.desc=Campagne de p\u00EAche sur la nourricerie de la baie de Somme (NourSomme) d''une semaine en septembre-octobre, tous les ans depuis 1995, aux chaluts \u00E0 perche de 2 m\u00E8tres de large dans la partie la plus estuarienne de la baie et 3 m\u00E8tres dans la partie externe, plus marine. En moyenne 50 chalutages sont r\u00E9alis\u00E9s chaque ann\u00E9e. Ils durent en moyenne 7 minutes sur une surface de 0,001 km\u00B2 chacun dans la partie interne de la baie et 15 minutes sur une surface d''environ 0,004 km\u00B2 dans la partie externe. Cette campagne est repr\u00E9sentative des 720 km\u00B2 de la baie.
+message.survey.mancheorientale.baiedesomme.plus=Pour en savoir plus sur les campagnes NourSomme
+message.survey.mancheorientale.baiedesomme.noursomme1=Manuel des protocoles Nourriceries Somme - V 1.0 (2002)
+message.survey.mancheoccidentale=Fa\u00E7ade Manche occidentale
+message.survey.mancheoccidentale.flamanville=Abords du cap de Flamanville
+message.survey.mancheoccidentale.flamanville.desc=Deux campagnes de 15 jours aux casiers \u00E0 crustac\u00E9s aux abords du cap de Flamanville (CrustaFlam), en juin et septembre, depuis 1986 : 1200 casiers relev\u00E9s par campagne sur une zone de 26 km\u00B2.
+message.survey.mancheoccidentale.flamanville.plus=Pour en savoir plus sur les campagnes CrustFlam
+message.survey.mancheoccidentale.flamanville.crustaflam1=Manuel des protocoles CRUSTAFLAM - Version 1.0 (2003)
+message.survey.atlantique=Fa\u00E7ade Atlantique
+message.survey.atlantique.celtique=Mer Celtique
+message.survey.atlantique.celtique.desc=Campagne Evhoe (Evaluation des ressources halieutiques de l''ouest europ\u00E9en) d''un mois au quatri\u00E8me trimestre, tous les ans depuis 1997. En moyenne 75 traits d''une demi-heure, au chalut de fond \u00E0 grande ouverture verticale, sont r\u00E9alis\u00E9s. Chaque trait couvre une surface d''environ 0,067 km\u00B2. Cette campagne est repr\u00E9sentative des 150 000 km\u00B2 de la mer Celtique.
+message.survey.atlantique.celtique.plus=Pour en savoir plus sur les campagnes Evhoe
+message.survey.atlantique.celtique.evhoe1=Manuel des protocoles EVHOE - Version 1.0 (2005)
+message.survey.atlantique.gascogne=Golfe de Gascogne
+message.survey.atlantique.gascogne.desc=Campagne Evhoe (Evaluation des ressources halieutiques de l''ouest europ\u00E9en) d''un mois au quatri\u00E8me trimestre, tous les ans depuis 1992 (sauf en 1993 et 1996). En moyenne, 70 traits de chalut d''une demi-heure au chalut de fond \u00E0 grande ouverture verticale, sont r\u00E9alis\u00E9s. Chaque trait couvre une surface de 0,067 km\u00B2. Cette campagne est repr\u00E9sentative des 72 500 km\u00B2 du golfe de Gascogne. La campagne Evhoe couvre donc le golfe de Gascogne et la mer Celtique avec le m\u00EAme protocole. De plus elle est coordonn\u00E9e internationalement, dans le cadre des campagnes IBTS, avec une campagne espagnole en mer Cantabrique, une campagne irlandaise et une campagne anglaise en mer Celtique.
+message.survey.atlantique.gascogne.plus=Pour en savoir plus sur les campagnes Evhoe
+message.survey.atlantique.gascogne.evhoe1=Manuel des protocoles EVHOE - Version 1.0 (2005)
+message.survey.atlantique.vilaine=Baie de Vilaine
+message.survey.atlantique.vilaine.desc=Campagne sur la nourricerie de la baie de Vilaine (NourVil), d''une semaine \u00E0 l''automne, tous les ans de 1980 \u00E0 2010, sauf en 1991, 1994, 1995, 1998, 1999, 2006 et 2007, au chalut \u00E0 perche de 3 m\u00E8tres de large. En moyenne, 30 chalutages de 15 minutes sont r\u00E9alis\u00E9s. Chaque trait couvre une surface d\'environ 0,0041 km\u00B2. Cette campagne est repr\u00E9sentative des 330 km\u00B2 de la baie.
+message.survey.atlantique.vilaine.plus=Pour en savoir plus sur les campagnes Nourvil
+message.survey.atlantique.vilaine.nourvil1=Manuel des protocoles Nourriceries Gascogne - V 1.0 (2002)
+message.survey.mediterranee=Fa\u00E7ade M\u00E9diterran\u00E9e
+message.survey.mediterranee.golfelion=Golfe du Lion
+message.survey.mediterranee.golfelion.desc=Contribution fran\u00E7aise aux campagnes internationales Medits (International bottom Trawl Surveys in the Mediterranean), d''un mois au deuxi\u00E8me trimestre tous les ans depuis 1994 au chalut de fond \u00E0 grande ouverture verticale \u00E0 ailes courtes. En moyenne 69 chalutages sont r\u00E9alis\u00E9s, d''une demi-heure couvrant une surface d''environ 0,05 km\u00B2 chacun pour les profondeurs inf\u00E9rieures \u00E0 200 m\u00E8tres et d''une heure (surface d''environ 0,1\u00A0km\u00B2) pour les profondeurs sup\u00E9rieures \u00E0 200 m\u00E8tres. Medits est repr\u00E9sentative des 13 860 km\u00B2 du golfe de Lion.
+message.survey.mediterranee.golfelion.plus=Pour en savoir plus sur les campagnes Medits
+message.survey.mediterranee.golfelion.medits1=Manuel des protocoles Medits, Version 1 (1994)
+message.survey.mediterranee.golfelion.medits2=Manuel des protocoles Medits, Version 2 (1995)
+message.survey.mediterranee.golfelion.medits3=Manuel des protocoles Medits, Version 3 (1999)
+message.survey.mediterranee.golfelion.medits4=Manuel des protocoles Medits, Version 4 (2001)
+message.survey.mediterranee.golfelion.medits5=Manuel des protocoles Medits, Version 5 (2007)
+message.survey.mediterranee.estcorse=Est de la Corse
+message.survey.mediterranee.estcorse.desc=Contribution fran\u00E7aise \u00E0 la campagne internationale Medits (International bottom Trawl Surveys in the Mediterranean), d''une semaine au printemps, tous les ans depuis 1994, sauf en 2002, au chalut de fond \u00E0 grande ouverture verticale \u00E0 ailes courtes. En moyenne 20 chalutages sont r\u00E9alis\u00E9s, d''une demi-heure couvrant une surface d''environ 0,05 km\u00B2 chacun pour les profondeurs inf\u00E9rieures \u00E0 200 m\u00E8tres et d\'une heure (surface d\'environ 0,1\u00A0km\u00B2) pour les profondeurs sup\u00E9rieures \u00E0 200 m\u00E8tres. La campagne est repr\u00E9sentative des 4 562 km\u00B2 du plateau insulaire de l\'est de la Corse.
+message.survey.mediterranee.estcorse.plus=Pour en savoir plus sur les campagnes Medits
+message.survey.mediterranee.estcorse.medits1=Manuel des protocoles Medits, Version 1 (1994)
+message.survey.mediterranee.estcorse.medits2=Manuel des protocoles Medits, Version 2 (1995)
+message.survey.mediterranee.estcorse.medits3=Manuel des protocoles Medits, Version 3 (1999)
+message.survey.mediterranee.estcorse.medits4=Manuel des protocoles Medits, Version 4 (2001)
+message.survey.mediterranee.estcorse.medits5=Manuel des protocoles Medits, Version 5 (2007)
message.quality.paragraph1=Bien que les donn\u00E9es aient \u00E9t\u00E9 pr\u00E9cautionneusement contr\u00F4l\u00E9es par l''Ifremer, des d\u00E9fauts inh\u00E9rents \u00E0 l''agr\u00E9gation des informations peuvent persister. Par exemple\u00A0:
message.quality.paragraph2=En d\u00E9pit du fait que toutes les donn\u00E9es de toutes les s\u00E9ries de campagnes soient pr\u00E9sent\u00E9es selon le m\u00EAme format, sauf cas particuliers des diff\u00E9rences dans les strat\u00E9gies d''observation emp\u00EAchent la combinaison de donn\u00E9es de diff\u00E9rentes campagnes dans une m\u00EAme analyse. Par exemple, la capturabilit\u00E9 d\'une m\u00EAme esp\u00E8ce varie selon le type d''engin d''\u00E9chantillonnage utilis\u00E9. Il en r\u00E9sulte que chaque engin capture un sous-ensemble particulier des bioc\u00E9noses \u00E9chantillonn\u00E9es.
message.quality.paragraph3=Une propri\u00E9t\u00E9 commune aux s\u00E9ries d''observations \u00E0 la mer est l''\u00E9volution dans le temps de la comp\u00E9tence des \u00E9quipes embarqu\u00E9es pour la d\u00E9termination des esp\u00E8ces. Il peut en r\u00E9sulter des apparitions, des disparitions ou des assignations sous un m\u00EAme nom de taxons proches dans les jeux de donn\u00E9es, non repr\u00E9sentatifs de l''\u00E9volution des populations concern\u00E9es dans l''\u00E9cosyst\u00E8me.
message.quality.paragraph4=Pour les campagnes d\'une m\u00EAme s\u00E9rie, des changements dans les proc\u00E9dures d''\u00E9chantillonnage, dans les caract\u00E9ristiques des engins, dans la p\u00E9riode de r\u00E9alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr\u00E9venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn\u00E9es doivent \u00EAtre pr\u00E9alablement filtr\u00E9s ad\u00E9quatement.
message.quality.paragraph5=Il est vivement recommand\u00E9 aux utilisateurs de donn\u00E9es de les traiter avec pr\u00E9caution. Si des utilisateurs s''interrogent sur la validit\u00E9 de donn\u00E9es, ils sont invit\u00E9s \u00E0 contacter l''administrateur de la base de donn\u00E9es ({0}).
-message.common.selectpop=Select a population
-message.common.selectzone=Select a zone
-message.common.selectfacade=Select a facade
-message.common.selectindicator=Select an indicator
-message.source.download=Download
-message.common.noresults=No results available
\ No newline at end of file
Deleted: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties 2011-01-17 17:03:28 UTC (rev 519)
@@ -1,52 +0,0 @@
-###
-# #%L
-# Coser :: Web
-#
-# $Id$
-# $HeadURL$
-# %%
-# Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
-# %%
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# #L%
-###
-message.layout.title=Populations and communities indices, resulting from Ifremer monitoring halieutics survey
-message.layout.oceanicdatatitle=Gestion des donn\u00E9es des campagnes oc\u00E9anographiques
-message.layout.oceanicdata1=le Syst\u00E8me d'informations scientifiques pour la mer de l'Ifremer (SISMER)
-message.layout.oceanicdata2=le Syst\u00E8me d'information halieutique de l'Ifremer (SIH)
-message.index.title=Home
-message.index.paragraph1=Ce site a \u00E9t\u00E9 con\u00E7u pour fournir en libre acc\u00E8s des donn\u00E9es brutes et des donn\u00E9es \u00E9labor\u00E9es relatives aux campagnes scientifiques d''observation halieutique conduites par l''Ifremer le long des c\u00F4tes fran\u00E7aises.
-message.index.paragraph2=Toutes les donn\u00E9es mises \u00E0 disposition ont fait l''objet de qualification selon des protocoles sp\u00E9cifiques. La qualit\u00E9 des interpr\u00E9tations \u00E9tant directement li\u00E9e \u00E0 la nature des donn\u00E9es source, les utilisateurs de donn\u00E9es sont invit\u00E9s \u00E0 consid\u00E9rer avec attention les descriptions des protocoles mis en \u0153uvre ainsi que les niveaux de qualit\u00E9 contr\u00F4l\u00E9s.
-message.index.paragraph3=Chaque s\u00E9rie de campagnes est conduite selon une strat\u00E9gie d''\u00E9chantillonnage sp\u00E9cifique. Sauf cas particuliers, les analyses et interpr\u00E9tations doivent \u00EAtre conduites par s\u00E9rie, en prenant en compte les strat\u00E9gies d''\u00E9chantillonnage propres \u00E0 chacune de ces s\u00E9ries. Sur le site, les donn\u00E9es sont pr\u00E9sent\u00E9es par s\u00E9rie.
-message.index.paragraph4=Dans les tables de donn\u00E9es, toutes les esp\u00E8ces sont identifi\u00E9es selon le r\u00E9f\u00E9rentiel taxinomique du Syst\u00E8me d''informations halieutiques de l''Ifremer ({0}).
-message.index.datatypetitle=Quatre types de donn\u00E9es sont pr\u00E9sent\u00E9es
-message.index.datatype1=Des donn\u00E9es par op\u00E9ration d''\u00E9chantillonnage (en g\u00E9n\u00E9ral par trait de chalut)
-message.index.datatype2=Des cartes de distribution par esp\u00E8ce et par zone
-message.index.datatype3=Des indices biologiques par esp\u00E8ce et par zone
-message.index.datatype4=Des indices de communaut\u00E9 par zone.
-message.index.quotetitle=Pour citer ce site
-message.index.quotemessage=Ifremer {0,date,yyyy}. Indices de populations et de communautés issus des campagnes de surveillance halieutique de l''Ifremer. {1} ({0,date,dd MMMM})
-message.index.qualitytitle=Avertissement qualit\u00E9
-message.index.qualitymessage=Avertissement qualit\u00E9
-message.common.selectpop=Select a population
-message.common.selectzone=Select a zone
-message.common.selectfacade=Select a facade
-message.common.selectindicator=Select an indicator
-message.common.noresults=No results available
-message.source.download=Download
-message.quality.paragraph1=Bien que les donn\u00E9es aient \u00E9t\u00E9 pr\u00E9cautionneusement contr\u00F4l\u00E9es par l''Ifremer, des d\u00E9fauts inh\u00E9rents \u00E0 l''agr\u00E9gation des informations peuvent persister. Par exemple\u00A0:
-message.quality.paragraph2=En d\u00E9pit du fait que toutes les donn\u00E9es de toutes les s\u00E9ries de campagnes soient pr\u00E9sent\u00E9es selon le m\u00EAme format, sauf cas particuliers des diff\u00E9rences dans les strat\u00E9gies d''observation emp\u00EAchent la combinaison de donn\u00E9es de diff\u00E9rentes campagnes dans une m\u00EAme analyse. Par exemple, la capturabilit\u00E9 d\'une m\u00EAme esp\u00E8ce varie selon le type d''engin d''\u00E9chantillonnage utilis\u00E9. Il en r\u00E9sulte que chaque engin capture un sous-ensemble particulier des bioc\u00E9noses \u00E9chantillonn\u00E9es.
-message.quality.paragraph3=Une propri\u00E9t\u00E9 commune aux s\u00E9ries d''observations \u00E0 la mer est l''\u00E9volution dans le temps de la comp\u00E9tence des \u00E9quipes embarqu\u00E9es pour la d\u00E9termination des esp\u00E8ces. Il peut en r\u00E9sulter des apparitions, des disparitions ou des assignations sous un m\u00EAme nom de taxons proches dans les jeux de donn\u00E9es, non repr\u00E9sentatifs de l''\u00E9volution des populations concern\u00E9es dans l''\u00E9cosyst\u00E8me.
-message.quality.paragraph4=Pour les campagnes d\'une m\u00EAme s\u00E9rie, des changements dans les proc\u00E9dures d''\u00E9chantillonnage, dans les caract\u00E9ristiques des engins, dans la p\u00E9riode de r\u00E9alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr\u00E9venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn\u00E9es doivent \u00EAtre pr\u00E9alablement filtr\u00E9s ad\u00E9quatement.
-message.quality.paragraph5=Il est vivement recommand\u00E9 aux utilisateurs de donn\u00E9es de les traiter avec pr\u00E9caution. Si des utilisateurs s''interrogent sur la validit\u00E9 de donn\u00E9es, ils sont invit\u00E9s \u00E0 contacter l''administrateur de la base de donn\u00E9es ({0}).
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-17 17:03:28 UTC (rev 519)
@@ -31,20 +31,85 @@
message.index.paragraph3=Chaque s\u00E9rie de campagnes est conduite selon une strat\u00E9gie d''\u00E9chantillonnage sp\u00E9cifique. Sauf cas particuliers, les analyses et interpr\u00E9tations doivent \u00EAtre conduites par s\u00E9rie, en prenant en compte les strat\u00E9gies d''\u00E9chantillonnage propres \u00E0 chacune de ces s\u00E9ries. Sur le site, les donn\u00E9es sont pr\u00E9sent\u00E9es par s\u00E9rie.
message.index.paragraph4=Dans les tables de donn\u00E9es, toutes les esp\u00E8ces sont identifi\u00E9es selon le r\u00E9f\u00E9rentiel taxinomique du Syst\u00E8me d''informations halieutiques de l''Ifremer ({0}).
message.index.datatypetitle=Quatre types de donn\u00E9es sont pr\u00E9sent\u00E9es
-message.index.datatype1=Des donn\u00E9es par op\u00E9ration d''\u00E9chantillonnage (en g\u00E9n\u00E9ral par trait de chalut)
-message.index.datatype2=Des cartes de distribution par esp\u00E8ce et par zone
-message.index.datatype3=Des indices biologiques par esp\u00E8ce et par zone
-message.index.datatype4=Des indices de communaut\u00E9 par zone.
+message.index.datatypesource=Des donn\u00E9es par op\u00E9ration d''\u00E9chantillonnage (en g\u00E9n\u00E9ral par trait de chalut)
+message.index.datatypemap=Des cartes de distribution par esp\u00E8ce et par zone
+message.index.datatypepop=Des indices biologiques par esp\u00E8ce et par zone
+message.index.datatypecom=Des indices de communaut\u00E9 par zone.
message.index.quotetitle=Pour citer ce site
message.index.quotemessage=Ifremer {0,date,yyyy}. Indices de populations et de communautés issus des campagnes de surveillance halieutique de l''Ifremer. {1} ({0,date,dd MMMM})
message.index.qualitytitle=Avertissement qualit\u00E9
message.index.qualitymessage=Avertissement qualit\u00E9
-message.common.selectpop=Selectionnez un population
+message.index.surveytitle=Description des campagnes
+message.index.surveyparagraph=Des manuels des protocoles d\u00E9crivent les modalit\u00E9s techniques de r\u00E9alisation de chaque s\u00E9rie de campagnes.
+message.common.selectpop=Selectionnez une population
message.common.selectzone=Selectionnez une zone
message.common.selectfacade=Selectionnez une facade
message.common.selectindicator=Selectionnez un indicateur
-message.common.noresults=Aucun résultat disponible
+message.common.selectspecies=Selectionnez une esp\u00E8ces
+message.common.noresults=Aucun r\u00E9sultat disponible
message.source.download=T\u00E9l\u00E9charger
+message.survey.maintitle=Les campagnes de surveillance halieutique de l''Ifremer
+message.survey.paragraph1=Les campagnes de p\u00EAche scientifique standardis\u00E9es ont pour objectif d''observer les ressources halieutiques, en suivant toujours les m\u00EAmes m\u00E9thodes d\u2019\u00E9chantillonnage. Elles sont toujours r\u00E9alis\u00E9es dans la m\u00EAme zone, \u00E0 la m\u00EAme saison, avec des engins de p\u00EAche standardis\u00E9s, afin que les donn\u00E9es soient comparables d''ann\u00E9e en ann\u00E9e. Elles servent \u00E0 d\u00E9crire les esp\u00E8ces, qu''elles soient commerciales ou non, d\'une zone et \u00E0 observer les changements s\u2019il y en a. Les poissons, les mollusques et les crustac\u00E9s sont d\u00E9nombr\u00E9s, mesur\u00E9s et pes\u00E9s. Certains d\'entre eux font l''objet de pr\u00E9l\u00E8vements biologiques. Chaque campagne fournit ainsi une repr\u00E9sentation quantitative de l''ensemble des esp\u00E8ces de la zone \u00E0 une p\u00E9riode donn\u00E9e. Selon les s\u00E9ries, d'''autres informations sont relev\u00E9es (temp\u00E9rature, salinit\u00E9, macrofaune, observation des mammif\u00E8res marins, oiseaux, macro d\u00E9chets etc., mais ne sont pas pr\u00E9sent\u00E9es dans ce site)
+message.survey.paragraph2=Depuis une vingtaine d''ann\u00E9es, l''Ifremer organise des campagnes de p\u00EAche scientifique en mer du Nord, en Manche, en Atlantique et en M\u00E9diterran\u00E9e concernant les ressources d\u00E9mersales et benthiques. L''objectif prioritaire est de produire des indices d''abondance des principales esp\u00E8ces commerciales. Elles recueillent \u00E9galement des donn\u00E9es sur les esp\u00E8ces captur\u00E9es non commerciales. Elles contribuent ainsi aux connaissances n\u00E9cessaires au d\u00E9veloppement de l''approche \u00E9cosyst\u00E9mique des p\u00EAches, notamment dans le cadre de la politique commune des p\u00EAches et plus largement de la strat\u00E9gie marine de l''Union europ\u00E9enne.
+message.survey.dataengintitle=Diff\u00E9rents engins d''\u00E9chantillonnage sont utilis\u00E9s :
+message.survey.dataenginfond=Un chalut de fond \u00E0 grande ouverture verticale pour l''observation des ressources d\u00E9mersales, sur les plateaux continentaux et le haut des pentes continentales (accores) en mer du Nord, Manche orientale, mer Celtique, golfe de Gascogne, golfe du Lion et Est de la Corse,
+message.survey.dataenginperche=Un chalut \u00E0 perche pour les zones tr\u00E8s c\u00F4ti\u00E8res et les estuaires lors des campagnes visant les juv\u00E9niles de poissons plats : baies de Somme et de Vilaine,
+message.survey.dataengincasier=Un \u00E9chantillonnage au casier pour les campagnes d''\u00E9valuation des grands crustac\u00E9s, en particulier le homard, aux abords du cap de Flamanville.
+message.survey.paragraph3=Les campagnes sont r\u00E9alis\u00E9es selon des plans d''\u00E9chantillonnage standardis\u00E9s. L\u2019engin de p\u00EAche et son gr\u00E9ement, la position des stations, le tri des captures, les pr\u00E9l\u00E8vements biologiques suivent des protocoles fix\u00E9s.
+message.survey.paragraph4=Pour les campagnes coordonn\u00E9es entre navires de recherche des pays riverains en mer du Nord, Manche orientale, mer Celtique, golfe de Gascogne et M\u00E9diterran\u00E9e, les protocoles sont communs \u00E0 l''ensemble des pays partenaires. Les traits de chalut des diff\u00E9rents navires de recherche sont comparables.
+message.survey.paragraph5=Chaque zone \u00E9tudi\u00E9e est d\u00E9coup\u00E9e en strates en fonction de la profondeur, de la latitude ou d''autres crit\u00E8res. L''\u00E9chantillonnage pr\u00E9voit un nombre de traits de chalut ou de mouillages de casiers par strate.
+message.survey.paragraph6=Dans une campagne de chalutage scientifique, les positions des traits de chalut sont choisies selon un plan d''\u00E9chantillonnage statistique. L''objectif n''est pas d''obtenir les meilleures captures possibles comme le recherchent les p\u00EAcheurs, mais de r\u00E9colter des donn\u00E9es comparables d''une ann\u00E9e sur l''autre afin de relever des \u00E9volutions.
+message.survey.detailstitle=Caract\u00E9ristiques des campagnes de surveillance halieutique de l''Ifremer
+message.survey.merdunord=Fa\u00E7ade Mer du Nord
+message.survey.merdunord.sudmerdunord=Sud mer du Nord
+message.survey.merdunord.sudmerdunord.desc=Contribution fran\u00E7aise d''un mois \u00E0 la campagne internationale IBTS (International Bottom Trawl Survey) au premier trimestre, tous les ans depuis 1980, au chalut de fond \u00E0 grande ouverture verticale. En moyenne, le navire fran\u00E7ais fait 58 chalutages par an. Le sud de la mer du Nord est couvert par 4 navires (fran\u00E7ais, belge, danois et allemand) qui r\u00E9alisent en tout environ 200 traits par an. Chaque trait dure une demi-heure et couvre une surface d\'environ 0,067 km\u00B2. Cette campagne est repr\u00E9sentative des 678\u00A0000\u00A0km\u00B2 de la zone.
+message.survey.merdunord.sudmerdunord.plus=Pour en savoir plus sur les campagnes IBTS
+message.survey.merdunord.sudmerdunord.ibts6=Manuel des protocoles IBTS - Révision VI (1999)
+message.survey.merdunord.sudmerdunord.ibts7=Manuel des protocoles IBTS - Révision VII (2004)
+message.survey.mancheorientale=Fa\u00E7ade Manche orientale
+message.survey.mancheorientale.mancheorientale=Manche orientale
+message.survey.mancheorientale.mancheorientale.desc=Campagne fran\u00E7aise CGFS (Channel Ground Fish Survey) d''un mois en octobre, coordonn\u00E9e au plan international avec les campagnes IBTS. La campagne a lieu tous les ans depuis 1988. En moyenne 90 traits d''une demi-heure, au chalut de fond \u00E0 grande ouverture verticale, sont r\u00E9alis\u00E9s. Chaque trait couvre une surface d''environ 0,03 km\u00B2. Cette campagne est repr\u00E9sentative des 70 748 km\u00B2 de la Manche orientale.
+message.survey.mancheorientale.mancheorientale.plus=Pour en savoir plus sur les campagnes CGFS
+message.survey.mancheorientale.mancheorientale.cgfs1=Manuel des protocoles CGFS - Version 1.0 (2002)
+message.survey.mancheorientale.baiedesomme=Baie de Somme
+message.survey.mancheorientale.baiedesomme.desc=Campagne de p\u00EAche sur la nourricerie de la baie de Somme (NourSomme) d''une semaine en septembre-octobre, tous les ans depuis 1995, aux chaluts \u00E0 perche de 2 m\u00E8tres de large dans la partie la plus estuarienne de la baie et 3 m\u00E8tres dans la partie externe, plus marine. En moyenne 50 chalutages sont r\u00E9alis\u00E9s chaque ann\u00E9e. Ils durent en moyenne 7 minutes sur une surface de 0,001 km\u00B2 chacun dans la partie interne de la baie et 15 minutes sur une surface d''environ 0,004 km\u00B2 dans la partie externe. Cette campagne est repr\u00E9sentative des 720 km\u00B2 de la baie.
+message.survey.mancheorientale.baiedesomme.plus=Pour en savoir plus sur les campagnes NourSomme
+message.survey.mancheorientale.baiedesomme.noursomme1=Manuel des protocoles Nourriceries Somme - V 1.0 (2002)
+message.survey.mancheoccidentale=Fa\u00E7ade Manche occidentale
+message.survey.mancheoccidentale.flamanville=Abords du cap de Flamanville
+message.survey.mancheoccidentale.flamanville.desc=Deux campagnes de 15 jours aux casiers \u00E0 crustac\u00E9s aux abords du cap de Flamanville (CrustaFlam), en juin et septembre, depuis 1986 : 1200 casiers relev\u00E9s par campagne sur une zone de 26 km\u00B2.
+message.survey.mancheoccidentale.flamanville.plus=Pour en savoir plus sur les campagnes CrustFlam
+message.survey.mancheoccidentale.flamanville.crustaflam1=Manuel des protocoles CRUSTAFLAM - Version 1.0 (2003)
+message.survey.atlantique=Fa\u00E7ade Atlantique
+message.survey.atlantique.celtique=Mer Celtique
+message.survey.atlantique.celtique.desc=Campagne Evhoe (Evaluation des ressources halieutiques de l''ouest europ\u00E9en) d''un mois au quatri\u00E8me trimestre, tous les ans depuis 1997. En moyenne 75 traits d''une demi-heure, au chalut de fond \u00E0 grande ouverture verticale, sont r\u00E9alis\u00E9s. Chaque trait couvre une surface d''environ 0,067 km\u00B2. Cette campagne est repr\u00E9sentative des 150 000 km\u00B2 de la mer Celtique.
+message.survey.atlantique.celtique.plus=Pour en savoir plus sur les campagnes Evhoe
+message.survey.atlantique.celtique.evhoe1=Manuel des protocoles EVHOE - Version 1.0 (2005)
+message.survey.atlantique.gascogne=Golfe de Gascogne
+message.survey.atlantique.gascogne.desc=Campagne Evhoe (Evaluation des ressources halieutiques de l''ouest europ\u00E9en) d''un mois au quatri\u00E8me trimestre, tous les ans depuis 1992 (sauf en 1993 et 1996). En moyenne, 70 traits de chalut d''une demi-heure au chalut de fond \u00E0 grande ouverture verticale, sont r\u00E9alis\u00E9s. Chaque trait couvre une surface de 0,067 km\u00B2. Cette campagne est repr\u00E9sentative des 72 500 km\u00B2 du golfe de Gascogne. La campagne Evhoe couvre donc le golfe de Gascogne et la mer Celtique avec le m\u00EAme protocole. De plus elle est coordonn\u00E9e internationalement, dans le cadre des campagnes IBTS, avec une campagne espagnole en mer Cantabrique, une campagne irlandaise et une campagne anglaise en mer Celtique.
+message.survey.atlantique.gascogne.plus=Pour en savoir plus sur les campagnes Evhoe
+message.survey.atlantique.gascogne.evhoe1=Manuel des protocoles EVHOE - Version 1.0 (2005)
+message.survey.atlantique.vilaine=Baie de Vilaine
+message.survey.atlantique.vilaine.desc=Campagne sur la nourricerie de la baie de Vilaine (NourVil), d''une semaine \u00E0 l''automne, tous les ans de 1980 \u00E0 2010, sauf en 1991, 1994, 1995, 1998, 1999, 2006 et 2007, au chalut \u00E0 perche de 3 m\u00E8tres de large. En moyenne, 30 chalutages de 15 minutes sont r\u00E9alis\u00E9s. Chaque trait couvre une surface d\'environ 0,0041 km\u00B2. Cette campagne est repr\u00E9sentative des 330 km\u00B2 de la baie.
+message.survey.atlantique.vilaine.plus=Pour en savoir plus sur les campagnes Nourvil
+message.survey.atlantique.vilaine.nourvil1=Manuel des protocoles Nourriceries Gascogne - V 1.0 (2002)
+message.survey.mediterranee=Fa\u00E7ade M\u00E9diterran\u00E9e
+message.survey.mediterranee.golfelion=Golfe du Lion
+message.survey.mediterranee.golfelion.desc=Contribution fran\u00E7aise aux campagnes internationales Medits (International bottom Trawl Surveys in the Mediterranean), d''un mois au deuxi\u00E8me trimestre tous les ans depuis 1994 au chalut de fond \u00E0 grande ouverture verticale \u00E0 ailes courtes. En moyenne 69 chalutages sont r\u00E9alis\u00E9s, d''une demi-heure couvrant une surface d''environ 0,05 km\u00B2 chacun pour les profondeurs inf\u00E9rieures \u00E0 200 m\u00E8tres et d''une heure (surface d''environ 0,1\u00A0km\u00B2) pour les profondeurs sup\u00E9rieures \u00E0 200 m\u00E8tres. Medits est repr\u00E9sentative des 13 860 km\u00B2 du golfe de Lion.
+message.survey.mediterranee.golfelion.plus=Pour en savoir plus sur les campagnes Medits
+message.survey.mediterranee.golfelion.medits1=Manuel des protocoles Medits, Version 1 (1994)
+message.survey.mediterranee.golfelion.medits2=Manuel des protocoles Medits, Version 2 (1995)
+message.survey.mediterranee.golfelion.medits3=Manuel des protocoles Medits, Version 3 (1999)
+message.survey.mediterranee.golfelion.medits4=Manuel des protocoles Medits, Version 4 (2001)
+message.survey.mediterranee.golfelion.medits5=Manuel des protocoles Medits, Version 5 (2007)
+message.survey.mediterranee.estcorse=Est de la Corse
+message.survey.mediterranee.estcorse.desc=Contribution fran\u00E7aise \u00E0 la campagne internationale Medits (International bottom Trawl Surveys in the Mediterranean), d''une semaine au printemps, tous les ans depuis 1994, sauf en 2002, au chalut de fond \u00E0 grande ouverture verticale \u00E0 ailes courtes. En moyenne 20 chalutages sont r\u00E9alis\u00E9s, d''une demi-heure couvrant une surface d''environ 0,05 km\u00B2 chacun pour les profondeurs inf\u00E9rieures \u00E0 200 m\u00E8tres et d\'une heure (surface d\'environ 0,1\u00A0km\u00B2) pour les profondeurs sup\u00E9rieures \u00E0 200 m\u00E8tres. La campagne est repr\u00E9sentative des 4 562 km\u00B2 du plateau insulaire de l\'est de la Corse.
+message.survey.mediterranee.estcorse.plus=Pour en savoir plus sur les campagnes Medits
+message.survey.mediterranee.estcorse.medits1=Manuel des protocoles Medits, Version 1 (1994)
+message.survey.mediterranee.estcorse.medits2=Manuel des protocoles Medits, Version 2 (1995)
+message.survey.mediterranee.estcorse.medits3=Manuel des protocoles Medits, Version 3 (1999)
+message.survey.mediterranee.estcorse.medits4=Manuel des protocoles Medits, Version 4 (2001)
+message.survey.mediterranee.estcorse.medits5=Manuel des protocoles Medits, Version 5 (2007)
message.quality.paragraph1=Bien que les donn\u00E9es aient \u00E9t\u00E9 pr\u00E9cautionneusement contr\u00F4l\u00E9es par l''Ifremer, des d\u00E9fauts inh\u00E9rents \u00E0 l''agr\u00E9gation des informations peuvent persister. Par exemple\u00A0:
message.quality.paragraph2=En d\u00E9pit du fait que toutes les donn\u00E9es de toutes les s\u00E9ries de campagnes soient pr\u00E9sent\u00E9es selon le m\u00EAme format, sauf cas particuliers des diff\u00E9rences dans les strat\u00E9gies d''observation emp\u00EAchent la combinaison de donn\u00E9es de diff\u00E9rentes campagnes dans une m\u00EAme analyse. Par exemple, la capturabilit\u00E9 d\'une m\u00EAme esp\u00E8ce varie selon le type d''engin d''\u00E9chantillonnage utilis\u00E9. Il en r\u00E9sulte que chaque engin capture un sous-ensemble particulier des bioc\u00E9noses \u00E9chantillonn\u00E9es.
message.quality.paragraph3=Une propri\u00E9t\u00E9 commune aux s\u00E9ries d''observations \u00E0 la mer est l''\u00E9volution dans le temps de la comp\u00E9tence des \u00E9quipes embarqu\u00E9es pour la d\u00E9termination des esp\u00E8ces. Il peut en r\u00E9sulter des apparitions, des disparitions ou des assignations sous un m\u00EAme nom de taxons proches dans les jeux de donn\u00E9es, non repr\u00E9sentatifs de l''\u00E9volution des populations concern\u00E9es dans l''\u00E9cosyst\u00E8me.
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -30,7 +30,7 @@
<title>Coser</title>
</head>
<body>
- <img src="<s:url value='/images/zonesmap.jpg' />" />
+ <img src="<s:url value='/images/zones/' /><s:property value='zonePicture' />" style="width: 590px; heigth: 812px" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -30,8 +30,20 @@
</head>
<body>
- <img src="<s:url value='/images/zonesmap.jpg' />" />
+ <!-- utilisé dynamiquement par le script JS -->
+ <s:iterator value="zonesPictures.entrySet()">
+ <div id="coserzonemap<s:property value='%{key}' />" style="display:none">
+ <div>
+ <img src="<s:url value='/images/zones/' /><s:property value='%{value}' />" style="width: 590px; heigth: 812px"/>
+ </div>
+ <s:property value='%{zonesMetaInfo.get(key)}' />
+ </div>
+ </s:iterator>
+ <div id="coserzonemap">
+ <img src="<s:url value='/images/zonesmap.jpg' />" />
+ </div>
+
<br />
<s:if test="%{zones.isEmpty()}">
@@ -39,7 +51,8 @@
</s:if>
<s:else>
<s:form action="indicator" method="get">
- <s:select name="zone" list="zones" label="%{getText('message.common.selectzone')}" />
+ <s:select name="zone" list="zones" label="%{getText('message.common.selectzone')}" emptyOption="true"
+ onchange="javascript:coserShowSelectedZoneMap(this, 'coserzonemap')"/>
<s:submit label="Suite"/>
</s:form>
</s:else>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -37,10 +37,10 @@
<p>
<h2><s:text name="message.index.datatypetitle" /></h2>
<ul>
- <li><s:a action="facade" namespace='/source'><s:text name="message.index.datatype1" /></s:a></li>
- <li><s:a action="facade" namespace='/map'><s:text name="message.index.datatype2" /></s:a></li>
- <li><s:a action="facade" namespace='/pop'><s:text name="message.index.datatype3" /></s:a></li>
- <li><s:a action="facade" namespace='/com'><s:text name="message.index.datatype4" /></s:a></li>
+ <li><s:a action="facade" namespace='/map'><s:text name="message.index.datatypemap" /></s:a></li>
+ <li><s:a action="facade" namespace='/pop'><s:text name="message.index.datatypepop" /></s:a></li>
+ <li><s:a action="facade" namespace='/com'><s:text name="message.index.datatypecom" /></s:a></li>
+ <li><s:a action="facade" namespace='/source'><s:text name="message.index.datatypesource" /></s:a></li>
</ul>
</p>
@@ -49,8 +49,15 @@
<s:param><a href="http://www.ifremer.fr/sih/">www.ifremer.fr/sih/</a></s:param>
</s:text>
</p>
-
+
<p>
+ <h2><s:text name="message.index.surveytitle" /></h2>
+ <s:a action="survey" namespace='/'>
+ <s:text name="message.index.surveyparagraph" />
+ </s:a>
+ </p>
+
+ <p>
<span style="font-weight:bold"><s:text name="message.index.qualitytitle"/> :</span>
<s:a action="quality"><s:text name="message.index.qualitymessage" /></s:a>
</p>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -34,7 +34,7 @@
<br />
- <s:form action="zone" method="get">
+ <s:form action="survey" method="get">
<s:select name="facade" list="facades" label="%{getText('message.common.selectfacade')}" />
<s:submit label="Suite"/>
</s:form>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/map.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -32,7 +32,7 @@
<body>
<img src="<s:url action='map-data'>
- <s:param name="zone" value="%{zone}" />
+ <s:param name="survey" value="%{survey}" />
<s:param name="species" value="%{species}" />
</s:url>" />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -31,13 +31,13 @@
</head>
<body>
- <img src="<s:url value='/images/zonesmap.jpg' />" />
+ <img src="<s:url value='/images/zones/' /><s:property value='zonePicture' />" style="width: 590px; heigth: 812px" />
<br />
<s:form action="map" method="get">
<s:select name="species" list="species" label="%{getText('message.common.selectspecies')}" />
- <s:hidden name="zone" property="zone"/>
+ <s:hidden name="survey" property="survey"/>
<s:submit label="Suite"/>
</s:form>
</body>
Copied: trunk/coser-web/src/main/webapp/WEB-INF/content/map/survey.jsp (from rev 517, trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp)
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/survey.jsp (rev 0)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/survey.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -0,0 +1,47 @@
+<!--
+ #%L
+ Coser :: Web
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #L%
+ -->
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<%@taglib uri="/struts-tags" prefix="s" %>
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>Coser</title>
+ </head>
+ <body>
+
+ <img src="<s:url value='/images/zonesmap.jpg' />" />
+
+ <br />
+
+ <s:if test="%{zones.isEmpty()}">
+ <s:text name="message.common.noresults"></s:text>
+ </s:if>
+ <s:else>
+ <s:form action="species" method="get">
+ <s:select name="survey" list="surveys" label="%{getText('message.common.selectzone')}" />
+ <s:submit label="Suite"/>
+ </s:form>
+ </s:else>
+ </body>
+</html>
\ No newline at end of file
Deleted: trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -1,47 +0,0 @@
-<!--
- #%L
- Coser :: Web
-
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
- %%
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- #L%
- -->
-<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<%@taglib uri="/struts-tags" prefix="s" %>
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Coser</title>
- </head>
- <body>
-
- <img src="<s:url value='/images/zonesmap.jpg' />" />
-
- <br />
-
- <s:if test="%{zones.isEmpty()}">
- <s:text name="message.common.noresults"></s:text>
- </s:if>
- <s:else>
- <s:form action="species" method="get">
- <s:select name="zone" list="zones" label="%{getText('message.common.selectzone')}" />
- <s:submit label="Suite"/>
- </s:form>
- </s:else>
- </body>
-</html>
\ No newline at end of file
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -31,7 +31,7 @@
</head>
<body>
- <img src="<s:url value='/images/zonesmap.jpg' />" />
+ <img src="<s:url value='/images/zones/' /><s:property value='zonePicture' />" style="width: 590px; heigth: 812px" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -31,9 +31,8 @@
</head>
<body>
+ <img src="<s:url value='/images/zones/' /><s:property value='zonePicture' />" style="width: 590px; heigth: 812px" />
- <img src="<s:url value='/images/zonesmap.jpg' />" />
-
<br />
<s:form action="indicator" method="get">
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -27,10 +27,10 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Coser</title>
- <script type="text/javascript" language="javascript" src="<s:url value='/js/coser.js' />"></script>
</head>
<body>
+ <!-- utilisé dynamiquement par le script JS -->
<s:iterator value="zonesPictures.entrySet()">
<div id="coserzonemap<s:property value='%{key}' />" style="display:none">
<div>
@@ -40,7 +40,6 @@
<s:property value='%{zonesMetaInfo.get(key)}' />
</div>
</s:iterator>
-
<div id="coserzonemap">
<img src="<s:url value='/images/zonesmap.jpg' />" />
</div>
@@ -52,7 +51,7 @@
</s:if>
<s:else>
<s:form action="species" method="get">
- <s:select name="zone" list="zones" label="%{getText('message.common.selectpop')}" emptyOption="true"
+ <s:select name="zone" list="zones" label="%{getText('message.common.selectzone')}" emptyOption="true"
onchange="javascript:coserShowSelectedZoneMap(this, 'coserzonemap')"/>
<s:submit label="Suite"/>
</s:form>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -30,6 +30,8 @@
</head>
<body>
+ <img src="<s:url value='/images/zones/' /><s:property value='zonePicture' />" style="width: 590px; heigth: 812px" />
+
<s:a action="source-data">
<s:param name="zone" value="%{zone}" />
<s:text name="message.source.download"></s:text>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -30,8 +30,20 @@
</head>
<body>
- <img src="<s:url value='/images/zonesmap.jpg' />" />
+ <!-- utilisé dynamiquement par le script JS -->
+ <s:iterator value="zonesPictures.entrySet()">
+ <div id="coserzonemap<s:property value='%{key}' />" style="display:none">
+ <div>
+ <img src="<s:url value='/images/zones/' /><s:property value='%{value}' />" style="width: 590px; heigth: 812px"/>
+ </div>
+ <s:property value='%{zonesMetaInfo.get(key)}' />
+ </div>
+ </s:iterator>
+ <div id="coserzonemap">
+ <img src="<s:url value='/images/zonesmap.jpg' />" />
+ </div>
+
<br />
<s:if test="%{zones.isEmpty()}">
@@ -39,7 +51,8 @@
</s:if>
<s:else>
<s:form action="source" method="get">
- <s:select name="zone" list="zones" label="%{getText('message.common.selectzone')}" />
+ <s:select name="zone" list="zones" label="%{getText('message.common.selectzone')}" emptyOption="true"
+ onchange="javascript:coserShowSelectedZoneMap(this, 'coserzonemap')"/>
<s:submit label="Suite"/>
</s:form>
</s:else>
Added: trunk/coser-web/src/main/webapp/WEB-INF/content/survey.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/survey.jsp (rev 0)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/survey.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -0,0 +1,158 @@
+<!--
+ #%L
+ Coser :: Web
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #L%
+ -->
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<%@taglib uri="/struts-tags" prefix="s" %>
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title><s:text name="message.quality.title" /></title>
+ </head>
+ <body>
+
+ <h2>
+ <s:text name="message.survey.maintitle" />
+ </h2>
+
+ <p><s:text name="message.survey.paragraph1" /></p>
+ <p><s:text name="message.survey.paragraph2" /></p>
+
+ <p>
+ <p><s:text name="message.survey.dataengintitle" /></p>
+ <ul>
+ <li><s:text name="message.survey.dataenginfond" /></li>
+ <li><s:text name="message.survey.dataenginperche" /></li>
+ <li><s:text name="message.survey.dataengincasier" /></li>
+ </ul>
+ </p>
+
+ <p><s:text name="message.survey.paragraph3" /></p>
+ <p><s:text name="message.survey.paragraph4" /></p>
+ <p><s:text name="message.survey.paragraph5" /></p>
+ <p><s:text name="message.survey.paragraph6" /></p>
+
+ <h2>
+ <s:text name="message.survey.detailstitle" />
+ </h2>
+
+ <!-- Facade -->
+ <h3><s:text name="message.survey.merdunord" /></h3>
+ <h4><s:text name="message.survey.merdunord.sudmerdunord" /></h4>
+ <p><s:text name="message.survey.merdunord.sudmerdunord.desc" /></p>
+ <p>
+ <s:text name="message.survey.merdunord.sudmerdunord.plus" />
+ <ul>
+ <li><a href="#" target="_blank"><s:text name="message.survey.merdunord.sudmerdunord.ibts6" /></a></li>
+ <li><a href="#" target="_blank"><s:text name="message.survey.merdunord.sudmerdunord.ibts7" /></a></li>
+ </ul>
+ </p>
+
+ <!-- Facade -->
+ <h3><s:text name="message.survey.mancheorientale" /></h3>
+ <h4><s:text name="message.survey.mancheorientale.mancheorientale" /></h4>
+ <p><s:text name="message.survey.mancheorientale.mancheorientale.desc" /></p>
+ <p>
+ <s:text name="message.survey.mancheorientale.mancheorientale.plus" />
+ <ul>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mancheorientale.mancheorientale.cgfs1" /></a></li>
+ </ul>
+ </p>
+
+ <h4><s:text name="message.survey.mancheorientale.baiedesomme" /></h4>
+ <p><s:text name="message.survey.mancheorientale.baiedesomme.desc" /></p>
+ <p>
+ <s:text name="message.survey.mancheorientale.baiedesomme.plus" />
+ <ul>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mancheorientale.baiedesomme.noursomme1" /></a></li>
+ </ul>
+ </p>
+
+ <!-- Facade -->
+ <h3><s:text name="message.survey.mancheoccidentale" /></h3>
+ <h4><s:text name="message.survey.mancheoccidentale.flamanville" /></h4>
+ <p><s:text name="message.survey.mancheoccidentale.flamanville.desc" /></p>
+ <p>
+ <s:text name="message.survey.mancheoccidentale.flamanville.plus" />
+ <ul>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mancheoccidentale.flamanville.crustaflam1" /></a></li>
+ </ul>
+ </p>
+
+ <!-- Facade -->
+ <h3><s:text name="message.survey.atlantique" /></h3>
+ <h4><s:text name="message.survey.atlantique.celtique" /></h4>
+ <p><s:text name="message.survey.atlantique.celtique.desc" /></p>
+ <p>
+ <s:text name="message.survey.atlantique.celtique.plus" />
+ <ul>
+ <li><a href="#" target="_blank"><s:text name="message.survey.atlantique.celtique.evhoe1" /></a></li>
+ </ul>
+ </p>
+
+ <h4><s:text name="message.survey.atlantique.gascogne" /></h4>
+ <p><s:text name="message.survey.atlantique.gascogne.desc" /></p>
+ <p>
+ <s:text name="message.survey.atlantique.gascogne.plus" />
+ <ul>
+ <li><a href="#" target="_blank"><s:text name="message.survey.atlantique.gascogne.evhoe1" /></a></li>
+ </ul>
+ </p>
+
+ <h4><s:text name="message.survey.atlantique.vilaine" /></h4>
+ <p><s:text name="message.survey.atlantique.vilaine.desc" /></p>
+ <p>
+ <s:text name="message.survey.atlantique.vilaine.plus" />
+ <ul>
+ <li><a href="#" target="_blank"><s:text name="message.survey.atlantique.vilaine.nourvil1" /></a></li>
+ </ul>
+ </p>
+
+ <!-- Facade -->
+ <h3><s:text name="message.survey.mediterranee" /></h3>
+ <h4><s:text name="message.survey.mediterranee.golfelion" /></h4>
+ <p><s:text name="message.survey.mediterranee.golfelion.desc" /></p>
+ <p>
+ <s:text name="message.survey.mediterranee.golfelion.plus" />
+ <ul>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mediterranee.golfelion.medits1" /></a></li>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mediterranee.golfelion.medits2" /></a></li>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mediterranee.golfelion.medits3" /></a></li>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mediterranee.golfelion.medits4" /></a></li>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mediterranee.golfelion.medits5" /></a></li>
+ </ul>
+ </p>
+
+ <h4><s:text name="message.survey.mediterranee.estcorse" /></h4>
+ <p><s:text name="message.survey.mediterranee.estcorse.desc" /></p>
+ <p>
+ <s:text name="message.survey.mediterranee.estcorse.plus" />
+ <ul>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mediterranee.estcorse.medits1" /></a></li>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mediterranee.estcorse.medits2" /></a></li>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mediterranee.estcorse.medits3" /></a></li>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mediterranee.estcorse.medits4" /></a></li>
+ <li><a href="#" target="_blank"><s:text name="message.survey.mediterranee.estcorse.medits5" /></a></li>
+ </ul>
+ </p>
+ </body>
+</html>
\ No newline at end of file
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -30,6 +30,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><decorator:title default="Coser"/></title>
<script type="text/javascript" language="javascript" src="<s:url value='/js/jquery-1.4.4.min.js' />"></script>
+ <script type="text/javascript" language="javascript" src="<s:url value='/js/coser.js' />"></script>
<link rel="stylesheet" type="text/css" href="<s:url value='/styles/coser.css' />" />
<decorator:head/>
</head>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2011-01-17 17:02:39 UTC (rev 518)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2011-01-17 17:03:28 UTC (rev 519)
@@ -30,6 +30,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><decorator:title default="Coser"/></title>
<script type="text/javascript" language="javascript" src="<s:url value='/js/jquery-1.4.4.min.js' />"></script>
+ <script type="text/javascript" language="javascript" src="<s:url value='/js/coser.js' />"></script>
<link rel="stylesheet" type="text/css" href="<s:url value='/styles/coser.css' />" />
<decorator:head/>
</head>
1
0
r518 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-business/src/main/resources/i18n coser-ui/src/main/java/fr/ifremer/coser/ui/result
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
17 Jan '11
Author: chatellier
Date: 2011-01-17 17:02:39 +0000 (Mon, 17 Jan 2011)
New Revision: 518
Log:
Prise en compte des type map et publication de r?\195?\169sultats
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties
trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-17 13:47:01 UTC (rev 517)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-17 17:02:39 UTC (rev 518)
@@ -1012,7 +1012,7 @@
}
/**
- * Save Rsufi result list in directory strucuture.
+ * Create new rsufi result list in directory structure.
*
* RSufiResult is added to selection result list by this method.
*
@@ -1044,7 +1044,6 @@
rsufiResult.setCreationDate(new Date());
}
- OutputStream outputStream = null;
try {
// sauvegarde des 2 fichiers obligatoires
File estComIndFile = new File(rsufiResult.getEstComIndPath());
@@ -1072,21 +1071,12 @@
}
}
- // sauvegarde des informations du resultat (properties)
- File propertiesFile = new File(rsufiResultDirectory, "result.properties");
- Properties props = rsufiResult.toProperties();
- outputStream = new FileOutputStream(propertiesFile);
- props.store(outputStream, null);
+ // property file
+ saveRSufiResult(rsufiResultDirectory, rsufiResult);
- if (log.isDebugEnabled()) {
- log.debug("Saving result properties file : " + propertiesFile);
- }
} catch (IOException ex) {
throw new CoserBusinessException("Can't save result properties file", ex);
}
- finally {
- IOUtils.closeQuietly(outputStream);
- }
List<RSufiResult> results = selection.getRsufiResults();
results.add(rsufiResult);
@@ -1096,6 +1086,31 @@
}
/**
+ * Save rsufi result (only property file).
+ *
+ * @param rsufiResultDirectory rsufiresult directory
+ * @param rsufiResult rsufi result
+ * @throws CoserBusinessException
+ */
+ public void saveRSufiResult(File rsufiResultDirectory, RSufiResult rsufiResult) throws CoserBusinessException {
+
+ OutputStream outputStream = null;
+ try {
+ // sauvegarde des informations du resultat (properties)
+ File propertiesFile = new File(rsufiResultDirectory, "result.properties");
+ Properties props = rsufiResult.toProperties();
+ outputStream = new FileOutputStream(propertiesFile);
+ props.store(outputStream, null);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Saving result properties file : " + propertiesFile);
+ }
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save result properties file", ex);
+ }
+ }
+
+ /**
* Sauve une liste ordonnées de commande dans le fichier specifié.
*
* @param props proparties to add command to
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-17 13:47:01 UTC (rev 517)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-17 17:02:39 UTC (rev 518)
@@ -307,14 +307,20 @@
* Upload user selected result to coser web front-end using common http
* client.
*
+ * TODO remove les 3 listes s'il y a mieux.
+ *
* @param selectedResults selected result (collection of project/selection/rsufiresult)
+ * @param mapResults result selected as list result
+ * @param publishDataResults result selected as results published with data
* @param login remote admin login
* @param password remote admin password
* @param progress progress monitor
* @return upload error status or {@code null} if no error
* @throws CoserBusinessException
*/
- public String performResultUpload(Collection<Object[]> selectedResults, String login, String password, ProgressMonitor progress) throws CoserBusinessException {
+ public String performResultUpload(Collection<Object[]> selectedResults,
+ Collection<Object[]> mapResults, Collection<Object[]> publishDataResults,
+ String login, String password, ProgressMonitor progress) throws CoserBusinessException {
String uploadStatus = null;
@@ -323,6 +329,9 @@
// and selection with only selected results
progress.setCurrent(0);
+ progress.setText(_("coser.business.uploadresult.modifyResultOptions"));
+ modifyRSufiResults(selectedResults, mapResults, publishDataResults);
+
progress.setText(_("coser.business.uploadresult.checkcollision"));
checkDataCollision(selectedResults);
@@ -375,6 +384,58 @@
}
/**
+ * Modifie les types et options de certains résultats rsufi (map result,
+ * data sources result).
+ *
+ * @param selectedResults selected result (collection of project/selection/rsufiresult)
+ * @param mapResults map results
+ * @param publishDataResults publish data results
+ * @throws CoserBusinessException
+ */
+ protected void modifyRSufiResults(Collection<Object[]> selectedResults, Collection<Object[]> mapResults,
+ Collection<Object[]> publishDataResults) throws CoserBusinessException {
+
+ // TODO echatellier 20110117 revoir ce code
+
+ // attention, il faut sauver tout les resultats, sinon, les
+ // decochage de type map / publish result ne seront pas pris en compte
+
+ // reset type map and data source for all
+ for (Object[] selectedResult : selectedResults) {
+ RSufiResult rsufiResult = (RSufiResult)selectedResult[2];
+ rsufiResult.setMapsReferenceResult(false);
+ rsufiResult.setDataAllowed(false);
+ }
+
+ // set map type
+ for (Object[] mapResult : mapResults) {
+ RSufiResult rsufiResult = (RSufiResult)mapResult[2];
+ rsufiResult.setMapsReferenceResult(true);
+ }
+
+ // set data type
+ for (Object[] publishDataResult : publishDataResults) {
+ RSufiResult rsufiResult = (RSufiResult)publishDataResult[2];
+ rsufiResult.setDataAllowed(true);
+ }
+
+ // save all selected results
+ for (Object[] selectedResult : selectedResults) {
+ Project project = (Project)selectedResult[0];
+ Selection selection = (Selection)selectedResult[1];
+ RSufiResult rsufiResult = (RSufiResult)selectedResult[2];
+
+ File projectDirectory = new File(config.getProjectsDirectory(), project.getName());
+ File selectionsDirectory = new File(projectDirectory, CoserConstants.STORAGE_SELECTION_DIRECTORY);
+ File selectionDirectory = new File(selectionsDirectory, selection.getName());
+ File resultsDirectory = new File(selectionDirectory, CoserConstants.STORAGE_RESULTS_DIRECTORY);
+ File resultDirectory = new File(resultsDirectory, rsufiResult.getName());
+
+ projectService.saveRSufiResult(resultDirectory, rsufiResult);
+ }
+ }
+
+ /**
* Met à jour les fichiers de propriétés des resultats (maps, dataSource)
* and check for duplicated couple (zoneid/resulttype (map) upload).
*
@@ -726,7 +787,7 @@
* @throws CoserBusinessException
*/
public Map<String, String> getZoneForFacade(String facade) throws CoserBusinessException {
- Map<String, String> surveyForZone = new HashMap<String, String>();
+ Map<String, String> zonesForFacade = new HashMap<String, String>();
// get subzone for main zone
Collection<String> subZones = new ArrayList<String>();
@@ -771,7 +832,7 @@
String[] zoneData = getZonesMap().get(zoneIndex);
String zoneName = zoneData[2] + " - " + zoneData[3] + " - " + zoneData[4];
- surveyForZone.put(zoneid, zoneName);
+ zonesForFacade.put(zoneid, zoneName);
}
}
}
@@ -782,10 +843,36 @@
}
}
}
-
- return surveyForZone;
+
+ return zonesForFacade;
}
+
+ /**
+ * Pour une zone principale, recupere la liste des campagnes qui sont
+ * disponible dans cette zone principale.
+ *
+ * @param facade facade (le nom de la facade principale)
+ * @return couple campagneid/campagnename
+ * @throws CoserBusinessException
+ */
+ public Map<String, String> getSurveyForFacade(String facade) throws CoserBusinessException {
+ Map<String, String> surveyForFacade = new HashMap<String, String>();
+
+ // get subzone for main zone
+ Iterator<String[]> itZone = getZonesMap().iterator(true);
+ while (itZone.hasNext()) {
+ // "id";"facade";"zone";"periode";"serie";"comment";"map"
+ String[] tuple = itZone.next();
+ if (tuple[1].equals(facade)) {
+ if (!surveyForFacade.containsKey(tuple[4])) {
+ surveyForFacade.put(tuple[4], tuple[4]);
+ }
+ }
+ }
+ return surveyForFacade;
+ }
+
/**
* Recupere la liste des cartes pour chaque id de zone sous forme de Map.
*
@@ -879,7 +966,81 @@
return result;
}
+
+ /**
+ * Recuperer la liste des populations pour une campagnes donnée.
+ *
+ * Les resultats retourné ne peuvent être que de type "carte".
+ *
+ * @param survey survey id
+ * @return map species nom info>nom officiel
+ * @throws CoserBusinessException
+ */
+ public Map<String, String> getSpeciesForSurvey(String survey) throws CoserBusinessException {
+ Map<String, String> result = new TreeMap<String, String>();
+
+ // parcours des resultats disponibles
+ File projectsDirectory = config.getWebProjectsDirectory();
+ File[] projectFiles = projectsDirectory.listFiles();
+ if (projectFiles != null) {
+ for (File projectFile : projectFiles) {
+ if (projectFile.isDirectory()) {
+ File selectionsDirectory = new File(projectFile, CoserConstants.STORAGE_SELECTION_DIRECTORY);
+ File[] selectionFiles = selectionsDirectory.listFiles();
+
+ // selection iteration
+ if (selectionFiles != null) {
+ for (File selectionFile : selectionFiles) {
+ if (selectionFile.isDirectory()) {
+ File resultsDirectory = new File(selectionFile, CoserConstants.STORAGE_RESULTS_DIRECTORY);
+ File[] resultFiles = resultsDirectory.listFiles();
+
+ // result iteration
+ if (resultFiles != null) {
+ for (File resultFile : resultFiles) {
+ if (resultFile.isDirectory()) {
+ RSufiResult rsufiResult = projectService.getRSufiResult(resultFile);
+
+ // extraction des especes pour le résultat demandé
+ if (rsufiResult.getZone() != null && rsufiResult.isMapsReferenceResult()) {
+
+ // test parmis toutes les zones disponible
+ // si le resultat appartient a une zone
+ // qui porte sur la campagne demandée
+ boolean zoneRSufiResult = false;
+ Iterator<String[]> itZone = getZonesMap().iterator(true);
+ while (itZone.hasNext()) {
+ // "id";"facade";"zone";"periode";"serie";"comment";"map"
+ String[] tuple = itZone.next();
+
+ if (tuple[4].equals(survey) && rsufiResult.getZone().equals(tuple[0])) {
+ zoneRSufiResult = true;
+ }
+ }
+
+ if (zoneRSufiResult) {
+ // load project (without data to get reftax data)
+ Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
+
+ Map<String, String> resultSpecies = getRsufiResultSpecies(project, resultFile, rsufiResult);
+ result.putAll(resultSpecies);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
/**
* Recupere la liste de toutes les especes nom sci et nom off à partir
* d'un resultat.
@@ -1134,12 +1295,12 @@
* Recupere le fichier image de la carte demandées en fonction de la zone
* et de l'espece.
*
- * @param zone zone (zoneid-surveyname)
+ * @param survey survey (surveyid)
* @param species
* @return map file
* @throws CoserBusinessException
*/
- public File getMapFile(String zone, String species) throws CoserBusinessException {
+ public File getMapFile(String survey, String species) throws CoserBusinessException {
File result = null;
@@ -1166,14 +1327,30 @@
RSufiResult rsufiResult = projectService.getRSufiResult(resultFile);
// extraction des especes pour le résultat demandé
- if (rsufiResult.getZone() != null && rsufiResult.getZone().equals(zone)) {
+ if (rsufiResult.getZone() != null && rsufiResult.isMapsReferenceResult()) {
- // get survey name (other condition)
- String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult);
+ // test parmis toutes les zones disponible
+ // si le resultat appartient a une zone
+ // qui porte sur la campagne demandée
+ boolean zoneRSufiResult = false;
+ Iterator<String[]> itZone = getZonesMap().iterator(true);
+ while (itZone.hasNext()) {
+ // "id";"facade";"zone";"periode";"serie";"comment";"map"
+ String[] tuple = itZone.next();
- String mapName = surveyName + "_" + species.toUpperCase() + ".png";
- File mapsDirectory = new File(resultFile, CoserConstants.STORAGE_MAPS_DIRECTORY);
- result = new File(mapsDirectory, mapName);
+ if (tuple[4].equals(survey) && rsufiResult.getZone().equals(tuple[0])) {
+ zoneRSufiResult = true;
+ }
+ }
+
+ if (zoneRSufiResult) {
+ // get survey name (other condition)
+ String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult);
+
+ String mapName = surveyName + "_" + species.toUpperCase() + ".png";
+ File mapsDirectory = new File(resultFile, CoserConstants.STORAGE_MAPS_DIRECTORY);
+ result = new File(mapsDirectory, mapName);
+ }
}
}
}
Modified: trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties
===================================================================
--- trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2011-01-17 13:47:01 UTC (rev 517)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2011-01-17 17:02:39 UTC (rev 518)
@@ -97,6 +97,7 @@
coser.business.resultupload.duplicatedresult=Result %s/%s/%s duplicate another result for zone %s \!
coser.business.selection.notValidatedControl=Not validated control \!
coser.business.uploadresult.checkcollision=Checking zone collisions
+coser.business.uploadresult.modifyResultOptions=Modify result options
coser.business.uploadresult.preparezip=Preparing zip archive\u2026
coser.business.uploadresult.sendzip=Sending zip archive\u2026
coser.config.control.diffcatchlength.description=Percentage difference allowed between catch and length (in percent, for example 5% set 5.0)
Modified: trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties
===================================================================
--- trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2011-01-17 13:47:01 UTC (rev 517)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2011-01-17 17:02:39 UTC (rev 518)
@@ -97,6 +97,7 @@
coser.business.resultupload.duplicatedresult=Le r\u00E9sultat %s/%s/%s duplique un autre r\u00E9sultat pour la zone %s \!
coser.business.selection.notValidatedControl=Contr\u00F4le non valid\u00E9 \!
coser.business.uploadresult.checkcollision=V\u00E9rification des collisions de zones
+coser.business.uploadresult.modifyResultOptions=Modification des options des r\u00E9sultats
coser.business.uploadresult.preparezip=Pr\u00E9paration de l'archive zip\u2026
coser.business.uploadresult.sendzip=Envoi de l'archive zip\u2026
coser.config.control.diffcatchlength.description=Pourcentage d'\u00E9cart tol\u00E9r\u00E9 entre les captures et les tailles (en pourcent, par exemple pour 5% mettre 5.0)
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java 2011-01-17 13:47:01 UTC (rev 517)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java 2011-01-17 17:02:39 UTC (rev 518)
@@ -154,6 +154,8 @@
// get result selected by user
SelectUploadResultView parentView = view.getContextValue(SelectUploadResultView.class, JAXXUtil.PARENT);
final Collection<Object[]> selectedResult = parentView.getSelectedResultTableModel().getResultPath();
+ final Collection<Object[]> mapResult = parentView.getSelectedResultTableModel().getMapResult();
+ final Collection<Object[]> publishDataResult = parentView.getSelectedResultTableModel().getPublishDataResult();
if (CollectionUtils.isNotEmpty(selectedResult)) {
SwingWorker<String, Void> task = new SwingWorker<String, Void>() {
@@ -163,7 +165,7 @@
// get progress bar
CoserProgressBar progressBar = view.getUploadProgressBar();
WebService webService = view.getContextValue(WebService.class);
- String status = webService.performResultUpload(selectedResult, login, password, progressBar);
+ String status = webService.performResultUpload(selectedResult, mapResult, publishDataResult, login, password, progressBar);
return status;
}
catch (CoserBusinessException ex) {
1
0
r517 - in trunk/coser-web/src/main: resources/fr/ifremer/coser/web webapp/WEB-INF/content/com webapp/WEB-INF/content/map webapp/WEB-INF/content/pop webapp/WEB-INF/content/source
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
17 Jan '11
Author: chatellier
Date: 2011-01-17 13:47:01 +0000 (Mon, 17 Jan 2011)
New Revision: 517
Log:
Update i18n
Modified:
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-17 13:44:46 UTC (rev 516)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-17 13:47:01 UTC (rev 517)
@@ -49,4 +49,5 @@
message.common.selectzone=Select a zone
message.common.selectfacade=Select a facade
message.common.selectindicator=Select an indicator
-message.source.download=Download
\ No newline at end of file
+message.source.download=Download
+message.common.noresults=No results available
\ No newline at end of file
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties 2011-01-17 13:44:46 UTC (rev 516)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties 2011-01-17 13:47:01 UTC (rev 517)
@@ -43,6 +43,7 @@
message.common.selectzone=Select a zone
message.common.selectfacade=Select a facade
message.common.selectindicator=Select an indicator
+message.common.noresults=No results available
message.source.download=Download
message.quality.paragraph1=Bien que les donn\u00E9es aient \u00E9t\u00E9 pr\u00E9cautionneusement contr\u00F4l\u00E9es par l''Ifremer, des d\u00E9fauts inh\u00E9rents \u00E0 l''agr\u00E9gation des informations peuvent persister. Par exemple\u00A0:
message.quality.paragraph2=En d\u00E9pit du fait que toutes les donn\u00E9es de toutes les s\u00E9ries de campagnes soient pr\u00E9sent\u00E9es selon le m\u00EAme format, sauf cas particuliers des diff\u00E9rences dans les strat\u00E9gies d''observation emp\u00EAchent la combinaison de donn\u00E9es de diff\u00E9rentes campagnes dans une m\u00EAme analyse. Par exemple, la capturabilit\u00E9 d\'une m\u00EAme esp\u00E8ce varie selon le type d''engin d''\u00E9chantillonnage utilis\u00E9. Il en r\u00E9sulte que chaque engin capture un sous-ensemble particulier des bioc\u00E9noses \u00E9chantillonn\u00E9es.
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-17 13:44:46 UTC (rev 516)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-17 13:47:01 UTC (rev 517)
@@ -43,6 +43,7 @@
message.common.selectzone=Selectionnez une zone
message.common.selectfacade=Selectionnez une facade
message.common.selectindicator=Selectionnez un indicateur
+message.common.noresults=Aucun résultat disponible
message.source.download=T\u00E9l\u00E9charger
message.quality.paragraph1=Bien que les donn\u00E9es aient \u00E9t\u00E9 pr\u00E9cautionneusement contr\u00F4l\u00E9es par l''Ifremer, des d\u00E9fauts inh\u00E9rents \u00E0 l''agr\u00E9gation des informations peuvent persister. Par exemple\u00A0:
message.quality.paragraph2=En d\u00E9pit du fait que toutes les donn\u00E9es de toutes les s\u00E9ries de campagnes soient pr\u00E9sent\u00E9es selon le m\u00EAme format, sauf cas particuliers des diff\u00E9rences dans les strat\u00E9gies d''observation emp\u00EAchent la combinaison de donn\u00E9es de diff\u00E9rentes campagnes dans une m\u00EAme analyse. Par exemple, la capturabilit\u00E9 d\'une m\u00EAme esp\u00E8ce varie selon le type d''engin d''\u00E9chantillonnage utilis\u00E9. Il en r\u00E9sulte que chaque engin capture un sous-ensemble particulier des bioc\u00E9noses \u00E9chantillonn\u00E9es.
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp 2011-01-17 13:44:46 UTC (rev 516)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp 2011-01-17 13:47:01 UTC (rev 517)
@@ -35,7 +35,7 @@
<br />
<s:if test="%{zones.isEmpty()}">
- No result founds
+ <s:text name="message.common.noresults"></s:text>
</s:if>
<s:else>
<s:form action="indicator" method="get">
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp 2011-01-17 13:44:46 UTC (rev 516)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp 2011-01-17 13:47:01 UTC (rev 517)
@@ -35,7 +35,7 @@
<br />
<s:if test="%{zones.isEmpty()}">
- No result founds
+ <s:text name="message.common.noresults"></s:text>
</s:if>
<s:else>
<s:form action="species" method="get">
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-17 13:44:46 UTC (rev 516)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-17 13:47:01 UTC (rev 517)
@@ -48,7 +48,7 @@
<br />
<s:if test="%{zones.isEmpty()}">
- No result founds
+ <s:text name="message.common.noresults"></s:text>
</s:if>
<s:else>
<s:form action="species" method="get">
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp 2011-01-17 13:44:46 UTC (rev 516)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp 2011-01-17 13:47:01 UTC (rev 517)
@@ -35,7 +35,7 @@
<br />
<s:if test="%{zones.isEmpty()}">
- No result founds
+ <s:text name="message.common.noresults"></s:text>
</s:if>
<s:else>
<s:form action="source" method="get">
1
0
r516 - in trunk/coser-web/src/main: resources/fr/ifremer/coser/web webapp/WEB-INF/content webapp/WEB-INF/content/com webapp/WEB-INF/content/map webapp/WEB-INF/content/pop webapp/WEB-INF/content/source webapp/WEB-INF/decorators webapp/styles
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
17 Jan '11
Author: chatellier
Date: 2011-01-17 13:44:46 +0000 (Mon, 17 Jan 2011)
New Revision: 516
Log:
Update i18n
Modified:
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
trunk/coser-web/src/main/webapp/WEB-INF/content/com/facade.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/facade.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
trunk/coser-web/src/main/webapp/styles/coser.css
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2011-01-17 13:44:46 UTC (rev 516)
@@ -45,3 +45,8 @@
message.quality.paragraph3=Une propri\u00E9t\u00E9 commune aux s\u00E9ries d''observations \u00E0 la mer est l''\u00E9volution dans le temps de la comp\u00E9tence des \u00E9quipes embarqu\u00E9es pour la d\u00E9termination des esp\u00E8ces. Il peut en r\u00E9sulter des apparitions, des disparitions ou des assignations sous un m\u00EAme nom de taxons proches dans les jeux de donn\u00E9es, non repr\u00E9sentatifs de l''\u00E9volution des populations concern\u00E9es dans l''\u00E9cosyst\u00E8me.
message.quality.paragraph4=Pour les campagnes d\'une m\u00EAme s\u00E9rie, des changements dans les proc\u00E9dures d''\u00E9chantillonnage, dans les caract\u00E9ristiques des engins, dans la p\u00E9riode de r\u00E9alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr\u00E9venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn\u00E9es doivent \u00EAtre pr\u00E9alablement filtr\u00E9s ad\u00E9quatement.
message.quality.paragraph5=Il est vivement recommand\u00E9 aux utilisateurs de donn\u00E9es de les traiter avec pr\u00E9caution. Si des utilisateurs s''interrogent sur la validit\u00E9 de donn\u00E9es, ils sont invit\u00E9s \u00E0 contacter l''administrateur de la base de donn\u00E9es ({0}).
+message.common.selectpop=Select a population
+message.common.selectzone=Select a zone
+message.common.selectfacade=Select a facade
+message.common.selectindicator=Select an indicator
+message.source.download=Download
\ No newline at end of file
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties 2011-01-17 13:44:46 UTC (rev 516)
@@ -39,3 +39,13 @@
message.index.quotemessage=Ifremer {0,date,yyyy}. Indices de populations et de communautés issus des campagnes de surveillance halieutique de l''Ifremer. {1} ({0,date,dd MMMM})
message.index.qualitytitle=Avertissement qualit\u00E9
message.index.qualitymessage=Avertissement qualit\u00E9
+message.common.selectpop=Select a population
+message.common.selectzone=Select a zone
+message.common.selectfacade=Select a facade
+message.common.selectindicator=Select an indicator
+message.source.download=Download
+message.quality.paragraph1=Bien que les donn\u00E9es aient \u00E9t\u00E9 pr\u00E9cautionneusement contr\u00F4l\u00E9es par l''Ifremer, des d\u00E9fauts inh\u00E9rents \u00E0 l''agr\u00E9gation des informations peuvent persister. Par exemple\u00A0:
+message.quality.paragraph2=En d\u00E9pit du fait que toutes les donn\u00E9es de toutes les s\u00E9ries de campagnes soient pr\u00E9sent\u00E9es selon le m\u00EAme format, sauf cas particuliers des diff\u00E9rences dans les strat\u00E9gies d''observation emp\u00EAchent la combinaison de donn\u00E9es de diff\u00E9rentes campagnes dans une m\u00EAme analyse. Par exemple, la capturabilit\u00E9 d\'une m\u00EAme esp\u00E8ce varie selon le type d''engin d''\u00E9chantillonnage utilis\u00E9. Il en r\u00E9sulte que chaque engin capture un sous-ensemble particulier des bioc\u00E9noses \u00E9chantillonn\u00E9es.
+message.quality.paragraph3=Une propri\u00E9t\u00E9 commune aux s\u00E9ries d''observations \u00E0 la mer est l''\u00E9volution dans le temps de la comp\u00E9tence des \u00E9quipes embarqu\u00E9es pour la d\u00E9termination des esp\u00E8ces. Il peut en r\u00E9sulter des apparitions, des disparitions ou des assignations sous un m\u00EAme nom de taxons proches dans les jeux de donn\u00E9es, non repr\u00E9sentatifs de l''\u00E9volution des populations concern\u00E9es dans l''\u00E9cosyst\u00E8me.
+message.quality.paragraph4=Pour les campagnes d\'une m\u00EAme s\u00E9rie, des changements dans les proc\u00E9dures d''\u00E9chantillonnage, dans les caract\u00E9ristiques des engins, dans la p\u00E9riode de r\u00E9alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr\u00E9venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn\u00E9es doivent \u00EAtre pr\u00E9alablement filtr\u00E9s ad\u00E9quatement.
+message.quality.paragraph5=Il est vivement recommand\u00E9 aux utilisateurs de donn\u00E9es de les traiter avec pr\u00E9caution. Si des utilisateurs s''interrogent sur la validit\u00E9 de donn\u00E9es, ils sont invit\u00E9s \u00E0 contacter l''administrateur de la base de donn\u00E9es ({0}).
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2011-01-17 13:44:46 UTC (rev 516)
@@ -21,7 +21,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# #L%
###
-message.layout.title=Indices de populations et de communauté issus des campagnes de surveillance halieutique de l'Ifremer
+message.layout.title=Indices de populations et de communauté issus des campagnes de surveillance halieutique de l''Ifremer
message.layout.oceanicdatatitle=Gestion des donn\u00E9es des campagnes oc\u00E9anographiques
message.layout.oceanicdata1=le Syst\u00E8me d'informations scientifiques pour la mer de l'Ifremer (SISMER)
message.layout.oceanicdata2=le Syst\u00E8me d'information halieutique de l'Ifremer (SIH)
@@ -39,3 +39,13 @@
message.index.quotemessage=Ifremer {0,date,yyyy}. Indices de populations et de communautés issus des campagnes de surveillance halieutique de l''Ifremer. {1} ({0,date,dd MMMM})
message.index.qualitytitle=Avertissement qualit\u00E9
message.index.qualitymessage=Avertissement qualit\u00E9
+message.common.selectpop=Selectionnez un population
+message.common.selectzone=Selectionnez une zone
+message.common.selectfacade=Selectionnez une facade
+message.common.selectindicator=Selectionnez un indicateur
+message.source.download=T\u00E9l\u00E9charger
+message.quality.paragraph1=Bien que les donn\u00E9es aient \u00E9t\u00E9 pr\u00E9cautionneusement contr\u00F4l\u00E9es par l''Ifremer, des d\u00E9fauts inh\u00E9rents \u00E0 l''agr\u00E9gation des informations peuvent persister. Par exemple\u00A0:
+message.quality.paragraph2=En d\u00E9pit du fait que toutes les donn\u00E9es de toutes les s\u00E9ries de campagnes soient pr\u00E9sent\u00E9es selon le m\u00EAme format, sauf cas particuliers des diff\u00E9rences dans les strat\u00E9gies d''observation emp\u00EAchent la combinaison de donn\u00E9es de diff\u00E9rentes campagnes dans une m\u00EAme analyse. Par exemple, la capturabilit\u00E9 d\'une m\u00EAme esp\u00E8ce varie selon le type d''engin d''\u00E9chantillonnage utilis\u00E9. Il en r\u00E9sulte que chaque engin capture un sous-ensemble particulier des bioc\u00E9noses \u00E9chantillonn\u00E9es.
+message.quality.paragraph3=Une propri\u00E9t\u00E9 commune aux s\u00E9ries d''observations \u00E0 la mer est l''\u00E9volution dans le temps de la comp\u00E9tence des \u00E9quipes embarqu\u00E9es pour la d\u00E9termination des esp\u00E8ces. Il peut en r\u00E9sulter des apparitions, des disparitions ou des assignations sous un m\u00EAme nom de taxons proches dans les jeux de donn\u00E9es, non repr\u00E9sentatifs de l''\u00E9volution des populations concern\u00E9es dans l''\u00E9cosyst\u00E8me.
+message.quality.paragraph4=Pour les campagnes d\'une m\u00EAme s\u00E9rie, des changements dans les proc\u00E9dures d''\u00E9chantillonnage, dans les caract\u00E9ristiques des engins, dans la p\u00E9riode de r\u00E9alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr\u00E9venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn\u00E9es doivent \u00EAtre pr\u00E9alablement filtr\u00E9s ad\u00E9quatement.
+message.quality.paragraph5=Il est vivement recommand\u00E9 aux utilisateurs de donn\u00E9es de les traiter avec pr\u00E9caution. Si des utilisateurs s''interrogent sur la validit\u00E9 de donn\u00E9es, ils sont invit\u00E9s \u00E0 contacter l''administrateur de la base de donn\u00E9es ({0}).
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/facade.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/facade.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/facade.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -35,7 +35,7 @@
<br />
<s:form action="zone" method="get">
- <s:select name="facade" list="facades" label="Select a facade" />
+ <s:select name="facade" list="facades" label="%{getText('message.common.selectfacade')}" />
<s:submit label="Suite"/>
</s:form>
</body>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/indicator.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -35,7 +35,7 @@
<br />
<s:form action="graph" method="get">
- <s:select name="indicator" list="indicators" label="Select an indicator" />
+ <s:select name="indicator" list="indicators" label="%{getText('message.common.selectindicator')}" />
<s:hidden name="zone" property="zone"/>
<s:hidden name="species" property="species"/>
<s:submit label="Suite"/>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/com/zone.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -39,7 +39,7 @@
</s:if>
<s:else>
<s:form action="indicator" method="get">
- <s:select name="zone" list="zones" label="Select a sub zone" />
+ <s:select name="zone" list="zones" label="%{getText('message.common.selectzone')}" />
<s:submit label="Suite"/>
</s:form>
</s:else>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -35,7 +35,7 @@
<p><s:text name="message.index.paragraph3" /></p>
<p>
- <span style="font-weight:bold"><s:text name="message.index.datatypetitle" /> :</span><br />
+ <h2><s:text name="message.index.datatypetitle" /></h2>
<ul>
<li><s:a action="facade" namespace='/source'><s:text name="message.index.datatype1" /></s:a></li>
<li><s:a action="facade" namespace='/map'><s:text name="message.index.datatype2" /></s:a></li>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/facade.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -35,7 +35,7 @@
<br />
<s:form action="zone" method="get">
- <s:select name="facade" list="facades" label="Select a facade" />
+ <s:select name="facade" list="facades" label="%{getText('message.common.selectfacade')}" />
<s:submit label="Suite"/>
</s:form>
</body>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/species.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -36,7 +36,7 @@
<br />
<s:form action="map" method="get">
- <s:select name="species" list="species" label="Select a species" />
+ <s:select name="species" list="species" label="%{getText('message.common.selectspecies')}" />
<s:hidden name="zone" property="zone"/>
<s:submit label="Suite"/>
</s:form>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/map/zone.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -39,7 +39,7 @@
</s:if>
<s:else>
<s:form action="species" method="get">
- <s:select name="zone" list="zones" label="Select a sub zone" />
+ <s:select name="zone" list="zones" label="%{getText('message.common.selectzone')}" />
<s:submit label="Suite"/>
</s:form>
</s:else>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/facade.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/facade.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/facade.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -35,7 +35,7 @@
<br />
<s:form action="zone" method="get">
- <s:select name="facade" list="facades" label="Select a facade" />
+ <s:select name="facade" list="facades" label="%{getText('message.common.selectfacade')}" />
<s:submit label="Suite"/>
</s:form>
</body>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -36,7 +36,7 @@
<br />
<s:form action="graph" method="get">
- <s:select name="indicator" list="indicators" label="Select an indicator" />
+ <s:select name="indicator" list="indicators" label="%{getText('message.common.selectindicator')}" />
<s:hidden name="zone" property="zone"/>
<s:hidden name="species" property="species"/>
<s:submit label="Suite"/>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -37,7 +37,7 @@
<br />
<s:form action="indicator" method="get">
- <s:select name="species" list="species" label="Select a species" />
+ <s:select name="species" list="species" label="%{getText('message.common.selectspecies')}" />
<s:hidden name="zone" property="zone"/>
<s:submit label="Suite"/>
</s:form>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -52,7 +52,7 @@
</s:if>
<s:else>
<s:form action="species" method="get">
- <s:select name="zone" list="zones" label="Select a sub zone" emptyOption="true"
+ <s:select name="zone" list="zones" label="%{getText('message.common.selectpop')}" emptyOption="true"
onchange="javascript:coserShowSelectedZoneMap(this, 'coserzonemap')"/>
<s:submit label="Suite"/>
</s:form>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -36,7 +36,7 @@
<br />
<s:form action="zone" method="get">
- <s:select name="facade" list="facades" label="Select a facade" />
+ <s:select name="facade" list="facades" label="%{getText('message.common.selectfacade')}" />
<s:submit label="Suite"/>
</s:form>
</body>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/source.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -32,7 +32,7 @@
<s:a action="source-data">
<s:param name="zone" value="%{zone}" />
- Download
+ <s:text name="message.source.download"></s:text>
</s:a>.
</body>
</html>
\ No newline at end of file
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/zone.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -39,7 +39,7 @@
</s:if>
<s:else>
<s:form action="source" method="get">
- <s:select name="zone" list="zones" label="Select a sub zone" />
+ <s:select name="zone" list="zones" label="%{getText('message.common.selectzone')}" />
<s:submit label="Suite"/>
</s:form>
</s:else>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -34,14 +34,15 @@
<decorator:head/>
</head>
<body>
-
+
<div id="conteneur">
<div id="head" class="clearfix">
- <a href="#" class="logoSIH">Système d'Information Halieutique</a>
- <h1>Indices de populations et de communauté <br/>
- issus des campagnes de <span class="jaune">surveillance halieutique</span> de <span class="jaune">l'Ifremer </span>
+ <a href="http://www.ifremer.fr/sih/" class="logoSIH">Système d'Information Halieutique</a>
+ <h1><!-- Indices de populations et de communauté <br/>
+ issus des campagnes de <span class="jaune">surveillance halieutique</span> de <span class="jaune">l'Ifremer </span> -->
+ <s:text name="message.layout.title" />
</h1>
- <a href="#" class="logoIfremer">L'Ifremer</a>
+ <a href="http://www.ifremer.fr/" class="logoIfremer">L'Ifremer</a>
</div>
<div id="middle" class="clearfix">
@@ -50,8 +51,13 @@
<div class="content">
<div class="degrade">
<div class="top_content">
- <a href="<s:url action='index' />" class="accueil">Accueil</a>
- <a href="<s:url action='index' />" class="anglais">Anglais</a>
+ <a href="<s:url action='index' namespace='/' />" class="accueil"><s:text name="message.index.title" /></a>
+ <a href="<s:url namespace="/" action="locale">
+ <s:param name="request_locale" >en</s:param>
+ </s:url>" class="anglais">Anglais</a>
+ <a href="<s:url namespace="/" action="locale">
+ <s:param name="request_locale" >fr</s:param>
+ </s:url>" class="francais">Francais</a>
</div>
<decorator:body/>
@@ -66,8 +72,8 @@
<div class="mgt20">
<h3><s:text name="message.layout.oceanicdatatitle" /></h3>
<ul>
- <li><a href="#" class="lien"><s:text name="message.layout.oceanicdata1" /></a></li>
- <li><a href="#" class="lien"><s:text name="message.layout.oceanicdata2" /></a></li>
+ <li><a href="http://www.ifremer.fr/sismer/index_FR.htm" class="lien"><s:text name="message.layout.oceanicdata1" /></a></li>
+ <li><a href="http://www.ifremer.fr/sih/" class="lien"><s:text name="message.layout.oceanicdata2" /></a></li>
</ul>
</div>
</div>
@@ -75,7 +81,7 @@
</div>
<div id="footer">
<ul class="clearfix">
- <li><a href="#">Contact</a></li>
+ <li><a href="harmonie at ifremer.fr">Contact</a></li>
<li><a href="#">Mentions Légales</a></li>
</ul>
</div>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2011-01-17 13:44:46 UTC (rev 516)
@@ -37,18 +37,24 @@
<div id="conteneur_int">
<div id="head" class="clearfix">
- <a href="#" class="logoSIH">Système d'Information Halieutique</a>
- <h1>Indices de populations et de communauté <br/>
- issus des campagnes de <span class="jaune">surveillance halieutique</span> de <span class="jaune">l'Ifremer </span>
+ <a href="http://www.ifremer.fr/sih/" class="logoSIH">Système d'Information Halieutique</a>
+ <h1><!-- Indices de populations et de communauté <br/>
+ issus des campagnes de <span class="jaune">surveillance halieutique</span> de <span class="jaune">l'Ifremer </span> -->
+ <s:text name="message.layout.title" />
</h1>
- <a href="#" class="logoIfremer">L'Ifremer</a>
+ <a href="http://www.ifremer.fr/" class="logoIfremer">L'Ifremer</a>
</div>
<div id="middle" class="clearfix">
<div class="top_content clearfix">
- <a href="<s:url action='index' />" class="accueil">Accueil</a>
- <a href="<s:url action='index' />" class="anglais">Anglais</a>
+ <a href="<s:url action='index' namespace='/' />" class="accueil"><s:text name="message.index.title" /></a>
+ <a href="<s:url namespace="/" action="locale">
+ <s:param name="request_locale" >en</s:param>
+ </s:url>" class="anglais">Anglais</a>
+ <a href="<s:url namespace="/" action="locale">
+ <s:param name="request_locale" >fr</s:param>
+ </s:url>" class="francais">Francais</a>
</div>
<div class="page">
@@ -68,8 +74,8 @@
<div>
<h3><s:text name="message.layout.oceanicdatatitle" /></h3>
<ul>
- <li><a href="#" class="lien"><s:text name="message.layout.oceanicdata1" /></a></li>
- <li><a href="#" class="lien"><s:text name="message.layout.oceanicdata2" /></a></li>
+ <li><a href="http://www.ifremer.fr/sismer/index_FR.htm" class="lien"><s:text name="message.layout.oceanicdata1" /></a></li>
+ <li><a href="http://www.ifremer.fr/sih/" class="lien"><s:text name="message.layout.oceanicdata2" /></a></li>
</ul>
</div>
</div>
@@ -78,7 +84,7 @@
</div>
<div id="footer">
<ul class="clearfix">
- <li><a href="#">Contact</a></li>
+ <li><a href="harmonie at ifremer.fr">Contact</a></li>
<li><a href="#">Mentions Légales</a></li>
</ul>
</div>
Modified: trunk/coser-web/src/main/webapp/styles/coser.css
===================================================================
--- trunk/coser-web/src/main/webapp/styles/coser.css 2011-01-17 12:53:39 UTC (rev 515)
+++ trunk/coser-web/src/main/webapp/styles/coser.css 2011-01-17 13:44:46 UTC (rev 516)
@@ -435,15 +435,31 @@
position: absolute;
right: 0;
top: 10px;
- width: 32px;
- height: 24px;
- border: 2px solid #fff;
+ width: 16px;
+ height: 11px;
+ border: 2px solid transparent;
}
#middle .top_content .anglais:hover {
border: 2px solid #ffe600;
}
+#middle .top_content .francais {
+ display: block;
+ text-indent: -999999px;
+ background: url(../images/fr.png) no-repeat;
+ position: absolute;
+ right: 20px;
+ top: 10px;
+ width: 16px;
+ height: 11px;
+ border: 2px solid transparent;
+}
+
+#middle .top_content .francais:hover {
+ border: 2px solid #ffe600;
+}
+
#middle .page .degrade ul li {
list-style: none;
padding-left: 10px;
@@ -517,7 +533,7 @@
background: url(../images/footer.png) repeat-x;
height: 45px;
padding: 10px 20px 15px 20px;
- margin: 30px 0;
+ /*margin: 30px 0;*/
position: relative;
}
@@ -560,6 +576,12 @@
right: 20px;
}
+#conteneur_int .top_content .francais {
+ position: absolute;
+ top: 22px;
+ right: 40px;
+}
+
#conteneur_int #middle .col_droite {
margin: 0;
}
1
0
r515 - trunk/coser-web/src/main/webapp/WEB-INF/content
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
17 Jan '11
Author: chatellier
Date: 2011-01-17 12:53:39 +0000 (Mon, 17 Jan 2011)
New Revision: 515
Log:
Use namespace in action
Modified:
trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp 2011-01-17 11:00:45 UTC (rev 514)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp 2011-01-17 12:53:39 UTC (rev 515)
@@ -37,10 +37,10 @@
<p>
<span style="font-weight:bold"><s:text name="message.index.datatypetitle" /> :</span><br />
<ul>
- <li><s:a action="source/facade"><s:text name="message.index.datatype1" /></s:a></li>
- <li><s:a action="map/facade"><s:text name="message.index.datatype2" /></s:a></li>
- <li><s:a action="pop/facade"><s:text name="message.index.datatype3" /></s:a></li>
- <li><s:a action="com/facade"><s:text name="message.index.datatype4" /></s:a></li>
+ <li><s:a action="facade" namespace='/source'><s:text name="message.index.datatype1" /></s:a></li>
+ <li><s:a action="facade" namespace='/map'><s:text name="message.index.datatype2" /></s:a></li>
+ <li><s:a action="facade" namespace='/pop'><s:text name="message.index.datatype3" /></s:a></li>
+ <li><s:a action="facade" namespace='/com'><s:text name="message.index.datatype4" /></s:a></li>
</ul>
</p>
1
0
r514 - in trunk: coser-business/src/main/java/fr/ifremer/coser/services coser-web/src/main/java/fr/ifremer/coser/web/actions/pop coser-web/src/main/webapp coser-web/src/main/webapp/WEB-INF coser-web/src/main/webapp/WEB-INF/content/pop coser-web/src/main/webapp/WEB-INF/content/source coser-web/src/main/webapp/WEB-INF/decorators coser-web/src/main/webapp/images coser-web/src/main/webapp/images/zones coser-web/src/main/webapp/js
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
by chatellier@users.labs.libre-entreprise.org 17 Jan '11
17 Jan '11
Author: chatellier
Date: 2011-01-17 11:00:45 +0000 (Mon, 17 Jan 2011)
New Revision: 514
Log:
Add sublayout and zone maps.
Added:
trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
trunk/coser-web/src/main/webapp/images/zones/
trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4b-4c.jpg
trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c-E7d.jpg
trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c.jpg
trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c4-E7d.jpg
trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c4.jpg
trunk/coser-web/src/main/webapp/images/zones/C_Ciem-7d.jpg
trunk/coser-web/src/main/webapp/images/zones/C_Ciem-E7d.jpg
trunk/coser-web/src/main/webapp/images/zones/C_E-Corse.jpg
trunk/coser-web/src/main/webapp/images/zones/C_GdG-Ciem-7.jpg
trunk/coser-web/src/main/webapp/images/zones/C_GdG-Ech.jpg
trunk/coser-web/src/main/webapp/images/zones/C_GdG-MC.jpg
trunk/coser-web/src/main/webapp/images/zones/C_GdL.jpg
trunk/coser-web/src/main/webapp/images/zones/C_MC-Ciem-7.jpg
trunk/coser-web/src/main/webapp/images/zones/C_MC-Ech.jpg
trunk/coser-web/src/main/webapp/images/zones/C_Noursein.jpg
trunk/coser-web/src/main/webapp/js/
trunk/coser-web/src/main/webapp/js/coser.js
trunk/coser-web/src/main/webapp/js/jquery-1.4.4.min.js
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp
trunk/coser-web/src/main/webapp/WEB-INF/decorators.xml
trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-17 09:23:20 UTC (rev 513)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-17 11:00:45 UTC (rev 514)
@@ -787,6 +787,44 @@
}
/**
+ * Recupere la liste des cartes pour chaque id de zone sous forme de Map.
+ *
+ * @return zone images map
+ * @throws CoserBusinessException
+ */
+ public Map<String, String> getZonePictures() throws CoserBusinessException {
+ Map<String, String> result = new HashMap<String, String>();
+
+ Iterator<String[]> itZone = getZonesMap().iterator(true);
+ while (itZone.hasNext()) {
+ // "id";"facade";"zone";"periode";"serie";"comment";"map"
+ String[] tuple = itZone.next();
+ result.put(tuple[0], tuple[6]);
+ }
+
+ return result;
+ }
+
+ /**
+ * Recupere la liste des meta info pour chaque id de zone sous forme de Map.
+ *
+ * @return zone meta info map
+ * @throws CoserBusinessException
+ */
+ public Map<String, String> getZoneMetaInfo() throws CoserBusinessException {
+ Map<String, String> result = new HashMap<String, String>();
+
+ Iterator<String[]> itZone = getZonesMap().iterator(true);
+ while (itZone.hasNext()) {
+ // "id";"facade";"zone";"periode";"serie";"comment";"map"
+ String[] tuple = itZone.next();
+ result.put(tuple[0], tuple[5]);
+ }
+
+ return result;
+ }
+
+ /**
* Recuperer la liste des populations pour une zone donnée.
*
* @param zone zone id
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java 2011-01-17 09:23:20 UTC (rev 513)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/pop/ZoneAction.java 2011-01-17 11:00:45 UTC (rev 514)
@@ -47,26 +47,38 @@
protected String facade;
+ protected Map<String, String> zones;
+
+ protected Map<String, String> zonesPictures;
+
+ protected Map<String, String> zonesMetaInfo;
+
public void setFacade(String facade) {
this.facade = facade;
}
- protected Map<String, String> zones;
-
public Map<String, String> getZones() {
return zones;
}
+ public Map<String, String> getZonesPictures() {
+ return zonesPictures;
+ }
+
+ public Map<String, String> getZonesMetaInfo() {
+ return zonesMetaInfo;
+ }
+
@Override
public String execute() {
WebService webService = ServiceFactory.getWebService();
+
try {
-
- // renvoi la liste des id subzone-survey et leurs label
- // associé
+ // renvoi la liste des id subzone-survey et leurs label associé
zones = webService.getZoneForFacade(facade);
-
+ zonesPictures = webService.getZonePictures();
+ zonesMetaInfo = webService.getZoneMetaInfo();
} catch (CoserBusinessException ex) {
throw new CoserWebException("Can't get zone map", ex);
}
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp 2011-01-17 09:23:20 UTC (rev 513)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/indicator.jsp 2011-01-17 11:00:45 UTC (rev 514)
@@ -30,6 +30,7 @@
<title>Coser</title>
</head>
<body>
+
<img src="<s:url value='/images/zonesmap.jpg' />" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp 2011-01-17 09:23:20 UTC (rev 513)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/species.jsp 2011-01-17 11:00:45 UTC (rev 514)
@@ -31,6 +31,7 @@
</head>
<body>
+
<img src="<s:url value='/images/zonesmap.jpg' />" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-17 09:23:20 UTC (rev 513)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/pop/zone.jsp 2011-01-17 11:00:45 UTC (rev 514)
@@ -27,11 +27,24 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Coser</title>
+ <script type="text/javascript" language="javascript" src="<s:url value='/js/coser.js' />"></script>
</head>
<body>
- <img src="<s:url value='/images/zonesmap.jpg' />" />
+ <s:iterator value="zonesPictures.entrySet()">
+ <div id="coserzonemap<s:property value='%{key}' />" style="display:none">
+ <div>
+ <img src="<s:url value='/images/zones/' /><s:property value='%{value}' />" style="width: 590px; heigth: 812px"/>
+ </div>
+ <s:property value='%{zonesMetaInfo.get(key)}' />
+ </div>
+ </s:iterator>
+
+ <div id="coserzonemap">
+ <img src="<s:url value='/images/zonesmap.jpg' />" />
+ </div>
+
<br />
<s:if test="%{zones.isEmpty()}">
@@ -39,9 +52,11 @@
</s:if>
<s:else>
<s:form action="species" method="get">
- <s:select name="zone" list="zones" label="Select a sub zone" />
+ <s:select name="zone" list="zones" label="Select a sub zone" emptyOption="true"
+ onchange="javascript:coserShowSelectedZoneMap(this, 'coserzonemap')"/>
<s:submit label="Suite"/>
</s:form>
</s:else>
+
</body>
</html>
\ No newline at end of file
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp 2011-01-17 09:23:20 UTC (rev 513)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/source/facade.jsp 2011-01-17 11:00:45 UTC (rev 514)
@@ -30,6 +30,7 @@
</head>
<body>
+
<img src="<s:url value='/images/zonesmap.jpg' />" />
<br />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2011-01-17 09:23:20 UTC (rev 513)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2011-01-17 11:00:45 UTC (rev 514)
@@ -29,6 +29,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><decorator:title default="Coser"/></title>
+ <script type="text/javascript" language="javascript" src="<s:url value='/js/jquery-1.4.4.min.js' />"></script>
<link rel="stylesheet" type="text/css" href="<s:url value='/styles/coser.css' />" />
<decorator:head/>
</head>
@@ -44,6 +45,7 @@
</div>
<div id="middle" class="clearfix">
+
<div class="page">
<div class="content">
<div class="degrade">
@@ -58,7 +60,7 @@
</div>
<span class="clb"> </span>
- </div>
+ </div>
<div class="col_droite">
<img src="<s:url value='/images/carte_accueil.png'/>" alt="carte des zones de campage en europe" title="carte des zones de campage en europe"/>
<div class="mgt20">
Added: trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp (rev 0)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2011-01-17 11:00:45 UTC (rev 514)
@@ -0,0 +1,86 @@
+<!--
+ #%L
+ Coser :: Web
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ #L%
+ -->
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<%@taglib uri="/struts-tags" prefix="s" %>
+<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title><decorator:title default="Coser"/></title>
+ <script type="text/javascript" language="javascript" src="<s:url value='/js/jquery-1.4.4.min.js' />"></script>
+ <link rel="stylesheet" type="text/css" href="<s:url value='/styles/coser.css' />" />
+ <decorator:head/>
+ </head>
+ <body>
+
+ <div id="conteneur_int">
+ <div id="head" class="clearfix">
+ <a href="#" class="logoSIH">Système d'Information Halieutique</a>
+ <h1>Indices de populations et de communauté <br/>
+ issus des campagnes de <span class="jaune">surveillance halieutique</span> de <span class="jaune">l'Ifremer </span>
+ </h1>
+ <a href="#" class="logoIfremer">L'Ifremer</a>
+ </div>
+
+ <div id="middle" class="clearfix">
+
+ <div class="top_content clearfix">
+ <a href="<s:url action='index' />" class="accueil">Accueil</a>
+ <a href="<s:url action='index' />" class="anglais">Anglais</a>
+ </div>
+
+ <div class="page">
+ <span class="clt"></span>
+ <div class="content">
+ <div class="clearfix">
+
+ <decorator:body/>
+
+ </div>
+ </div>
+
+ <span class="clb2"> </span>
+ </div>
+ <div class="part_bottom">
+ <div class="col_droite">
+ <div>
+ <h3><s:text name="message.layout.oceanicdatatitle" /></h3>
+ <ul>
+ <li><a href="#" class="lien"><s:text name="message.layout.oceanicdata1" /></a></li>
+ <li><a href="#" class="lien"><s:text name="message.layout.oceanicdata2" /></a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="footer">
+ <ul class="clearfix">
+ <li><a href="#">Contact</a></li>
+ <li><a href="#">Mentions Légales</a></li>
+ </ul>
+ </div>
+ </body>
+</html>
\ No newline at end of file
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators.xml
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators.xml 2011-01-17 09:23:20 UTC (rev 513)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators.xml 2011-01-17 11:00:45 UTC (rev 514)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2010 - 2011 Ifremer, Codelutin
+ Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
%%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@@ -22,12 +22,19 @@
#L%
-->
<decorators defaultdir="/WEB-INF/decorators">
- <excludes>
- <pattern>/styles/*</pattern>
- <pattern>/images/*</pattern>
- </excludes>
-
- <decorator name="layout" page="layout.jsp">
- <pattern>/*</pattern>
- </decorator>
+ <excludes>
+ <pattern>/styles/*</pattern>
+ <pattern>/images/*</pattern>
+ </excludes>
+
+ <decorator name="layout" page="layout.jsp">
+ <pattern>/*</pattern>
+ </decorator>
+
+ <decorator name="sublayout" page="sublayout.jsp">
+ <pattern>/pop/*</pattern>
+ <pattern>/com/*</pattern>
+ <pattern>/map/*</pattern>
+ <pattern>/source/*</pattern>
+ </decorator>
</decorators>
\ No newline at end of file
Added: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4b-4c.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4b-4c.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c-E7d.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c-E7d.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c4-E7d.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c4-E7d.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c4.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-4c4.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-7d.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-7d.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-E7d.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_Ciem-E7d.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_E-Corse.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_E-Corse.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_GdG-Ciem-7.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_GdG-Ciem-7.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_GdG-Ech.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_GdG-Ech.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_GdG-MC.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_GdG-MC.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_GdL.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_GdL.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_MC-Ciem-7.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_MC-Ciem-7.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_MC-Ech.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_MC-Ech.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/images/zones/C_Noursein.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/zones/C_Noursein.jpg
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/coser-web/src/main/webapp/js/coser.js
===================================================================
--- trunk/coser-web/src/main/webapp/js/coser.js (rev 0)
+++ trunk/coser-web/src/main/webapp/js/coser.js 2011-01-17 11:00:45 UTC (rev 514)
@@ -0,0 +1,7 @@
+
+function coserShowSelectedZoneMap(select, prefix) {
+ // cache toutes les autres cartes
+ $('div[id^=' + prefix + ']').hide();
+ // affiche la carte selectionnee
+ $('#' + prefix + $(select).val()).show();
+}
\ No newline at end of file
Added: trunk/coser-web/src/main/webapp/js/jquery-1.4.4.min.js
===================================================================
--- trunk/coser-web/src/main/webapp/js/jquery-1.4.4.min.js (rev 0)
+++ trunk/coser-web/src/main/webapp/js/jquery-1.4.4.min.js 2011-01-17 11:00:45 UTC (rev 514)
@@ -0,0 +1,167 @@
+/*!
+ * jQuery JavaScript Library v1.4.4
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Nov 11 19:04:53 2010 -0500
+ */
+(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
+h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
+h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
+"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
+e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
+"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
+s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
+j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
+toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
+-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
+if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
+if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
+b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
+!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
+l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
+z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
+s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
+s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
+[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
+false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
+k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
+scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
+1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
+"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
+c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
+else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
+a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
+c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
+a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
+colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
+1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
+l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
+"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
+if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
+a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
+attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
+b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
+c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
+arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
+d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
+c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
+w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
+8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
+"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!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:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
+Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
+c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
+var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
+"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
+xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
+B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
+"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
+0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
+a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
+1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
+"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
+c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
+(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
+[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
+break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
+q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
+l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
+return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
+B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=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|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
+POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
+i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
+i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
+"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
+m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
+true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
+g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
+0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
+"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
+i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
+if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
+g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
+for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
+i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
+n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
+function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
+p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
+t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
+function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
+c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
+not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
+h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
+c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
+2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
+b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
+e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={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,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
+else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
+c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
+b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
+this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
+prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
+b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
+1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
+d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
+jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
+zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
+h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
+if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
+d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
+e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
+"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
+!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
+getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
+script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
+!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
+false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
+A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
+b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
+c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
+c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
+encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
+[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
+e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
+if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
+3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
+d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
+d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
+"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
+1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
+d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
+Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.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=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
+var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
+this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
+this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
+c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
+b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
+h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
+for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
+parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
+height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
+f.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!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
+"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
+e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
+c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
+c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
+b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);
1
0