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
Author: echatellier
Date: 2012-11-16 16:56:23 +0100 (Fri, 16 Nov 2012)
New Revision: 1085
Url: http://forge.codelutin.com/repositories/revision/coser/1085
Log:
Fix dependencies
Modified:
trunk/coser-ui/pom.xml
trunk/pom.xml
Modified: trunk/coser-ui/pom.xml
===================================================================
--- trunk/coser-ui/pom.xml 2012-11-16 15:25:34 UTC (rev 1084)
+++ trunk/coser-ui/pom.xml 2012-11-16 15:56:23 UTC (rev 1085)
@@ -41,6 +41,10 @@
<artifactId>nuiton-utils</artifactId>
</dependency>
<dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>nuiton-validator</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.nuiton.i18n</groupId>
<artifactId>nuiton-i18n</artifactId>
</dependency>
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-11-16 15:25:34 UTC (rev 1084)
+++ trunk/pom.xml 2012-11-16 15:56:23 UTC (rev 1085)
@@ -122,6 +122,13 @@
</dependency>
<dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>nuiton-validator</artifactId>
+ <version>2.6.3</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
<groupId>org.nuiton.matrix</groupId>
<artifactId>nuiton-matrix</artifactId>
<version>2.3.2</version>
1
0
16 Nov '12
Author: echatellier
Date: 2012-11-16 16:25:34 +0100 (Fri, 16 Nov 2012)
New Revision: 1084
Url: http://forge.codelutin.com/repositories/revision/coser/1084
Log:
fixes #1614: Extraction des indicateurs et donn?\195?\169es depuis une recherche
Added:
trunk/coser-business/src/main/java/fr/ifremer/coser/util/DataType.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java
trunk/coser-web/src/main/webapp/WEB-INF/content/search/
trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-input.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-success.jsp
trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-wait.jsp
trunk/coser-web/src/main/webapp/images/stock_select_clear.png
trunk/coser-web/src/main/webapp/images/stock_select_table.png
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.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/main/resources/ftl/decharge_en.ftl
trunk/coser-business/src/main/resources/ftl/decharge_fr.ftl
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-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/DeleteProjectsAction.java
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_es.properties
trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties
trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp
trunk/coser-web/src/main/webapp/js/coser.js
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.java 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/CommonService.java 2012-11-16 15:25:34 UTC (rev 1084)
@@ -300,6 +300,7 @@
* @param category category used to replace species output field if needed (can be null)
*
* @throws CoserBusinessException
+ * @deprecated since 1.4, prefer use of {@link storeDataWhithoutQuote(DataStorage, Writer, Map, Category)}
*/
public void storeDataWhithoutQuote(DataStorage content, File file, Map<String, String> refTaxSpecies, Category category) throws CoserBusinessException {
@@ -307,7 +308,29 @@
Writer writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), CoserConstants.CSV_FILE_ENCODING));
+ storeDataWhithoutQuote(content, writer, refTaxSpecies, category);
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save data", ex);
+ } finally {
+ IOUtils.closeQuietly(writer);
+ }
+ }
+
+ /**
+ * Store data without quoting every columns with "" (r specific demand).
+ *
+ * @param content content to save
+ * @param file file to save to
+ * @param project project used only to get species output field (can be null)
+ * @param category category used to replace species output field if needed (can be null)
+ *
+ * @throws CoserBusinessException
+ * @since 1.4
+ */
+ public void storeDataWhithoutQuote(DataStorage content, Writer writer, Map<String, String> refTaxSpecies, Category category) throws CoserBusinessException {
+ // save content
+ try {
Iterator<String[]> itContent = content.iterator();
while (itContent.hasNext()) {
String[] contentDatas = itContent.next();
@@ -341,8 +364,6 @@
}
} catch (IOException ex) {
throw new CoserBusinessException("Can't save data", ex);
- } finally {
- IOUtils.closeQuietly(writer);
}
}
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 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/PublicationService.java 2012-11-16 15:25:34 UTC (rev 1084)
@@ -51,6 +51,8 @@
import java.util.TreeMap;
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.keyvalue.MultiKey;
+import org.apache.commons.collections.map.MultiKeyMap;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
@@ -303,7 +305,7 @@
File exportHtmlFile = null;
Writer out = null;
try {
- exportHtmlFile = File.createTempFile("errors-", ".html");
+ exportHtmlFile = File.createTempFile("coser-errors-", ".html");
exportHtmlFile.deleteOnExit();
if (log.isInfoEnabled()) {
log.info("Generating HTML report to " + exportHtmlFile.getAbsolutePath());
@@ -339,8 +341,7 @@
List<ControlError> validationErrors, Writer out, boolean includeProjectInfo) throws CoserBusinessException, IOException {
List<String> speciesGraph = new ArrayList<String>();
- File imageDirectory = FileUtil.createTempDirectory("images", "pdf");
- imageDirectory.mkdirs();
+ File imageDirectory = FileUtil.createTempDirectory("coser-images-", "-tmp");
imageDirectory.deleteOnExit();
out.write("<html><head>");
@@ -581,7 +582,7 @@
File exportHtmlFile = null;
Writer out = null;
try {
- exportHtmlFile = File.createTempFile("log-", ".html");
+ exportHtmlFile = File.createTempFile("coser-log-", ".html");
exportHtmlFile.deleteOnExit();
if (log.isInfoEnabled()) {
log.info("Generating HTML report to " + exportHtmlFile.getAbsolutePath());
@@ -824,7 +825,7 @@
* @param unit data unit
* @param locale locale
* @return generated graph image (temp file)
- * @throws CoserBusinessException
+ * @throws CoserBusinessException
*/
public File getRsufiResultComChart(Project project, File resultDirectory,
RSufiResult rsufiResult, File codeTypeEspecesFile, String indicator,
@@ -836,6 +837,10 @@
// le fichier estcomind
File estComIndFile = new File(resultDirectory, rsufiResult.getEstComIndName());
+ if (log.isDebugEnabled()) {
+ log.debug("Reading estComIndFile : " + estComIndFile);
+ }
+
// Campagne Indicateur Liste Strate Annee Estimation EcartType CV
DataStorage dataStorage = commonService.loadCSVFile(estComIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR);
@@ -844,9 +849,14 @@
// on prend dans ce cas la premiere valeur trouvée
String localList = list;
+ if (log.isDebugEnabled()) {
+ log.debug("Searching list for indicator : " + indicator);
+ }
+
int multiplicator = 1;
int minYear = Integer.MAX_VALUE;
int maxYear = Integer.MIN_VALUE;
+ boolean indicatorFound = false;
Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>();
Iterator<String[]> estComIndIterator = dataStorage.iterator(true);
while (estComIndIterator.hasNext()) {
@@ -856,6 +866,7 @@
String indicatorList = tuple[2];
if (indicatorCode.equals(indicator)) {
+ indicatorFound = true;
// si pas de list selectionnée, on prend la premiere
if (StringUtils.isBlank(localList)) {
@@ -887,109 +898,114 @@
}
}
- // get graph title
- String chartTitle = zoneDisplayName;
- chartTitle += " - " + indicatorName;
-
- // ajout de la traduction de la liste d'indicateur
- // les liste sont a1, T1, T2 ...
- String listLetter = String.valueOf(localList.charAt(0));
- DataStorage dataStorageType = commonService.loadCSVFile(codeTypeEspecesFile, CoserConstants.CSV_SEPARATOR_CHAR);
- Iterator<String[]> typeIterator = dataStorageType.iterator(true);
- while (typeIterator.hasNext()) {
- // "Types";"Commentaire";"NumSys min";"NumSys max";"Code"
- String[] tuple = typeIterator.next();
- if (tuple[4].equals(listLetter)) {
- /// gestion du groupe "Tous"
- // cas special, c'est la seule valeur du fichier
- // code type espece qui a besoin d'une traduction
- if (tuple[4].equalsIgnoreCase("T")) {
- if ("fr".equals(locale.getLanguage())) {
- chartTitle += " - " + "Tous Liste " + localList.charAt(1);
- } else if ("es".equals(locale.getLanguage())) {
- chartTitle += " - " + "Todo Lista " + localList.charAt(1);
- } else {
- chartTitle += " - " + "All List " + localList.charAt(1);
+ // avec l'extraction des données, on peut demander a générer un graphique
+ // sur un indicateur qui n'est pas présent dans le projet courant,
+ // dans ce cas, on retourne null
+ if (indicatorFound) {
+ // get graph title
+ String chartTitle = zoneDisplayName;
+ chartTitle += " - " + indicatorName;
+
+ // ajout de la traduction de la liste d'indicateur
+ // les liste sont a1, T1, T2 ...
+ String listLetter = String.valueOf(localList.charAt(0));
+ DataStorage dataStorageType = commonService.loadCSVFile(codeTypeEspecesFile, CoserConstants.CSV_SEPARATOR_CHAR);
+ Iterator<String[]> typeIterator = dataStorageType.iterator(true);
+ while (typeIterator.hasNext()) {
+ // "Types";"Commentaire";"NumSys min";"NumSys max";"Code"
+ String[] tuple = typeIterator.next();
+ if (tuple[4].equals(listLetter)) {
+ /// gestion du groupe "Tous"
+ // cas special, c'est la seule valeur du fichier
+ // code type espece qui a besoin d'une traduction
+ if (tuple[4].equalsIgnoreCase("T")) {
+ if ("fr".equals(locale.getLanguage())) {
+ chartTitle += " - " + "Tous Liste " + localList.charAt(1);
+ } else if ("es".equals(locale.getLanguage())) {
+ chartTitle += " - " + "Todo Lista " + localList.charAt(1);
+ } else {
+ chartTitle += " - " + "All List " + localList.charAt(1);
+ }
}
+ else {
+ // ajout de la traduction du nom de liste plus le numéro
+ if ("fr".equals(locale.getLanguage())) {
+ chartTitle += " - " + tuple[0] + " Liste " + localList.charAt(1);
+ } else if ("es".equals(locale.getLanguage())) {
+ chartTitle += " - " + tuple[0] + " Lista " + localList.charAt(1);
+ } else {
+ chartTitle += " - " + tuple[0] + " List " + localList.charAt(1);
+ }
+ }
+ break;
}
+ }
+
+ // generate dataset with sorted data
+ DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
+ for (int indexYear = minYear ; indexYear <= maxYear ; ++indexYear) {
+ Double[] entry = graphData.get(indexYear);
+ if (entry != null) {
+ Double estimation = entry[0] / multiplicator;
+ Double ecart = entry[1] / multiplicator;
+ statisticalDataset.add(estimation, ecart, "Serie1", (Comparable)indexYear);
+ }
else {
- // ajout de la traduction du nom de liste plus le numéro
- if ("fr".equals(locale.getLanguage())) {
- chartTitle += " - " + tuple[0] + " Liste " + localList.charAt(1);
- } else if ("es".equals(locale.getLanguage())) {
- chartTitle += " - " + tuple[0] + " Lista " + localList.charAt(1);
- } else {
- chartTitle += " - " + tuple[0] + " List " + localList.charAt(1);
- }
+ statisticalDataset.add(null, null, "Serie1", (Comparable)indexYear);
}
- break;
}
- }
-
- // generate dataset with sorted data
- DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
- for (int indexYear = minYear ; indexYear <= maxYear ; ++indexYear) {
- Double[] entry = graphData.get(indexYear);
- if (entry != null) {
- Double estimation = entry[0] / multiplicator;
- Double ecart = entry[1] / multiplicator;
- statisticalDataset.add(estimation, ecart, "Serie1", (Comparable)indexYear);
+
+ // configure chart
+ //CategoryAxis categoryAxis = new CategoryAxis(_("coser.business.common.year"));
+ // FIXME echatellier 20110414 hack just for year, need a real locale object here
+ // to call _(locale, i18nkey)
+ String yearAxis = "Year";
+ if ("fr".equals(locale.getLanguage())) {
+ yearAxis = "Ann\u00E9e";
+ } else if ("es".equals(locale.getLanguage())) {
+ yearAxis = "A\u00F1o";
}
- else {
- statisticalDataset.add(null, null, "Serie1", (Comparable)indexYear);
+ CategoryAxis categoryAxis = new CategoryAxis(yearAxis);
+ categoryAxis.setCategoryMargin(0);
+ categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
+ // label horizontaux
+ String legendY = indicatorName;
+ if (multiplicator != 1) {
+ // affiche par exemple : cm * 1000
+ legendY += " (" + unit + "*" + multiplicator + ")";
}
+ else if (StringUtils.isNotEmpty(unit)) {
+ legendY += " (" + unit + ")";
+ }
+ ValueAxis valueAxis = new NumberAxis(legendY);
+ valueAxis.setUpperMargin(0.1);
+
+ CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true);
+
+ // n'affiche pas les nombre sur le graphique
+ //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator();
+ //renderer.setBaseItemLabelGenerator(itemLabelGenerator);
+ //renderer.setBaseItemLabelsVisible(true);
+
+ CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer);
+ plot.setOrientation(PlotOrientation.VERTICAL);
+ JFreeChart chart = new JFreeChart(chartTitle,
+ JFreeChart.DEFAULT_TITLE_FONT, plot, true);
+
+ // remove series legend
+ chart.removeLegend();
+ // white background
+ chart.setBackgroundPaint(Color.WHITE);
+
+ try {
+ result = File.createTempFile("coser-chart-", ".png");
+ result.deleteOnExit();
+ ChartUtilities.saveChartAsPNG(result, chart, 800, 400);
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save chart", ex);
+ }
}
- // configure chart
- //CategoryAxis categoryAxis = new CategoryAxis(_("coser.business.common.year"));
- // FIXME echatellier 20110414 hack just for year, need a real locale object here
- // to call _(locale, i18nkey)
- String yearAxis = "Year";
- if ("fr".equals(locale.getLanguage())) {
- yearAxis = "Ann\u00E9e";
- } else if ("es".equals(locale.getLanguage())) {
- yearAxis = "A\u00F1o";
- }
- CategoryAxis categoryAxis = new CategoryAxis(yearAxis);
- categoryAxis.setCategoryMargin(0);
- categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
- // label horizontaux
- String legendY = indicatorName;
- if (multiplicator != 1) {
- // affiche par exemple : cm * 1000
- legendY += " (" + unit + "*" + multiplicator + ")";
- }
- else if (StringUtils.isNotEmpty(unit)) {
- legendY += " (" + unit + ")";
- }
- ValueAxis valueAxis = new NumberAxis(legendY);
- valueAxis.setUpperMargin(0.1);
-
- CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true);
-
- // n'affiche pas les nombre sur le graphique
- //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator();
- //renderer.setBaseItemLabelGenerator(itemLabelGenerator);
- //renderer.setBaseItemLabelsVisible(true);
-
- CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer);
- plot.setOrientation(PlotOrientation.VERTICAL);
- JFreeChart chart = new JFreeChart(chartTitle,
- JFreeChart.DEFAULT_TITLE_FONT, plot, true);
-
- // remove series legend
- chart.removeLegend();
- // white background
- chart.setBackgroundPaint(Color.WHITE);
-
- try {
- result = File.createTempFile("coser-", ".chart");
- result.deleteOnExit();
- ChartUtilities.saveChartAsPNG(result, chart, 800, 400);
- } catch (IOException ex) {
- throw new CoserBusinessException("Can't save chart", ex);
- }
-
return result;
}
@@ -1023,6 +1039,7 @@
int multiplicator = 1;
int minYear = Integer.MAX_VALUE;
int maxYear = Integer.MIN_VALUE;
+ boolean indicatorFound = false;
Map<Integer, Double[]> graphData = new HashMap<Integer, Double[]>();
Iterator<String[]> estPopIndIterator = dataStorage.iterator(true);
while (estPopIndIterator.hasNext()) {
@@ -1031,7 +1048,8 @@
String speciesCode = tuple[3];
String indicatorCode = tuple[1];
if (speciesCode.equals(species) && indicatorCode.equals(indicator)) {
-
+ indicatorFound = true;
+
// XXX echatellier, maybe take care of list here ?
Double estimation = Double.parseDouble(tuple[6]);
@@ -1057,76 +1075,474 @@
}
}
- // get graph title
- String title = zoneDisplayName;
- title += " - " + indicatorName;
- title += " - " + commonService.getReportDisplayName(project, species);
-
- // generate dataset with sorted data
- DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
- for (int indexYear = minYear ; indexYear <= maxYear ; ++indexYear) {
- Double[] entry = graphData.get(indexYear);
- if (entry != null) {
- Double estimation = entry[0] / multiplicator;
- Double ecart = entry[1] / multiplicator;
- statisticalDataset.add(estimation, ecart, "Serie1", (Comparable)indexYear);
+ // avec l'extraction des données, on peut demander a générer un graphique
+ // sur un indicateur qui n'est pas présent dans le projet courant,
+ // dans ce cas, on retourne null
+ if (indicatorFound) {
+ // get graph title
+ String title = zoneDisplayName;
+ title += " - " + indicatorName;
+ title += " - " + commonService.getReportDisplayName(project, species);
+
+ // generate dataset with sorted data
+ DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
+ for (int indexYear = minYear ; indexYear <= maxYear ; ++indexYear) {
+ Double[] entry = graphData.get(indexYear);
+ if (entry != null) {
+ Double estimation = entry[0] / multiplicator;
+ Double ecart = entry[1] / multiplicator;
+ statisticalDataset.add(estimation, ecart, "Serie1", (Comparable)indexYear);
+ }
+ else {
+ statisticalDataset.add(null, null, "Serie1", (Comparable)indexYear);
+ }
}
- else {
- statisticalDataset.add(null, null, "Serie1", (Comparable)indexYear);
+
+
+ // configure chart
+ //CategoryAxis categoryAxis = new CategoryAxis(_("coser.business.common.year"));
+ // FIXME echatellier 20110414 hack just for year, need a real locale object here
+ // to call _(locale, i18nkey)
+ String yearAxis = "Year";
+ if ("fr".equals(locale.getLanguage())) {
+ yearAxis = "Ann\u00E9e";
+ } else if ("es".equals(locale.getLanguage())) {
+ yearAxis = "Ann\u00E9e";
}
+ CategoryAxis categoryAxis = new CategoryAxis(yearAxis);
+ categoryAxis.setCategoryMargin(0);
+ categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
+ // label horizontaux
+ String legendY = indicatorName;
+ if (multiplicator != 1) {
+ // affiche par exemple : cm * 1000
+ legendY += " (" + unit + "*" + multiplicator + ")";
+ }
+ else if (StringUtils.isNotEmpty(unit)) {
+ legendY += " (" + unit + ")";
+ }
+ ValueAxis valueAxis = new NumberAxis(legendY);
+ valueAxis.setUpperMargin(0.1);
+
+ CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true);
+
+ // n'affiche pas les nombre sur le graphique
+ //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator();
+ //renderer.setBaseItemLabelGenerator(itemLabelGenerator);
+ //renderer.setBaseItemLabelsVisible(true);
+
+ CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer);
+ plot.setOrientation(PlotOrientation.VERTICAL);
+ JFreeChart chart = new JFreeChart(title,
+ JFreeChart.DEFAULT_TITLE_FONT, plot, true);
+
+ // remove series legend
+ chart.removeLegend();
+ // white background
+ chart.setBackgroundPaint(Color.WHITE);
+
+ try {
+ result = File.createTempFile("coser-chart-", ".png");
+ result.deleteOnExit();
+ ChartUtilities.saveChartAsPNG(result, chart, 800, 400);
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save chart", ex);
+ }
}
-
- // configure chart
- //CategoryAxis categoryAxis = new CategoryAxis(_("coser.business.common.year"));
- // FIXME echatellier 20110414 hack just for year, need a real locale object here
- // to call _(locale, i18nkey)
- String yearAxis = "Year";
- if ("fr".equals(locale.getLanguage())) {
- yearAxis = "Ann\u00E9e";
- } else if ("es".equals(locale.getLanguage())) {
- yearAxis = "Ann\u00E9e";
+ return result;
+ }
+
+ /**
+ * Generate community graph for selected indicators.
+ * Used by web ui extraction.
+ *
+ * @param project project
+ * @param resultDirectory result directory
+ * @param rsufiResult rsufiresult
+ * @param codeTypeEspecesFile le fichier contenant les code type espece (specifique au projet)
+ * @param indicator indicator
+ * @param zoneDisplayName zone full name
+ * @param indicatorName indicatorName localized
+ * @param unit data unit
+ * @param locale locale
+ * @param width graph width
+ * @param height graph height
+ * @return generated graph image (temp file) and data
+ * @throws CoserBusinessException
+ */
+ public Map<String, Object[]> getRsufiResultComCharts(Project project, File resultDirectory,
+ RSufiResult rsufiResult, File codeTypeEspecesFile, Collection<String> indicators,
+ String zoneDisplayName, MultiKeyMap indicatorMap, Locale locale,
+ int width, int height) throws CoserBusinessException {
+
+ Map<String, Object[]> result = new HashMap<String, Object[]>();
+
+ // le fichier estcomind
+ File estComIndFile = new File(resultDirectory, rsufiResult.getEstComIndName());
+
+ if (log.isDebugEnabled()) {
+ log.debug("Reading estComIndFile : " + estComIndFile);
}
- CategoryAxis categoryAxis = new CategoryAxis(yearAxis);
- categoryAxis.setCategoryMargin(0);
- categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
- // label horizontaux
- String legendY = indicatorName;
- if (multiplicator != 1) {
- // affiche par exemple : cm * 1000
- legendY += " (" + unit + "*" + multiplicator + ")";
+
+ // Campagne Indicateur Liste Strate Annee Estimation EcartType CV
+ DataStorage dataStorage = commonService.loadCSVFile(estComIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR);
+
+ int multiplicator = 1;
+ int minYear = Integer.MAX_VALUE;
+ int maxYear = Integer.MIN_VALUE;
+
+ Map<String, Map<Integer, Double[]>> indicatorGraphData = new HashMap<String, Map<Integer, Double[]>>();
+ Map<String, String> indicatorLists = new HashMap<String, String>();
+ Map<String, DataStorage> indicatorStorages = new HashMap<String, DataStorage>();
+ Iterator<String[]> estComIndIterator = dataStorage.iterator(true);
+ while (estComIndIterator.hasNext()) {
+ // Campagne Indicateur Liste Strate Annee Estimation EcartType CV
+ String[] tuple = estComIndIterator.next();
+ String indicatorCode = tuple[1];
+ String indicatorList = tuple[2];
+
+ if (indicators.contains(indicatorCode)) {
+
+ // si pas de list selectionnée, on prend la premiere
+ String localList = indicatorLists.get(indicatorCode);
+ if (StringUtils.isBlank(localList)) {
+ localList = indicatorList;
+ indicatorLists.put(indicatorCode, localList);
+ }
+
+ if (indicatorList.equals(localList)) {
+ Double estimation = Double.parseDouble(tuple[5]);
+ Double ecart = Double.parseDouble(tuple[6]);
+ int year = Integer.parseInt(tuple[4]);
+
+ if (year < minYear) {
+ minYear = year;
+ }
+ if (year > maxYear) {
+ maxYear = year;
+ }
+ Map<Integer, Double[]> graphData = indicatorGraphData.get(indicatorCode);
+ if (graphData == null) {
+ graphData = new HashMap<Integer, Double[]>();
+ indicatorGraphData.put(indicatorCode, graphData);
+ }
+ graphData.put(year, new Double[]{estimation, ecart});
+
+ // si les données sont énormes, on affiche les données
+ // / multiplicator et on le mentionne dans la légende
+ if (estimation > 1e9) {
+ multiplicator = 1000000;
+ }
+ if (estimation > 1e6 && multiplicator < 1000000) {
+ multiplicator = 1000;
+ }
+
+ // for data part
+ DataStorage subDataStorage = indicatorStorages.get(indicatorCode);
+ if (subDataStorage == null) {
+ subDataStorage = new MemoryDataStorage();
+ indicatorStorages.put(indicatorCode, subDataStorage);
+ }
+ subDataStorage.add(tuple);
+ }
+ }
}
- else if (StringUtils.isNotEmpty(unit)) {
- legendY += " (" + unit + ")";
+
+ // avec l'extraction des données, on peut demander a générer un graphique
+ // sur un indicateur qui n'est pas présent dans le projet courant,
+ // dans ce cas, on retourne null
+ for (String indicator : indicatorGraphData.keySet()) {
+ // get graph title
+ String chartTitle = zoneDisplayName;
+ String indicatorName = (String)indicatorMap.get(indicator, locale.getLanguage());
+ String unit = (String)indicatorMap.get(indicator, "unit");
+ chartTitle += " - " + indicatorName;
+
+ // ajout de la traduction de la liste d'indicateur
+ // les liste sont a1, T1, T2 ...
+ String localList = indicatorLists.get(indicator);
+ String listLetter = String.valueOf(localList.charAt(0));
+ DataStorage dataStorageType = commonService.loadCSVFile(codeTypeEspecesFile, CoserConstants.CSV_SEPARATOR_CHAR);
+ Iterator<String[]> typeIterator = dataStorageType.iterator(true);
+ while (typeIterator.hasNext()) {
+ // "Types";"Commentaire";"NumSys min";"NumSys max";"Code"
+ String[] tuple = typeIterator.next();
+ if (tuple[4].equals(listLetter)) {
+ /// gestion du groupe "Tous"
+ // cas special, c'est la seule valeur du fichier
+ // code type espece qui a besoin d'une traduction
+ if (tuple[4].equalsIgnoreCase("T")) {
+ if ("fr".equals(locale.getLanguage())) {
+ chartTitle += " - " + "Tous Liste " + localList.charAt(1);
+ } else if ("es".equals(locale.getLanguage())) {
+ chartTitle += " - " + "Todo Lista " + localList.charAt(1);
+ } else {
+ chartTitle += " - " + "All List " + localList.charAt(1);
+ }
+ } else {
+ // ajout de la traduction du nom de liste plus le numéro
+ if ("fr".equals(locale.getLanguage())) {
+ chartTitle += " - " + tuple[0] + " Liste " + localList.charAt(1);
+ } else if ("es".equals(locale.getLanguage())) {
+ chartTitle += " - " + tuple[0] + " Lista " + localList.charAt(1);
+ } else {
+ chartTitle += " - " + tuple[0] + " List " + localList.charAt(1);
+ }
+ }
+ break;
+ }
+ }
+
+ // generate dataset with sorted data
+ Map<Integer, Double[]> graphData = indicatorGraphData.get(indicator);
+ DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
+ for (int indexYear = minYear ; indexYear <= maxYear ; ++indexYear) {
+ Double[] entry = graphData.get(indexYear);
+ if (entry != null) {
+ Double estimation = entry[0] / multiplicator;
+ Double ecart = entry[1] / multiplicator;
+ statisticalDataset.add(estimation, ecart, "Serie1", (Comparable)indexYear);
+ } else {
+ statisticalDataset.add(null, null, "Serie1", (Comparable)indexYear);
+ }
+ }
+
+ // configure chart
+ //CategoryAxis categoryAxis = new CategoryAxis(_("coser.business.common.year"));
+ // FIXME echatellier 20110414 hack just for year, need a real locale object here
+ // to call _(locale, i18nkey)
+ String yearAxis = "Year";
+ if ("fr".equals(locale.getLanguage())) {
+ yearAxis = "Ann\u00E9e";
+ } else if ("es".equals(locale.getLanguage())) {
+ yearAxis = "A\u00F1o";
+ }
+ CategoryAxis categoryAxis = new CategoryAxis(yearAxis);
+ categoryAxis.setCategoryMargin(0);
+ categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
+ // label horizontaux
+ String legendY = indicatorName;
+ if (multiplicator != 1) {
+ // affiche par exemple : cm * 1000
+ legendY += " (" + unit + "*" + multiplicator + ")";
+ } else if (StringUtils.isNotEmpty(unit)) {
+ legendY += " (" + unit + ")";
+ }
+ ValueAxis valueAxis = new NumberAxis(legendY);
+ valueAxis.setUpperMargin(0.1);
+
+ CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true);
+
+ // n'affiche pas les nombre sur le graphique
+ //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator();
+ //renderer.setBaseItemLabelGenerator(itemLabelGenerator);
+ //renderer.setBaseItemLabelsVisible(true);
+
+ CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer);
+ plot.setOrientation(PlotOrientation.VERTICAL);
+ JFreeChart chart = new JFreeChart(chartTitle,
+ JFreeChart.DEFAULT_TITLE_FONT, plot, true);
+
+ // remove series legend
+ chart.removeLegend();
+ // white background
+ chart.setBackgroundPaint(Color.WHITE);
+
+ try {
+ File chartFile = File.createTempFile("coser-chart-", ".png");
+ chartFile.deleteOnExit();
+ ChartUtilities.saveChartAsPNG(chartFile, chart, width, height);
+ //ByteArrayOutputStream out = new ByteArrayOutputStream();
+ //ChartUtilities.writeChartAsPNG(out, chart, width, height);
+
+ // data extraction
+ DataStorage subDataStorage = indicatorStorages.get(indicator);
+ StringWriter writer = new StringWriter();
+ commonService.storeDataWhithoutQuote(subDataStorage, writer, null, null);
+
+ // add chart file dans chart data in result
+ result.put(indicator, new Object[]{chartFile, writer.toString()});
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save chart", ex);
+ }
}
- ValueAxis valueAxis = new NumberAxis(legendY);
- valueAxis.setUpperMargin(0.1);
- CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true);
+ return result;
+ }
- // n'affiche pas les nombre sur le graphique
- //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator();
- //renderer.setBaseItemLabelGenerator(itemLabelGenerator);
- //renderer.setBaseItemLabelsVisible(true);
+ /**
+ * Generate population graph for selected species and indicator.
+ *
+ * @param project project
+ * @param resultDirectory result directory
+ * @param rsufiResult rsufi result
+ * @param species species
+ * @param indicator indicator
+ * @param zoneDisplayName zone full name
+ * @param indicatorName indicatorName localized
+ * @param unit data unit
+ * @param locale locale
+ * @param width graph width
+ * @param height graph height
+ * @return generated image file (temp file)
+ * @throws CoserBusinessException
+ */
+ public Map<String, Object[]> getRsufiResultPopCharts(Project project, File resultDirectory,
+ RSufiResult rsufiResult, Collection<String> species, Collection<String> indicators,
+ String zoneDisplayName, MultiKeyMap indicatorMap, Locale locale,
+ int width, int height) throws CoserBusinessException {
- CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer);
- plot.setOrientation(PlotOrientation.VERTICAL);
- JFreeChart chart = new JFreeChart(title,
- JFreeChart.DEFAULT_TITLE_FONT, plot, true);
+ Map<String, Object[]> result = new HashMap<String, Object[]>();
- // remove series legend
- chart.removeLegend();
- // white background
- chart.setBackgroundPaint(Color.WHITE);
+ // le fichier estcomind
+ File estPopIndFile = new File(resultDirectory, rsufiResult.getEstPopIndName());
- try {
- result = File.createTempFile("coser-", ".chart");
- result.deleteOnExit();
- ChartUtilities.saveChartAsPNG(result, chart, 800, 400);
- } catch (IOException ex) {
- throw new CoserBusinessException("Can't save chart", ex);
+ // Campagne Indicateur Liste Species Strate Annee Estimation EcartType CV
+ DataStorage dataStorage = commonService.loadCSVFile(estPopIndFile, CoserConstants.CSV_RESULT_SEPARATOR_CHAR);
+
+ int multiplicator = 1;
+ int minYear = Integer.MAX_VALUE;
+ int maxYear = Integer.MIN_VALUE;
+
+ MultiKeyMap indicatorGraphData = new MultiKeyMap();
+ MultiKeyMap indicatorStorages = new MultiKeyMap();
+ Iterator<String[]> estPopIndIterator = dataStorage.iterator(true);
+ while (estPopIndIterator.hasNext()) {
+ String[] tuple = estPopIndIterator.next();
+
+ String speciesCode = tuple[3];
+ String indicatorCode = tuple[1];
+ if (species.contains(speciesCode) && indicators.contains(indicatorCode)) {
+
+ // XXX echatellier, maybe take care of list here ?
+
+ Double estimation = Double.parseDouble(tuple[6]);
+ Double ecart = Double.parseDouble(tuple[7]);
+ int year = Integer.parseInt(tuple[5]);
+
+ if (year < minYear) {
+ minYear = year;
+ }
+ if (year > maxYear) {
+ maxYear = year;
+ }
+ Map<Integer, Double[]> graphData = (Map<Integer, Double[]>)indicatorGraphData.get(indicatorCode, speciesCode);
+ if (graphData == null) {
+ graphData = new HashMap<Integer, Double[]>();
+ indicatorGraphData.put(indicatorCode, speciesCode, graphData);
+ }
+ graphData.put(year, new Double[]{estimation, ecart});
+
+ // si les données sont énormes, on affiche les données
+ // / multiplicator et on le mentionne dans la légende
+ if (estimation > 1e9) {
+ multiplicator = 1000000;
+ }
+ if (estimation > 1e6 && multiplicator < 1000000) {
+ multiplicator = 1000;
+ }
+
+ // for data part
+ DataStorage subDataStorage = (DataStorage)indicatorStorages.get(indicatorCode, speciesCode);
+ if (subDataStorage == null) {
+ subDataStorage = new MemoryDataStorage();
+ indicatorStorages.put(indicatorCode, speciesCode, subDataStorage);
+ }
+ subDataStorage.add(tuple);
+ }
}
-
+
+
+ // avec l'extraction des données, on peut demander a générer un graphique
+ // sur un indicateur qui n'est pas présent dans le projet courant,
+ // dans ce cas, on retourne null
+ for (MultiKey indicatorSpecies : (Set<MultiKey>)indicatorGraphData.keySet()) {
+ String indicator = (String)indicatorSpecies.getKey(0);
+ String aSpecies = (String)indicatorSpecies.getKey(1);
+ // get graph title
+ String title = zoneDisplayName;
+ String indicatorName = (String)indicatorMap.get(indicator, locale.getLanguage());
+ String unit = (String)indicatorMap.get(indicator, "unit");
+ title += " - " + indicatorName;
+ title += " - " + commonService.getReportDisplayName(project, aSpecies);
+
+ // generate dataset with sorted data
+ DefaultStatisticalCategoryDataset statisticalDataset = new DefaultStatisticalCategoryDataset();
+ Map<Integer, Double[]> graphData = (Map<Integer, Double[]>)indicatorGraphData.get(indicator, aSpecies);
+ for (int indexYear = minYear ; indexYear <= maxYear ; ++indexYear) {
+ Double[] entry = graphData.get(indexYear);
+ if (entry != null) {
+ Double estimation = entry[0] / multiplicator;
+ Double ecart = entry[1] / multiplicator;
+ statisticalDataset.add(estimation, ecart, "Serie1", (Comparable)indexYear);
+ } else {
+ statisticalDataset.add(null, null, "Serie1", (Comparable)indexYear);
+ }
+ }
+
+
+ // configure chart
+ //CategoryAxis categoryAxis = new CategoryAxis(_("coser.business.common.year"));
+ // FIXME echatellier 20110414 hack just for year, need a real locale object here
+ // to call _(locale, i18nkey)
+ String yearAxis = "Year";
+ if ("fr".equals(locale.getLanguage())) {
+ yearAxis = "Ann\u00E9e";
+ } else if ("es".equals(locale.getLanguage())) {
+ yearAxis = "Ann\u00E9e";
+ }
+ CategoryAxis categoryAxis = new CategoryAxis(yearAxis);
+ categoryAxis.setCategoryMargin(0);
+ categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
+ // label horizontaux
+ String legendY = indicatorName;
+ if (multiplicator != 1) {
+ // affiche par exemple : cm * 1000
+ legendY += " (" + unit + "*" + multiplicator + ")";
+ }
+ else if (StringUtils.isNotEmpty(unit)) {
+ legendY += " (" + unit + ")";
+ }
+ ValueAxis valueAxis = new NumberAxis(legendY);
+ valueAxis.setUpperMargin(0.1);
+
+ CategoryItemRenderer renderer = new StatisticalLineAndShapeRenderer(false, true);
+
+ // n'affiche pas les nombre sur le graphique
+ //StandardCategoryItemLabelGenerator itemLabelGenerator = new StandardCategoryItemLabelGenerator();
+ //renderer.setBaseItemLabelGenerator(itemLabelGenerator);
+ //renderer.setBaseItemLabelsVisible(true);
+
+ CategoryPlot plot = new CategoryPlot(statisticalDataset, categoryAxis, valueAxis, renderer);
+ plot.setOrientation(PlotOrientation.VERTICAL);
+ JFreeChart chart = new JFreeChart(title,
+ JFreeChart.DEFAULT_TITLE_FONT, plot, true);
+
+ // remove series legend
+ chart.removeLegend();
+ // white background
+ chart.setBackgroundPaint(Color.WHITE);
+
+ try {
+ File chartFile = File.createTempFile("coser-chart-", ".png");
+ chartFile.deleteOnExit();
+ ChartUtilities.saveChartAsPNG(chartFile, chart, width, height);
+ //ByteArrayOutputStream out = new ByteArrayOutputStream();
+ //ChartUtilities.writeChartAsPNG(out, chart, width, height);
+
+ // data extraction
+ DataStorage subDataStorage = (DataStorage)indicatorStorages.get(indicator, aSpecies);
+ StringWriter writer = new StringWriter();
+ commonService.storeDataWhithoutQuote(subDataStorage, writer, null, null);
+
+ // add chart file dans chart data in result
+ result.put(indicator + "-" + aSpecies, new Object[]{chartFile, writer.toString()});
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't save chart", ex);
+ }
+ }
+
return result;
}
@@ -1147,7 +1563,7 @@
File result = null;
try {
- result = File.createTempFile("coser-", ".csv");
+ result = File.createTempFile("coser-chart-", ".csv");
result.deleteOnExit();
// le fichier estcomind
@@ -1171,14 +1587,16 @@
String indicatorCode = tuple[1];
String indicatorList = tuple[2];
- if (indicatorCode.equals(indicator) && indicatorList.equals(localList)) {
+ if (indicatorCode.equals(indicator)) {
// si pas de list selectionnée, on prend la premiere
if (StringUtils.isBlank(localList)) {
localList = indicatorList;
}
-
- subDataStorage.add(tuple);
+
+ if (indicatorList.equals(localList)) {
+ subDataStorage.add(tuple);
+ }
}
}
@@ -1207,7 +1625,7 @@
File result = null;
try {
- result = File.createTempFile("coser-", ".csv");
+ result = File.createTempFile("coser-graph-", ".csv");
result.deleteOnExit();
// le fichier estpopind
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 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2012-11-16 15:25:34 UTC (rev 1084)
@@ -26,6 +26,7 @@
package fr.ifremer.coser.services;
import static org.nuiton.i18n.I18n._;
+import static org.nuiton.i18n.I18n.l_;
import java.io.File;
import java.io.FileFilter;
@@ -41,6 +42,7 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
@@ -48,12 +50,17 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Properties;
+import java.util.Set;
import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.regex.Matcher;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.collections.keyvalue.MultiKey;
import org.apache.commons.collections.map.MultiKeyMap;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
@@ -91,6 +98,7 @@
import fr.ifremer.coser.bean.Selection;
import fr.ifremer.coser.storage.DataStorage;
import fr.ifremer.coser.storage.MemoryDataStorage;
+import fr.ifremer.coser.util.DataType;
import fr.ifremer.coser.util.ProgressMonitor;
import fr.ifremer.coser.util.ProgressStream;
import freemarker.cache.ClassTemplateLoader;
@@ -701,7 +709,7 @@
try {
// dezipage dans un fichier temporaire
- File tempDirectory = FileUtil.createTempDirectory("coser", ".tmp");
+ File tempDirectory = FileUtil.createTempDirectory("coser-upload-", "-tmp");
ZipUtil.uncompress(archiveFile, tempDirectory);
File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
@@ -1159,7 +1167,7 @@
* Pour une zone principale, recupere la liste des couples sous-zone /
* campagne qui sont disponible dans cette zone principale.
*
- * @param facade facade (le nom de la facade principale)
+ * @param facade facade (le nom de la facade principale) (can be {@code null} : don't filter on facade)
* @param onlyWithSource retourn zone liste with available source data
* @param forMap look in map directory
* @return couple subzoneid/sub
@@ -1174,7 +1182,7 @@
while (itZone.hasNext()) {
// "id";"facadeid";"facade";"zone";"periode";"serie";"comment";"comment_en";"comment_es";"map"
String[] tuple = itZone.next();
- if (tuple[1].equals(facade)) {
+ if (facade == null || tuple[1].equals(facade)) {
subZones.add(tuple[0]);
}
}
@@ -1317,7 +1325,19 @@
* @throws CoserBusinessException
*/
public Map<String, String> getSpecies(String zone, boolean forMap) throws CoserBusinessException {
+ return getSpecies(Collections.singleton(zone), forMap);
+ }
+ /**
+ * Recuperer la liste des populations pour un ensemble de zones donnée.
+ *
+ * @param zones zones ids
+ * @return map species nom info>nom officiel
+ * @param forMap for map directory
+ * @throws CoserBusinessException
+ */
+ public Map<String, String> getSpecies(Collection<String> zones, boolean forMap) throws CoserBusinessException {
+
Map<String, String> result = new TreeMap<String, String>();
File projectsDirectory = null;
@@ -1328,8 +1348,9 @@
projectsDirectory = config.getWebIndicatorsProjectsDirectory();
}
+ File[] projectFiles = projectsDirectory.listFiles();
+
// parcours des resultats disponibles
- File[] projectFiles = projectsDirectory.listFiles();
if (projectFiles != null) {
for (File projectFile : projectFiles) {
if (projectFile.isDirectory()) {
@@ -1350,14 +1371,13 @@
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 && zones.contains(rsufiResult.getZone())) {
// 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;
}
}
}
@@ -1425,7 +1445,7 @@
* pour la zone et l'especes souhaitées.
*
* @param zone zone id
- * @param species especes (if {@code null} look for com indicators
+ * @param species especes (if {@code null} look for com indicators)
* @param locale locale
* @return la liste des indicateurs
* @throws CoserBusinessException
@@ -1481,14 +1501,77 @@
return indicators;
}
+
+ /**
+ * Retourne les indicateurs calculés avec leurs traductions scientifique
+ * pour les zones souhaitées. Retournes les indicateurs de populations
+ * de de communauté à la fois.
+ *
+ * @param zones zones id
+ * @param dataTypes data type
+ * @param locale locale
+ * @return la liste des indicateurs
+ * @throws CoserBusinessException
+ * @since 1.4
+ */
+ public Map<String, String> getIndicators(Collection<String> zones, DataType dataType, Locale locale) throws CoserBusinessException {
+ Map<String, String> indicators = new TreeMap<String, String>();
+ // parcours des resultats disponibles
+ File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
+ 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 (zones.contains(rsufiResult.getZone())) {
+
+ Map<String, String> resultIndicators = null;
+ if (dataType == DataType.COMMUNITY) {
+ resultIndicators = getRsufiResultComIndicators(resultFile, rsufiResult, locale);
+ indicators.putAll(resultIndicators);
+ }
+ if (dataType == DataType.POPULATION) {
+ resultIndicators = getRsufiResultPopIndicators(resultFile, rsufiResult, null, locale);
+ indicators.putAll(resultIndicators);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return indicators;
+ }
+
/**
* Recupere la liste de toutes les especes nom sci et nom off à partir
* d'un resultat.
*
* @param resultDirectory rsufi result directory
* @param rsufiResult result
- * @param species to get indicator
+ * @param species to get indicator (can be {@code null} to not filter on species)
* @param locale locale
* @return indicator for species
* @throws CoserBusinessException
@@ -1508,7 +1591,7 @@
String[] tuple = estPopIndIterator.next();
String specyCode = tuple[3];
- if (specyCode.equals(species)) {
+ if (species == null || specyCode.equals(species)) {
String indicatorCode = tuple[1];
String translations = getIndicatorValue(indicatorCode, locale.getLanguage());
@@ -1848,7 +1931,7 @@
try {
// cas community (zip avec fichier meta)
if (species == null) {
- File tempDir = FileUtil.createTempDirectory("coser-", ".tmp");
+ File tempDir = FileUtil.createTempDirectory("coser-chartdata-", "-tmp");
String surveyName = projectService.getProjectSurveyName(resultDirectory, rSufiResult);
File baseDir = new File(tempDir, surveyName);
@@ -1857,6 +1940,7 @@
File csvFile = publicationService.getRsufiResultComChartData(resultDirectory, rSufiResult, indicator, list);
File csvFileCopied = new File(baseDir, indicator + ".csv");
FileUtils.copyFile(csvFile, csvFileCopied);
+ csvFile.delete();
// ajout du fichier d'information sur les espèces incluses dans
// les calculs des indicateurs de communautés
@@ -1868,7 +1952,7 @@
FileUtils.copyFile(metaFile, metaFileCopied);
// make zip
- result = File.createTempFile("coserchartdatazip-", ".zip");
+ result = File.createTempFile("coser-chartdata-", ".zip");
result.deleteOnExit();
ZipUtil.compress(result, baseDir);
@@ -2045,14 +2129,13 @@
File resultZip = null;
try {
- File tempDir = FileUtil.createTempDirectory("coser-", ".tmp");
+ File tempDir = FileUtil.createTempDirectory("coser-source-", "-tmp");
// il ne faut pas les fichiers de selection, mais leurs
// export rsufi (sans les lignes, et les quotes)
File archiveDir = projectService.extractRSUfiData(project, selection, tempDir, true);
// add decharge file
- File dechargePDF = generateDechargePDF(resultDirectory, rSufiResult, locale);
String filename = null;
if (locale != null && "fr".equals(locale.getLanguage())) {
filename = "DechargeDonnees.pdf";
@@ -2061,7 +2144,8 @@
} else {
filename = "DataDisclaimer.pdf";
}
- FileUtils.copyFile(dechargePDF, new File(archiveDir, filename));
+ File dechargePDF = new File(archiveDir, filename);
+ generateDechargePDF(dechargePDF, resultDirectory, rSufiResult, locale);
// ajout du reftax dans le zip
File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
@@ -2070,7 +2154,7 @@
FileUtils.copyFileToDirectory(reftaxFile, archiveDir);
// make zip
- resultZip = File.createTempFile("coserresultzip-", ".zip");
+ resultZip = File.createTempFile("coser-source-", ".zip");
resultZip.deleteOnExit();
ZipUtil.compress(resultZip, archiveDir);
@@ -2086,13 +2170,14 @@
/**
* Genere le PDF dynamique de decharge à partir du template freemarker.
*
+ * @param disclamerPdf pdf file to generate
* @param resultDirectory rsufi result directory
* @param rSufiResult rsufi result
* @param locale generated pdf locale
* @return le fichier généré
* @throws CoserBusinessException
*/
- protected File generateDechargePDF(File resultDirectory, RSufiResult rSufiResult, Locale locale) throws CoserBusinessException {
+ protected File generateDechargePDF(File disclamerPdf, File resultDirectory, RSufiResult rSufiResult, Locale locale) throws CoserBusinessException {
File result = null;
@@ -2101,7 +2186,14 @@
try {
// get some info to put into pdf
Date updateDate = getLastDataUpdateDate();
- String surveyName = projectService.getProjectSurveyName(resultDirectory, rSufiResult);
+
+ // il se peut que pour l'extraction un fichier de décharge ne soit
+ // pas généré pour une campagne en particulier
+ // on passe un nom vide a freemarker
+ String surveyName = "";
+ if (resultDirectory != null && rSufiResult != null) {
+ surveyName = projectService.getProjectSurveyName(resultDirectory, rSufiResult);
+ }
// render freemarker template
Template mapTemplate = freemarkerConfiguration.getTemplate("decharge.ftl", locale);
@@ -2118,9 +2210,7 @@
Document document = CoserUtils.parseDocument(out.toString());
// render template output as pdf
- result = File.createTempFile("coserdecharge-", ".pdf");
- result.deleteOnExit();
- os = new FileOutputStream(result);
+ os = new FileOutputStream(disclamerPdf);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(document, null);
@@ -2294,7 +2384,7 @@
Document document = CoserUtils.parseDocument(out.toString());
// render template output as pdf
- result = File.createTempFile("cosermetainfo-", ".pdf");
+ result = File.createTempFile("coser-metainfo-", ".pdf");
result.deleteOnExit();
os = new FileOutputStream(result);
@@ -2407,4 +2497,414 @@
public void deleteMapsResult(List<String> deleteZoneId) throws CoserBusinessException {
cleanCurrentProjectDirectory(config.getWebMapsProjectsDirectory(), deleteZoneId);
}
+
+ /**
+ * Extrait de toutes les données les informations demandées restreintes
+ * sur certaines zone, certaines espèces et certains indicateurs.
+ *
+ * Ajout en plus dans le zip les cartes, les sources... suivant les
+ * types selectionnés.
+ *
+ * @param selectZones zones
+ * @param selectTypes types
+ * @param selectSpecies species
+ * @param comIndicators indicators
+ * @param popIndicators indicators
+ * @return le zip
+ * @since 1.4
+ */
+ public File extractData(List<String> zones, List<DataType> types, List<String> species,
+ List<String> comIndicators, List<String> popIndicators, Locale locale) throws CoserBusinessException {
+
+ File resultZip = null;
+ File tempDir = null;
+ try {
+ tempDir = FileUtil.createTempDirectory("coser-extract-", "-tmp");
+
+ File subDir = new File(tempDir, "extract");
+ subDir.mkdirs();
+
+ // les sources se retrouve dans le zip a cote du pdf
+ if (types.contains(DataType.SOURCE)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Extracting sources");
+ }
+ File srcDir = new File(subDir, "sources");
+ extractSource(zones, srcDir);
+ }
+
+ // les cartes et des graphiques doivent se retroiver dans le pdf
+ MultiKeyMap pdfMaps = null;
+ if (types.contains(DataType.MAP)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Extracting maps");
+ }
+ File mapDir = new File(subDir, "maps");
+ pdfMaps = extractDataMap(zones, species, mapDir);
+ }
+
+ // les graphiques sont également dans le pdf
+ Map<String, Object[]> pdfCharts = null;
+ if (CollectionUtils.isNotEmpty(comIndicators) || CollectionUtils.isNotEmpty(popIndicators)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Extracting charts");
+ }
+ pdfCharts = extractCharts(zones, species, comIndicators, popIndicators, locale);
+ }
+
+ // generate pdf if necessary
+ if (MapUtils.isNotEmpty(pdfMaps) || MapUtils.isNotEmpty(pdfCharts)) {
+ File pdfFile = new File(subDir, "extract.pdf");
+ generateExtractPDF(pdfFile, pdfMaps, pdfCharts, locale);
+ }
+
+ // fichier de décharge en pdf
+ String filename = null;
+ if (locale != null && "fr".equals(locale.getLanguage())) {
+ filename = "DechargeDonnees.pdf";
+ } else if (locale != null && "es".equals(locale.getLanguage())) {
+ filename = "DatosDeExencionDeResponsabilidad.pdf";
+ } else {
+ filename = "DataDisclaimer.pdf";
+ }
+ File dechargePDF = new File(subDir, filename);
+ generateDechargePDF(dechargePDF, null, null, locale);
+
+ // make zip
+ resultZip = File.createTempFile("coser-extract-", ".zip");
+ resultZip.deleteOnExit();
+ ZipUtil.compress(resultZip, subDir);
+
+ // clean directory
+ FileUtils.deleteDirectory(tempDir);
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't create zip file", ex);
+ } finally {
+ // clean directory
+ FileUtils.deleteQuietly(tempDir);
+ }
+ return resultZip;
+ }
+
+ /**
+ * Extrait les cartes
+ *
+ * @param zones zones (zoneid)
+ * @param species species
+ * @param directory
+ * @return map file
+ * @throws CoserBusinessException
+ * @throws IOException
+ * @since 1.4
+ */
+ protected MultiKeyMap extractDataMap(Collection<String> zones, Collection<String> species, File directory) throws CoserBusinessException, IOException {
+
+ MultiKeyMap mapForZoneAndSpecies = new MultiKeyMap();
+
+ // parcours des resultats disponibles
+ File projectsDirectory = config.getWebMapsProjectsDirectory();
+ 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.isMapsResult() && zones.contains(rsufiResult.getZone())) {
+
+ // load project (to get user display species name)
+ Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
+
+ // get survey name (other condition)
+ String surveyName = projectService.getProjectSurveyName(resultFile, rsufiResult);
+
+ File mapsDirectory = new File(resultFile, CoserConstants.STORAGE_MAPS_DIRECTORY);
+ for (String aSpecies : species) {
+ String mapName = surveyName + "_" + aSpecies.toUpperCase() + ".png";
+ File mapFile = new File(mapsDirectory, mapName);
+ if (mapFile.isFile()) {
+ String speciesName = project.getDisplaySpeciesText(aSpecies);
+ mapForZoneAndSpecies.put(rsufiResult.getZone(), speciesName, mapFile);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return mapForZoneAndSpecies;
+ }
+
+ /**
+ * Genere un fichier zip des sources d'un projet.
+ *
+ * Contient:
+ * <ul>
+ * <li>les 4 fichiers apres sélection
+ * </ul>
+ *
+ * @param zone zone (zoneid-surveyname)
+ * @param locale locale
+ * @return zip source file (auto delete when jvm shutdown)
+ * @throws CoserBusinessException
+ * @since 1.4
+ */
+ protected File extractSource(Collection<String> zones, File directory) throws CoserBusinessException {
+
+ File result = null;
+
+ // parcours des resultats disponibles
+ File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
+ 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.isDataAllowed() && zones.contains(rsufiResult.getZone())) {
+
+ // load project (with data to get original file names)
+ Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
+
+ // load selection data (to do data export rsufi)
+ Selection selection = project.getSelections().get(selectionFile.getName());
+
+ // be sure that data are available for this project
+ // or it will fail
+ projectService.loadSelectionData(projectsDirectory, project, selection);
+
+ // il ne faut pas les fichiers de selection, mais leurs
+ // export rsufi (sans les lignes, et les quotes)
+ File zoneDirectory = new File(directory, rsufiResult.getZone());
+ zoneDirectory.mkdirs();
+ projectService.extractRSUfiData(project, selection, zoneDirectory, true);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Retourne les indicateurs calculés avec leurs traductions scientifique
+ * pour la zone et l'especes souhaitées.
+ *
+ * @param zone zone id
+ * @param species especes (if {@code null} look for com indicators
+ * @param comIndicator comIndicator
+ * @param popIndicators popIndicators
+ * @param locale locale
+ * @return la liste des indicateurs
+ * @throws CoserBusinessException
+ */
+ protected Map<String, Object[]> extractCharts(Collection<String> zones, Collection<String> species,
+ Collection<String> comIndicators, Collection<String> popIndicators, Locale locale) throws CoserBusinessException {
+
+ Map<String, Object[]> chartFileAndDatas = new HashMap<String, Object[]>();
+
+ // parcours des resultats disponibles
+ File projectsDirectory = config.getWebIndicatorsProjectsDirectory();
+ 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 (zones.contains(rsufiResult.getZone())) {
+
+ if (log.isDebugEnabled()) {
+ log.debug("Extracting charts for result " + resultFile);
+ }
+
+ // load project (without data to get reftax data)
+ Project project = projectService.openProject(projectFile.getName(), projectsDirectory);
+ String zoneDisplayName = getZoneFullName(rsufiResult.getZone());
+
+ // le fichier contenant le code type espece (utile
+ // pour les traductions des list d'indicateur)
+ File codeTypeEspecesFile = new File(projectFile, CoserConstants.Category.TYPE_ESPECES.getStorageFileName());
+
+ if (CollectionUtils.isNotEmpty(comIndicators)) {
+ Map<String, Object[]> chartFileAndDataCom = publicationService.getRsufiResultComCharts(project,
+ resultFile, rsufiResult, codeTypeEspecesFile, comIndicators,
+ zoneDisplayName, getIndicatorsMap(), locale, 650, 430);
+ chartFileAndDatas.putAll(chartFileAndDataCom);
+ }
+
+ if (CollectionUtils.isNotEmpty(popIndicators)) {
+ Map<String, Object[]> chartFileAndDataPop = publicationService.getRsufiResultPopCharts(project,
+ resultFile, rsufiResult, species, popIndicators,
+ zoneDisplayName, getIndicatorsMap(), locale, 650, 430);
+
+ chartFileAndDatas.putAll(chartFileAndDataPop);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return chartFileAndDatas;
+ }
+
+ /**
+ * Generate pdf file filled with maps and charts.
+ *
+ * @param pdfFile pdf file to generate to
+ * @param pdfMaps pdf maps (can be {@code null})
+ * @param pdfCharts pdf charts (can be {@code null})
+ * @throws CoserBusinessException
+ */
+ protected void generateExtractPDF(File pdfFile,
+ MultiKeyMap pdfMaps, Map<String, Object[]> pdfCharts, Locale locale) throws CoserBusinessException {
+
+ Collection<File> toDelete = new ArrayList<File>();
+ OutputStream os = null;
+
+ try {
+ StringBuilder htmlContent = new StringBuilder();
+ htmlContent.append("<html><head>");
+ htmlContent.append("<title>" + l_(locale, "coser.business.extract.extracttitle")+ "</title>");
+ htmlContent.append("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />");
+ htmlContent.append("</head><body>");
+
+ if (pdfMaps != null) {
+ for (Entry<MultiKey, File> mapEntry : (Set<Entry<MultiKey, File>>)pdfMaps.entrySet()) {
+ String zoneId = (String)mapEntry.getKey().getKey(0);
+ String speciesName = (String)mapEntry.getKey().getKey(1);
+ File file = mapEntry.getValue();
+
+ String zoneName = getZoneFullName(zoneId);
+ htmlContent.append("<div style='page-break-after: always'>");
+ htmlContent.append("<p>" + zoneName + " - " + speciesName + "</p>");
+ htmlContent.append("<img src='file://" + file.getAbsolutePath() + "' />");
+ htmlContent.append("</div>");
+ }
+ }
+
+ if (pdfCharts != null) {
+ for (Entry<String, Object[]> chartFileAndData : pdfCharts.entrySet()) {
+ //String key = chartFileAndData.getKey();
+ File chartFile = (File)chartFileAndData.getValue()[0];
+ String content = (String)chartFileAndData.getValue()[1];
+
+ htmlContent.append("<div style='page-break-after: always'>");
+ htmlContent.append("<img src='file://" + chartFile.getAbsolutePath() + "' />");
+
+ htmlContent.append("Données du graphique :");
+ htmlContent.append("<pre>").append(content).append("</pre>");
+ htmlContent.append("</div>");
+
+ // les graphiques ont été générés, a supprimer donc
+ // a ne surtout pas faire avec les cartes !!!
+ toDelete.add(chartFile);
+ }
+ }
+
+ htmlContent.append("</body></html>");
+
+ // get content as w3c document
+ Document document = CoserUtils.parseDocument(htmlContent.toString());
+
+ // render template output as pdf
+ os = new FileOutputStream(pdfFile);
+
+ ITextRenderer renderer = new ITextRenderer();
+ /* plus rapide, mais ne fonctionne pas, les images n'apparaissent pas
+ renderer.getSharedContext().setUserAgentCallback(new ITextUserAgent(renderer.getOutputDevice()) {
+ @Override
+ protected InputStream resolveAndOpenStream(String uri) {
+ String localuri = StringUtils.removeStart(uri, "file://");
+ Object[] chartData = chartFileAndDatas.get(localuri);
+ InputStream is;
+ if (chartData != null) {
+ byte[] os = (byte[])chartData[0];
+ is = new ByteArrayInputStream(os);
+ } else {
+ is = super.resolveAndOpenStream(uri);
+ }
+ return is;
+ }
+ });*/
+ renderer.setDocument(document, null);
+ renderer.layout();
+ renderer.createPDF(os);
+
+ os.close();
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't generate log pdf", ex);
+ } catch (DocumentException ex) {
+ throw new CoserBusinessException("Can't generate log pdf", ex);
+ } finally {
+ IOUtils.closeQuietly(os);
+
+ // delete file collection
+ for (File file : toDelete) {
+ file.delete();
+ }
+ }
+
+ }
}
Added: trunk/coser-business/src/main/java/fr/ifremer/coser/util/DataType.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/util/DataType.java (rev 0)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/util/DataType.java 2012-11-16 15:25:34 UTC (rev 1084)
@@ -0,0 +1,39 @@
+/*
+ * #%L
+ * Coser :: Business
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.coser.util;
+
+/**
+ * Les types de données gérées par le site internet, sur lesquelle il est
+ * possible de filtrer dans le formulaire de recherche.
+ *
+ * @author echatellier
+ * @since 1.4
+ */
+public enum DataType {
+ MAP,
+ POPULATION,
+ COMMUNITY,
+ SOURCE
+}
Property changes on: trunk/coser-business/src/main/java/fr/ifremer/coser/util/DataType.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/coser-business/src/main/resources/ftl/decharge_en.ftl
===================================================================
--- trunk/coser-business/src/main/resources/ftl/decharge_en.ftl 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-business/src/main/resources/ftl/decharge_en.ftl 2012-11-16 15:25:34 UTC (rev 1084)
@@ -31,6 +31,7 @@
send an email to the webmaster at harmonie(a)ifremer.fr.
</p>
+<#if surveyName?length > 0>
<h2>Important</h2>
<p>
The data are derived from the ${surveyName} series.
@@ -45,6 +46,7 @@
you are accepting the terms and conditions described in this document and in all
documents cited therein.
</p>
+</#if>
<h2>Contact</h2>
<p>
Modified: trunk/coser-business/src/main/resources/ftl/decharge_fr.ftl
===================================================================
--- trunk/coser-business/src/main/resources/ftl/decharge_fr.ftl 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-business/src/main/resources/ftl/decharge_fr.ftl 2012-11-16 15:25:34 UTC (rev 1084)
@@ -32,6 +32,7 @@
l'administrateur du site (harmonie(a)ifremer.fr)
</p>
+<#if surveyName?length > 0>
<h2>Important</h2>
<p>
Les données téléchargées sont issues de la série ${surveyName}.
@@ -48,6 +49,7 @@
conditions d'usage décrites dans ce document et dans tout document cité dans ce
texte.
</p>
+</#if>
<h2>Contact</h2>
<p>
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 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_en_GB.properties 2012-11-16 15:25:34 UTC (rev 1084)
@@ -102,6 +102,7 @@
coser.business.control.step.observation=Checking observation number \: %s (%d%%)
coser.business.control.step.xworks=Line checks \: %s (%d%%)
coser.business.extract.creationdate=Creation date \:
+coser.business.extract.extracttitle=Extract
coser.business.extract.projectAuthor=Project author \:
coser.business.extract.projectComment=Project comment \:
coser.business.extract.projectName=Project name \:
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 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-business/src/main/resources/i18n/coser-business_fr_FR.properties 2012-11-16 15:25:34 UTC (rev 1084)
@@ -102,6 +102,7 @@
coser.business.control.step.observation=Vérification du nombre d'observation \: %s (%d%%)
coser.business.control.step.xworks=Validation par lignes \: %s (%d%%)
coser.business.extract.creationdate=Date de création \:
+coser.business.extract.extracttitle=Extraction
coser.business.extract.projectAuthor=Auteur du projet \:
coser.business.extract.projectComment=Commentaire du projet \:
coser.business.extract.projectName=Nom du project \:
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 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-business/src/test/java/fr/ifremer/coser/services/WebServiceTest.java 2012-11-16 15:25:34 UTC (rev 1084)
@@ -27,7 +27,12 @@
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -41,6 +46,7 @@
import fr.ifremer.coser.CoserBusinessException;
import fr.ifremer.coser.storage.DataStorage;
+import fr.ifremer.coser.util.DataType;
/**
* Test du service de l'interface web.
@@ -182,14 +188,14 @@
registerUploadedResult("/web/upload2.zip");
File zip = webService.getSourceZip("testzone1", Locale.ENGLISH);
- File tempDir = FileUtil.createTempDirectory("coser", ".tmp");
+ File tempDir = FileUtil.createTempDirectory("coser-source-", "-tmp");
ZipUtil.uncompress(zip, tempDir);
Assert.assertTrue(new File(tempDir, "RSUFI_DATA_projet1" + File.separator + "testcatch.csv").isFile());
Assert.assertTrue(new File(tempDir, "RSUFI_DATA_projet1" + File.separator + "DataDisclaimer.pdf").isFile());
FileUtils.deleteDirectory(tempDir);
zip = webService.getSourceZip("testzone1", Locale.FRENCH);
- tempDir = FileUtil.createTempDirectory("coser", ".tmp");
+ tempDir = FileUtil.createTempDirectory("coser-source-", "-tmp");
ZipUtil.uncompress(zip, tempDir);
Assert.assertTrue(new File(tempDir, "RSUFI_DATA_projet1" + File.separator + "DechargeDonnees.pdf").isFile());
// test que le reftax est dans le zip
@@ -277,4 +283,52 @@
Assert.assertEquals("Type2 List 1", lists.get("m1"));
Assert.assertEquals("Type2 List 2", lists.get("m2"));
}
+
+ /**
+ * Test des modifications de methodes suite à l'intoduction du
+ * moteur de recherche pour extraire les données.
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testGetAllZoneSpeciesAndIndicators() throws CoserBusinessException {
+ registerUploadedResult("/web/upload2.zip");
+
+ Map<String, String> zones = webService.getZoneForFacade(null, false, false);
+ List<String> zoneIds = new ArrayList<String>(zones.keySet());
+ Assert.assertEquals(Arrays.asList("ecorse"), zoneIds);
+
+ Map<String, String> species = webService.getSpecies(zoneIds, false);
+ List<String> speciesIds = new ArrayList<String>(species.keySet());
+ Assert.assertEquals(Arrays.asList("COSER_SPECIES1", "COSER_SPECIES2"), speciesIds);
+
+ Map<String, String> indicators = webService.getIndicators(zoneIds, DataType.COMMUNITY, Locale.FRENCH);
+ List<String> indicatorIds = new ArrayList<String>(indicators.keySet());
+ Assert.assertEquals(Arrays.asList("Delta", "Lbcomm", "biomSmall"), indicatorIds);
+
+ indicators = webService.getIndicators(zoneIds, DataType.POPULATION, Locale.FRENCH);
+ indicatorIds = new ArrayList<String>(indicators.keySet());
+ Assert.assertEquals(Arrays.asList("Abundance", "Biomass", "Wbar", "lnN"), indicatorIds);
+ }
+
+ /**
+ * Test une validation de formulaire web pour extraire parmis toutes les
+ * données celle choisie sous forme de zip.
+ *
+ * @throws CoserBusinessException
+ */
+ @Test
+ public void testExtractDataAsZip() throws CoserBusinessException {
+ registerUploadedResult("/web/upload2.zip");
+
+ List<String> zones = Arrays.asList("ecorse");
+ List<DataType> types = Arrays.asList(DataType.MAP, DataType.POPULATION, DataType.COMMUNITY, DataType.SOURCE);
+ List<String> species = Arrays.asList("COSER_SPECIES1", "COSER_SPECIES2");
+ List<String> comIndicators = Arrays.asList("Delta", "Lbcomm", "biomSmall");
+ List<String> popIndicators = Arrays.asList("Abundance", "Biomass", "Wbar", "lnN");
+
+ File file = webService.extractData(zones, types, species, comIndicators, popIndicators, Locale.FRENCH);
+ Assert.assertTrue(file.length() > 0);
+ }
}
+
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-11-16 15:25:34 UTC (rev 1084)
@@ -835,8 +835,7 @@
JOptionPane.showMessageDialog(view, _("coser.ui.selection.selectionCreated"),
_("coser.ui.selection.selectionTitle"), JOptionPane.INFORMATION_MESSAGE);
- }
- else {
+ } else {
projectService.saveProjectSelection(project, selection);
JOptionPane.showMessageDialog(view, _("coser.ui.selection.selectionSaved"),
@@ -1272,8 +1271,7 @@
for (Object selectedSingleSpecies : selectedSpecies) {
graphSpecies.add((String)selectedSingleSpecies);
}
- }
- else {
+ } else {
// merge both lists
Object[] selectedSpecies = view.getFilteredSpeciesList().getSelectedValues();
for (Object selectedSingleSpecies : selectedSpecies) {
@@ -1344,18 +1342,15 @@
ProjectService projectService = view.getContextValue(ProjectService.class);
List<File> otherFiles = view.getOtherDataFileListModel().getFiles();
-
RSufiResult newResult = view.getRsufiResult();
try {
projectService.saveRsufiResults(project, selection, newResult, otherFiles);
- }
- catch (CoserBusinessException ex) {
+ view.dispose();
+ } catch (CoserBusinessException ex) {
JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.result.saveError"), JOptionPane.ERROR_MESSAGE);
- }
- finally {
+ } finally {
setDefaultCursor(view);
}
- view.dispose();
}
/**
@@ -1394,8 +1389,7 @@
try {
List<File> newOthersFile = view.getOtherDataFileListModel().getFiles();
projectService.editRsufiResults(project, selection, editedResult, newOthersFile);
- }
- catch (CoserBusinessException ex) {
+ } catch (CoserBusinessException ex) {
JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.result.saveError"), JOptionPane.ERROR_MESSAGE);
}
view.dispose();
@@ -1638,8 +1632,7 @@
try {
List<File> newOthersFile = view.getSelectionFilesListModel().getFiles();
projectService.editSelectionOptions(project, selection, newOthersFile);
- }
- catch (CoserBusinessException ex) {
+ } catch (CoserBusinessException ex) {
JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.result.saveError"), JOptionPane.ERROR_MESSAGE);
}
view.dispose();
Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/DeleteProjectsAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/DeleteProjectsAction.java 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/admin/DeleteProjectsAction.java 2012-11-16 15:25:34 UTC (rev 1084)
@@ -22,7 +22,6 @@
package fr.ifremer.coser.web.actions.admin;
-import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
Added: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java
===================================================================
--- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java (rev 0)
+++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java 2012-11-16 15:25:34 UTC (rev 1084)
@@ -0,0 +1,295 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 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.search;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts2.convention.annotation.Action;
+import org.apache.struts2.convention.annotation.InterceptorRef;
+import org.apache.struts2.convention.annotation.InterceptorRefs;
+import org.apache.struts2.convention.annotation.Result;
+import org.apache.struts2.interceptor.ServletRequestAware;
+
+import fr.ifremer.coser.CoserBusinessException;
+import fr.ifremer.coser.services.WebService;
+import fr.ifremer.coser.util.DataType;
+import fr.ifremer.coser.web.CoserWebException;
+import fr.ifremer.coser.web.ServiceFactory;
+import fr.ifremer.coser.web.actions.common.CoserAction;
+
+/**
+ * Affiche le formulaire de recherche pour extraction d'un zip contenant
+ * les sources des projets choisit, et un pdf avec les graphiques et les données
+ * des graphiques.
+ *
+ * @author echatellier
+ * @since 1.4
+ */
+@InterceptorRefs({
+ @InterceptorRef("defaultStack"),
+ @InterceptorRef(value="execAndWait",
+ params={"excludeMethods","execute,quality"})
+})
+public class ExtractAction extends CoserAction implements ServletRequestAware {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 8497086194191374797L;
+
+ private static final Log log = LogFactory.getLog(ExtractAction.class);
+
+ protected Map<String, String> zones;
+
+ protected List<String> selectZones;
+
+ protected List<DataType> selectTypes;
+
+ protected Map<String, String> species;
+
+ protected List<String> selectSpecies;
+
+ protected Map<String, String> comIndicators;
+
+ protected List<String> selectComIndicators;
+
+ protected Map<String, String> popIndicators;
+
+ protected List<String> selectPopIndicators;
+
+ protected String submitAction;
+
+ protected boolean accepted;
+
+ protected HttpServletRequest request;
+
+ /**
+ * Pour le hack du execute and wait.
+ * On met des choses dans la session pour pouvoir les récupérer.
+ */
+ @Override
+ public void setServletRequest(HttpServletRequest request) {
+ this.request = request;
+ }
+
+ @Override
+ public String execute() {
+
+ String result;
+
+ if (StringUtils.isNotBlank(submitAction)) {
+ result = SUCCESS;
+ } else {
+ result = INPUT;
+ Locale locale = getLocale();
+ WebService webService = ServiceFactory.getWebService();
+
+ try {
+ // renvoi la liste des id subzone-survey et leurs label associé
+ zones = webService.getZoneForFacade(null, false, false);
+ if (CollectionUtils.isNotEmpty(selectZones)) {
+ species = webService.getSpecies(selectZones, false);
+
+ if (selectTypes != null && selectTypes.contains(DataType.COMMUNITY)) {
+ comIndicators = webService.getIndicators(selectZones, DataType.COMMUNITY, locale);
+ }
+ if (selectTypes != null && selectTypes.contains(DataType.POPULATION)) {
+ popIndicators = webService.getIndicators(selectZones, DataType.POPULATION, locale);
+ }
+ }
+ } catch (CoserBusinessException ex) {
+ throw new CoserWebException("Can't get zone map", ex);
+ }
+ }
+
+ return result;
+ }
+
+ public Map<String, String> getZones() {
+ return zones;
+ }
+
+ public List<String> getSelectZones() {
+ return selectZones;
+ }
+
+ public void setSelectZones(List<String> selectZones) {
+ this.selectZones = selectZones;
+ }
+
+ public List<DataType> getSelectTypes() {
+ return selectTypes;
+ }
+
+ public void setSelectTypes(List<DataType> selectTypes) {
+ this.selectTypes = selectTypes;
+ }
+
+ public List<String> getSelectSpecies() {
+ return selectSpecies;
+ }
+
+ public void setSelectSpecies(List<String> selectSpecies) {
+ this.selectSpecies = selectSpecies;
+ }
+
+ public List<String> getSelectComIndicators() {
+ return selectComIndicators;
+ }
+
+ public void setSelectComIndicators(List<String> selectComIndicators) {
+ this.selectComIndicators = selectComIndicators;
+ }
+
+ public List<String> getSelectPopIndicators() {
+ return selectPopIndicators;
+ }
+
+ public void setSelectPopIndicators(List<String> selectPopIndicators) {
+ this.selectPopIndicators = selectPopIndicators;
+ }
+
+ public Map<String, String> getSpecies() {
+ return species;
+ }
+
+ public Map<String, String> getComIndicators() {
+ return comIndicators;
+ }
+
+ public Map<String, String> getPopIndicators() {
+ return popIndicators;
+ }
+
+ public void setSubmitAction(String submitAction) {
+ this.submitAction = submitAction;
+ }
+
+ public void setAccepted(boolean accepted) {
+ this.accepted = accepted;
+ }
+
+ @Action(value="extract-quality",
+ results= {
+ @Result(location="/WEB-INF/content/search/extract-success.jsp"),
+ @Result(name="download", type="redirect", params={
+ "location", "${location}"})})
+ public String quality() {
+ String result;
+ if (!accepted) {
+ addFieldError("accepted", getText("message.quality.notaccepted"));
+ result = "success";
+ } else {
+
+ // petit hack pour mettre la locale dans la session car
+ // après, on n'a plus accès au context dans le executeAndWait
+ request.getSession().setAttribute("locale", getLocale());
+ result = "download";
+ }
+ return result;
+ }
+
+ /**
+ * C'est super dur des faire une redirection sur une url.
+ * Construction d'une url complete.
+ *
+ * @return l'url de redirection
+ */
+ public String getLocation() {
+ String url = "extract-download?accepted=true";
+ if (selectZones != null) {
+ for (String zone : selectZones) {
+ url += "&selectZones=" + zone;
+ }
+ }
+ if (selectTypes != null) {
+ for (DataType type : selectTypes) {
+ url += "&selectTypes=" + type;
+ }
+ }
+ if (selectSpecies != null) {
+ for (String species : selectSpecies) {
+ url += "&selectSpecies=" + species;
+ }
+ }
+ if (selectComIndicators != null) {
+ for (String selectComIndicator : selectComIndicators) {
+ url += "&selectComIndicators=" + selectComIndicator;
+ }
+ }
+ if (selectPopIndicators != null) {
+ for (String selectPopIndicator : selectPopIndicators) {
+ url += "&selectPopIndicators=" + selectPopIndicator;
+ }
+ }
+ return url;
+ }
+
+ protected File zipFile;
+
+ @Action(value="extract-download",
+ results={
+ @Result(name="wait", location="/WEB-INF/content/search/extract-wait.jsp"),
+ @Result(type="stream", params={"contentType", "application/zip", "inputName", "inputStream", "contentDisposition", "attachment; filename=\"${filename}\""})})
+ public String download() {
+ try {
+ Locale locale = (Locale)request.getSession().getAttribute("locale");
+ WebService webService = ServiceFactory.getWebService();
+
+ zipFile = webService.extractData(selectZones, selectTypes, selectSpecies,
+ selectComIndicators, selectPopIndicators, locale);
+ } catch (Exception ex) {
+ if (log.isErrorEnabled()) {
+ log.error("Can't extract data", ex);
+ }
+ throw new CoserWebException("Can't extract data", ex);
+ }
+ return "success";
+ }
+
+ public InputStream getInputStream() {
+ InputStream is = null;
+ try {
+ is = new FileInputStream(zipFile);
+ } catch (Exception ex) {
+ if (log.isErrorEnabled()) {
+ log.error("Can't extract data", ex);
+ }
+ throw new CoserWebException("Can't extract data", ex);
+ }
+ return is;
+ }
+
+ public String getFilename() {
+ return "extract.zip";
+ }
+}
Property changes on: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/search/ExtractAction.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
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 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package.properties 2012-11-16 15:25:34 UTC (rev 1084)
@@ -29,7 +29,7 @@
message.admin.listprojects.indicatorsprojects.comment=Removing an indicator project will also delete projet data source.
message.admin.listprojects.mapsprojects=Maps projects by zones
message.admin.login=Login
-message.admin.loginrequiered=Autentication required
+message.admin.loginrequiered=Authentication required
message.admin.password=Password
message.com.downloadascsv=Download as CSV
message.com.downloadaszip=Download as ZIP
@@ -39,17 +39,23 @@
message.com.selectindicatorlist=Select a data list
message.com.title=Community indices
message.common.anchortop=Top
+message.common.community=community
message.common.facade=Sea
+message.common.indicatorsof=Indicators of
message.common.jsreadmore=Read more
message.common.noresults=No results available
+message.common.population=population
message.common.selectfacade=Select an area
message.common.selectindicator=Select an indicator
message.common.selectpop=Select a population
message.common.selectspecies=Select a species
message.common.selectsurvey=Select a survey
message.common.selectzone=Select an area
+message.common.species=Species
message.common.validform=Valid
message.common.zone=Zone
+message.common.zones=Zones
+message.common.datatypes=Data types
message.documents.genparagraph1=Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. 2009. {0}
message.documents.genparagraph2=Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Bilan 2007. 2009. {0}
message.documents.genparagraph3=L''�tat des communaut�s exploit�es au large des c\u00F4tes de France. Application d''indicateurs � l''�valuation de l''impact de la p�che. Bilan 2004 Edition 2009. {0}
@@ -67,17 +73,21 @@
message.documents.indicatorparagraph1=Dreves L., C. Abernot-Le Gac, E. Antajan, P. Clabaut, P. Claquin, M.L. Cochard, P. Monbet, J. Morin, A. T�tard, C. Warenbourg & H. Thillaye du Boullay, 2010. Synth�se hydrobiologique du site �lectronucl�aire de Penly. Ifremer. DOP/LER/2010.05. 280 p.
message.documents.indicatortitle3=Travaux ayant utilis� les r�sultats du groupe de travail sur les indicateurs de populations et de peuplements
message.documents.title=Documents
-message.index.datatypecom=Community indices by area.
+message.index.datatypecom=Community indices by area
message.index.datatypemap=Species distribution maps by area
message.index.datatypepop=Population indices by species by area
message.index.datatypesource=Raw data by sampling unit (generally by haul)
-message.index.datatypetitle=Four data products are presented
+message.index.datatypesource.short=Raw data by sampling unit
+message.index.datatypetitle=Viewing data online
message.index.documentsmessage=Documents
message.index.documentstitle=Documents
+message.index.extractdatatitle=Extract data
+message.index.extractdatalink=Search form
message.index.paragraph1=This web site has been created to provide easy access to the raw data and index estimates derived from the scientific surveys carried out by Ifremer along the French coasts.
message.index.paragraph2=All data made available have passed rigorous quality checks. However, as the reliability of results interpretations depends directly on the data used, users are cordially invited to study carefully the survey and quality check protocols.
message.index.paragraph3=Each survey is carried out using a specific sampling design. Data analyses and interpretation of each time series must therefore take into account the sampling designs. The data are presented by survey series on the web site.
message.index.paragraph4=The species codes used in the data tables are those of the taxinomic reference file of the Syst�me d''informations halieutiques de l''Ifremer ({0}).
+message.index.paragraph5=The link below allows you to extract the elements of the site (graphics and data) in the form of a .zip file (containing a pdf document and data)
message.index.partnertitle=Group members
message.index.partnerparagraph1=The results presented on this web site are the fruit of an internal Ifremer working group which has been active since 2001 with the objective of developing population and community indicators for the survey data collected since the end of the 1970s along the French coasts. The main group members are (by Ifremer location and in alphabetical order): Florence Sanchez (Anglet), Franck Coppin, Sandrine Vaz and Yves V�rin (Boulogne-sur-mer), Andr� Battaglia and Jean-Pierre L�aut� (L''Houmeau), Jean-Claude Mah� and Mich�le Salaun (Lorient), Jacques Bertrand, Anik Brind''Amour, Yves D�saunay, Pascal Laffargue, Olivier Le Pape, J�r�my Lobry, Pascal Lorance, Jean-Charles Poulard, Marie-Jo\u00EBlle Rochet and Verena Trenkel (Nantes), Marie-Laure Cochard, Jocelyne Morin and Ivan Schlaich (Port-en-Bessin), Ang�lique Jadaud and Arnaud Souplet (S�te). The quality process is managed by Vincent Badts. The data-processing is supported by Olivier Berthel�.
message.index.qualitymessage=Quality warning
@@ -115,6 +125,14 @@
message.quality.paragraph4=For any given survey time series, any changes in the sampling procedure, gear, period and area covered might influence the catches. Therefore to avoid the risk of any bias in the analysis, the data must be carefully filtered before use.
message.quality.paragraph5=It is strongly recommended to use the data with care. In the case of doubts about the validity of the data, please contact the administrator of the data base ({0}).
message.quality.title=Quality warning
+message.search.extract.extract=Extract
+message.search.extract.speciesindicators=Indicators and species
+message.search.extract.title=Extract data
+message.search.extract.updatelists=Update lists
+message.search.extract.waittitle=Extracting data...
+message.search.extract.waitparagraph1=Data are being extracting. Please wait.
+message.search.extract.waitparagraph2=This operation take several minutes in the case of many graphics should be generated.
+message.search.extract.zonetype=Zone and data types
message.source.download=Download
message.source.paragraph1=The raw data are presented in four tables which contain the basic information by sampling unit (generally a haul) as well as the relevant information on the sampling design (strata). An additional table provides the latin names for the species codes used in the data files. Il s''agit des donn�es utilis�es pour r�aliser les calculs des indicateurs pr�sent�s. Ces donn�es ont fait l''objet de filtrages et de regroupements �ventuels par rapport aux donn�es de base de chaque s�rie, afin d''assurer la coh�rence des jeux de donn�es en vue du calcul des indicateurs. Ainsi, pour certaines s�ries, des groupes entiers (e.g. les amphihalins) ont pu �tre retir�s. Pour certaines s�ries, certaines ann�es ou certaines strates ont �t� retir�es afin de pr�server l''homog�n�it� de la s�rie. Dans des cas d''�volution du niveau de d�termination au cours de la s�rie, plusieurs taxons ont �t� regroup�s � un niveau sup�rieur.
message.source.paragraph2=Les donn�es IBTS (donn�es fran\u00E7aises et donn�es des autres pays) issues de la base Datras du CIEM (http://datras.ices.dk) ont fait l''objet des m�mes contr\u00F4les de qualit� que les autres s�ries de donn�es utilis�es, ainsi que de filtrages et de regroupements taxinomiques pour en pr�server la coh�rence vis-�-vis du pr�sent objectif de production d''indicateurs de tendances.
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 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_en.properties 2012-11-16 15:25:34 UTC (rev 1084)
@@ -29,7 +29,7 @@
message.admin.listprojects.indicatorsprojects.comment=Removing an indicator project will also delete projet data source.
message.admin.listprojects.mapsprojects=Maps projects by zones
message.admin.login=Login
-message.admin.loginrequiered=Autentication required
+message.admin.loginrequiered=Authentication required
message.admin.password=Password
message.com.downloadascsv=Download as CSV
message.com.downloadaszip=Download as ZIP
@@ -39,17 +39,23 @@
message.com.selectindicatorlist=Select a data list
message.com.title=Community indices
message.common.anchortop=Top
+message.common.community=community
message.common.facade=Sea
+message.common.indicatorsof=Indicators of
message.common.jsreadmore=Read more
message.common.noresults=No results available
+message.common.population=population
message.common.selectfacade=Select an area
message.common.selectindicator=Select an indicator
message.common.selectpop=Select a population
message.common.selectspecies=Select a species
message.common.selectsurvey=Select a survey
message.common.selectzone=Select an area
+message.common.species=Species
message.common.validform=Valid
message.common.zone=Zone
+message.common.zones=Zones
+message.common.datatypes=Data types
message.documents.genparagraph1=Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. 2009. {0}
message.documents.genparagraph2=Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Bilan 2007. 2009. {0}
message.documents.genparagraph3=L''�tat des communaut�s exploit�es au large des c\u00F4tes de France. Application d''indicateurs � l''�valuation de l''impact de la p�che. Bilan 2004 Edition 2009. {0}
@@ -67,17 +73,21 @@
message.documents.indicatorparagraph1=Dreves L., C. Abernot-Le Gac, E. Antajan, P. Clabaut, P. Claquin, M.L. Cochard, P. Monbet, J. Morin, A. T�tard, C. Warenbourg & H. Thillaye du Boullay, 2010. Synth�se hydrobiologique du site �lectronucl�aire de Penly. Ifremer. DOP/LER/2010.05. 280 p.
message.documents.indicatortitle3=Travaux ayant utilis� les r�sultats du groupe de travail sur les indicateurs de populations et de peuplements
message.documents.title=Documents
-message.index.datatypecom=Community indices by area.
+message.index.datatypecom=Community indices by area
message.index.datatypemap=Species distribution maps by area
message.index.datatypepop=Population indices by species by area
message.index.datatypesource=Raw data by sampling unit (generally by haul)
-message.index.datatypetitle=Four data products are presented
+message.index.datatypesource.short=Raw data by sampling unit
+message.index.datatypetitle=Viewing data online
message.index.documentsmessage=Documents
message.index.documentstitle=Documents
+message.index.extractdatatitle=Extract data
+message.index.extractdatalink=Search form
message.index.paragraph1=This web site has been created to provide easy access to the raw data and index estimates derived from the scientific surveys carried out by Ifremer along the French coasts.
message.index.paragraph2=All data made available have passed rigorous quality checks. However, as the reliability of results interpretations depends directly on the data used, users are cordially invited to study carefully the survey and quality check protocols.
message.index.paragraph3=Each survey is carried out using a specific sampling design. Data analyses and interpretation of each time series must therefore take into account the sampling designs. The data are presented by survey series on the web site.
message.index.paragraph4=The species codes used in the data tables are those of the taxinomic reference file of the Syst�me d''informations halieutiques de l''Ifremer ({0}).
+message.index.paragraph5=The link below allows you to extract the elements of the site (graphics and data) in the form of a .zip file (containing a pdf document and data)
message.index.partnertitle=Group members
message.index.partnerparagraph1=The results presented on this web site are the fruit of an internal Ifremer working group which has been active since 2001 with the objective of developing population and community indicators for the survey data collected since the end of the 1970s along the French coasts. The main group members are (by Ifremer location and in alphabetical order): Florence Sanchez (Anglet), Franck Coppin, Sandrine Vaz and Yves V�rin (Boulogne-sur-mer), Andr� Battaglia and Jean-Pierre L�aut� (L''Houmeau), Jean-Claude Mah� and Mich�le Salaun (Lorient), Jacques Bertrand, Anik Brind''Amour, Yves D�saunay, Pascal Laffargue, Olivier Le Pape, J�r�my Lobry, Pascal Lorance, Jean-Charles Poulard, Marie-Jo\u00EBlle Rochet and Verena Trenkel (Nantes), Marie-Laure Cochard, Jocelyne Morin and Ivan Schlaich (Port-en-Bessin), Ang�lique Jadaud and Arnaud Souplet (S�te). The quality process is managed by Vincent Badts. The data-processing is supported by Olivier Berthel�.
message.index.qualitymessage=Quality warning
@@ -115,6 +125,14 @@
message.quality.paragraph4=For any given survey time series, any changes in the sampling procedure, gear, period and area covered might influence the catches. Therefore to avoid the risk of any bias in the analysis, the data must be carefully filtered before use.
message.quality.paragraph5=It is strongly recommended to use the data with care. In the case of doubts about the validity of the data, please contact the administrator of the data base ({0}).
message.quality.title=Quality warning
+message.search.extract.extract=Extract
+message.search.extract.speciesindicators=Indicators and species
+message.search.extract.title=Extract data
+message.search.extract.updatelists=Update lists
+message.search.extract.waittitle=Extracting data...
+message.search.extract.waitparagraph1=Data are being extracting. Please wait.
+message.search.extract.waitparagraph2=This operation take several minutes in the case of many graphics should be generated.
+message.search.extract.zonetype=Zone and data types
message.source.download=Download
message.source.paragraph1=The raw data are presented in four tables which contain the basic information by sampling unit (generally a haul) as well as the relevant information on the sampling design (strata). An additional table provides the latin names for the species codes used in the data files. Il s''agit des donn�es utilis�es pour r�aliser les calculs des indicateurs pr�sent�s. Ces donn�es ont fait l''objet de filtrages et de regroupements �ventuels par rapport aux donn�es de base de chaque s�rie, afin d''assurer la coh�rence des jeux de donn�es en vue du calcul des indicateurs. Ainsi, pour certaines s�ries, des groupes entiers (e.g. les amphihalins) ont pu �tre retir�s. Pour certaines s�ries, certaines ann�es ou certaines strates ont �t� retir�es afin de pr�server l''homog�n�it� de la s�rie. Dans des cas d''�volution du niveau de d�termination au cours de la s�rie, plusieurs taxons ont �t� regroup�s � un niveau sup�rieur.
message.source.paragraph2=Les donn�es IBTS (donn�es fran\u00E7aises et donn�es des autres pays) issues de la base Datras du CIEM (http://datras.ices.dk) ont fait l''objet des m�mes contr\u00F4les de qualit� que les autres s�ries de donn�es utilis�es, ainsi que de filtrages et de regroupements taxinomiques pour en pr�server la coh�rence vis-�-vis du pr�sent objectif de production d''indicateurs de tendances.
Modified: trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_es.properties
===================================================================
--- trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_es.properties 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_es.properties 2012-11-16 15:25:34 UTC (rev 1084)
@@ -39,17 +39,23 @@
message.com.selectindicatorlist=S�lectionner une liste de donn�es
message.com.title=Indices de communaut�s
message.common.anchortop=Haut
+message.common.community=community
message.common.facade=Facade
+message.common.indicatorsof=Indicateurs de
message.common.jsreadmore=Voir la suite
message.common.noresults=Aucun r�sultat disponible.
+message.common.population=population
message.common.selectfacade=S�lectionnez une fa�ade
message.common.selectindicator=S�lectionnez un indicateur
message.common.selectpop=S�lectionnez une population
message.common.selectspecies=S�lectionnez une esp�ce
message.common.selectsurvey=S�lectionnez une campagne
message.common.selectzone=S�lectionnez une zone
+message.common.species=Species
message.common.validform=Valider
message.common.zone=Zone
+message.common.zones=Zones
+message.common.datatypes=Type de donn�es
message.documents.genparagraph1=Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. 2009. {0}
message.documents.genparagraph2=Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Bilan 2007. 2009. {0}
message.documents.genparagraph3=L''�tat des communaut�s exploit�es au large des c�tes de France. Application d''indicateurs � l''�valuation de l''impact de la p�che. Bilan 2004 Edition 2009. {0}
@@ -67,17 +73,21 @@
message.documents.indicatorparagraph1=Dreves L., C. Abernot-Le Gac, E. Antajan, P. Clabaut, P. Claquin, M.L. Cochard, P. Monbet, J. Morin, A. T�tard, C. Warenbourg & H. Thillaye du Boullay, 2010. Synth�se hydrobiologique du site �lectronucl�aire de Penly. Ifremer. DOP/LER/2010.05. 280 p.
message.documents.indicatortitle3=Travaux ayant utilis� les r�sultats du groupe de travail sur les indicateurs de populations et de peuplements
message.documents.title=Documents
-message.index.datatypecom=Des indices de communaut� par zone.
+message.index.datatypecom=Des indices de communaut� par zone
message.index.datatypemap=Des cartes de distribution par esp�ce et par zone
message.index.datatypepop=Des indices biologiques par esp�ce et par zone
message.index.datatypesource=Des donn�es par op�ration d''�chantillonnage (en g�n�ral par trait de chalut)
-message.index.datatypetitle=Quatre types de donn�es sont pr�sent�es
+message.index.datatypesource.short=Des donn�es par op�ration d''�chantillonnage
+message.index.datatypetitle=Consultation des donn�es en ligne
message.index.documentsmessage=Documents
message.index.documentstitle=Documents
+message.index.extractdatatitle=Extraction des donn�es
+message.index.extractdatalink=Formulaire de recherche
message.index.paragraph1=Ce site a �t� con�u pour fournir en libre acc�s des donn�es brutes et des donn�es �labor�es relatives aux campagnes scientifiques d''observation halieutique conduites par l''Ifremer le long des c�tes fran�aises.
message.index.paragraph2=Toutes les donn�es mises � disposition ont fait l''objet de qualification selon des protocoles sp�cifiques. La qualit� des interpr�tations �tant directement li�e � la nature des donn�es source, les utilisateurs de donn�es sont invit�s � consid�rer avec attention les descriptions des protocoles mis en \u0153uvre ainsi que les niveaux de qualit� contr�l�s.
message.index.paragraph3=Chaque s�rie de campagnes est conduite selon une strat�gie d''�chantillonnage sp�cifique. Sauf cas particuliers, les analyses et interpr�tations doivent �tre conduites par s�rie, en prenant en compte les strat�gies d''�chantillonnage propres � chacune de ces s�ries. Sur le site, les donn�es sont pr�sent�es par s�rie.
message.index.paragraph4=Dans les tables de donn�es, toutes les esp�ces sont identifi�es selon le r�f�rentiel taxinomique du Syst�me d''informations halieutiques de l''Ifremer ({0}).
+message.index.paragraph5=Les liens ci-dessous vous permet d''extraire les �l�ments du site (graphique et donn�es) sous la forme d''un fichier .zip (contenant un document pdf et les donn�es)
message.index.partnertitle=Membres du groupe
message.index.partnerparagraph1=Les r�sultats pr�sent�s sur ce site sont le produit de l''activit� d''un groupe de travail de l''Ifremer qui se r�unit chaque ann�e depuis 2001 pour d�velopper des indicateurs de populations et de peuplements � partir des donn�es des s�ries de campagnes halieutiques standardis�es conduites depuis la fin des ann�es 1970 par l''Ifremer le long des c�tes de France m�tropolitaine. Les principaux membres du groupe sont (par ordre alphab�tique de site et de patronyme)\u00A0: Florence Sanchez (Anglet), Franck Coppin, Sandrine Vaz et Yves V�rin (Boulogne-sur-mer), Andr� Battaglia et Jean-Pierre L�aut� (L''Houmeau), Jean-Claude Mah� et Mich�le Salaun (Lorient), Jacques Bertrand, Anik Brind''Amour, Yves D�saunay, Pascal Laffargue, Olivier Le Pape, J�r�my Lobry, Pascal Lorance, Jean-Charles Poulard, Marie-Jo\u00EBlle Rochet et Verena Trenkel (Nantes), Marie-Laure Cochard, Jocelyne Morin et Ivan Schlaich (Port-en-Bessin), Ang�lique Jadaud et Arnaud Souplet (S�te). La d�marche qualit� est g�r�e par Vincent Badts. Le support informatique de gestion des donn�es est assur� par Olivier Berthel�.
message.index.qualitymessage=Avertissement qualit�
@@ -115,6 +125,15 @@
message.quality.paragraph4=Pour les campagnes d''une m�me s�rie, des changements dans les proc�dures d''�chantillonnage, dans les caract�ristiques des engins, dans la p�riode de r�alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr�venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn�es doivent �tre pr�alablement filtr�s ad�quatement.
message.quality.paragraph5=Il est vivement recommand� aux utilisateurs de donn�es de les traiter avec pr�caution. Si des utilisateurs s''interrogent sur la validit� de donn�es, ils sont invit�s � contacter l''administrateur de la base de donn�es ({0}).
message.quality.title=Avertissement Qualit�
+message.search.extract.extract=Extraire
+message.search.extract.speciesindicators=Esp�ces et indicateurs
+message.search.extract.title=Extraction des donn�es
+message.search.extract.updatelists=Mise � jour des listes
+message.search.extract.waittitle=Extraction en cours...
+message.search.extract.waitparagraph1=Les donn�es sont en cours d'extraction. Merci de patienter.
+message.search.extract.waitparagraph2=Cette op�ration peut prendre plusieurs minute dans le cas ou de nombreux graphiques doivent �tre g�n�r�s.
+message.search.extract.zonetype=Zone et type de donn�es
+message.search.extract.title=Extraction des donn�es
message.source.download=T�l�charger
message.source.paragraph1=Les donn�es de base sont pr�sent�es selon quatre tables fournissant des informations de base �lev�es � l''op�ration d''�chantillonnage (en g�n�ral un trait de chalut) et organis�es selon des unit�s g�ographiques d�finies en relation avec le plan d''�chantillonnage. Une table suppl�mentaire pr�sente le r�f�rentiel taxinomique associ� aux donn�es. Il s''agit des donn�es utilis�es pour r�aliser les calculs des indicateurs pr�sent�s. Ces donn�es ont fait l''objet de filtrages et de regroupements �ventuels par rapport aux donn�es de base de chaque s�rie, afin d''assurer la coh�rence des jeux de donn�es en vue du calcul des indicateurs. Ainsi, pour certaines s�ries, des groupes entiers (e.g. les amphihalins) ont pu �tre retir�s. Pour certaines s�ries, certaines ann�es ou certaines strates ont �t� retir�es afin de pr�server l''homog�n�it� de la s�rie. Dans des cas d''�volution du niveau de d�termination au cours de la s�rie, plusieurs taxons ont �t� regroup�s � un niveau sup�rieur.
message.source.paragraph2=Les donn�es IBTS (donn�es fran�aises et donn�es des autres pays) issues de la base Datras du CIEM (http://datras.ices.dk) ont fait l''objet des m�mes contr�les de qualit� que les autres s�ries de donn�es utilis�es, ainsi que de filtrages et de regroupements taxinomiques pour en pr�server la coh�rence vis-�-vis du pr�sent objectif de production d''indicateurs de tendances.
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 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-web/src/main/resources/fr/ifremer/coser/web/package_fr.properties 2012-11-16 15:25:34 UTC (rev 1084)
@@ -39,17 +39,23 @@
message.com.selectindicatorlist=S�lectionner une liste de donn�es
message.com.title=Indices de communaut�s
message.common.anchortop=Haut
+message.common.community=communaut�
message.common.facade=Facade
+message.common.indicatorsof=Indicateurs de
message.common.jsreadmore=Voir la suite
message.common.noresults=Aucun r�sultat disponible.
+message.common.population=population
message.common.selectfacade=S�lectionnez une fa�ade
message.common.selectindicator=S�lectionnez un indicateur
message.common.selectpop=S�lectionnez une population
message.common.selectspecies=S�lectionnez une esp�ce
message.common.selectsurvey=S�lectionnez une campagne
message.common.selectzone=S�lectionnez une zone
+message.common.species=Esp�ces
message.common.validform=Valider
message.common.zone=Zone
+message.common.zones=Zones
+message.common.datatypes=Type de donn�es
message.documents.genparagraph1=Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Atlas de distribution. Bilan 2008. 2009. {0}
message.documents.genparagraph2=Grands invert�br�s et poissons observ�s par les campagnes scientifiques. Bilan 2007. 2009. {0}
message.documents.genparagraph3=L''�tat des communaut�s exploit�es au large des c�tes de France. Application d''indicateurs � l''�valuation de l''impact de la p�che. Bilan 2004 Edition 2009. {0}
@@ -67,17 +73,21 @@
message.documents.indicatorparagraph1=Dreves L., C. Abernot-Le Gac, E. Antajan, P. Clabaut, P. Claquin, M.L. Cochard, P. Monbet, J. Morin, A. T�tard, C. Warenbourg & H. Thillaye du Boullay, 2010. Synth�se hydrobiologique du site �lectronucl�aire de Penly. Ifremer. DOP/LER/2010.05. 280 p.
message.documents.indicatortitle3=Travaux ayant utilis� les r�sultats du groupe de travail sur les indicateurs de populations et de peuplements
message.documents.title=Documents
-message.index.datatypecom=Des indices de communaut� par zone.
+message.index.datatypecom=Des indices de communaut� par zone
message.index.datatypemap=Des cartes de distribution par esp�ce et par zone
message.index.datatypepop=Des indices biologiques par esp�ce et par zone
message.index.datatypesource=Des donn�es par op�ration d''�chantillonnage (en g�n�ral par trait de chalut)
-message.index.datatypetitle=Quatre types de donn�es sont pr�sent�es
+message.index.datatypesource.short=Des donn�es par op�ration d''�chantillonnage
+message.index.datatypetitle=Consultation des donn�es en ligne
message.index.documentsmessage=Documents
message.index.documentstitle=Documents
+message.index.extractdatatitle=Extraction des donn�es
+message.index.extractdatalink=Formulaire de recherche
message.index.paragraph1=Ce site a �t� con�u pour fournir en libre acc�s des donn�es brutes et des donn�es �labor�es relatives aux campagnes scientifiques d''observation halieutique conduites par l''Ifremer le long des c�tes fran�aises.
message.index.paragraph2=Toutes les donn�es mises � disposition ont fait l''objet de qualification selon des protocoles sp�cifiques. La qualit� des interpr�tations �tant directement li�e � la nature des donn�es source, les utilisateurs de donn�es sont invit�s � consid�rer avec attention les descriptions des protocoles mis en \u0153uvre ainsi que les niveaux de qualit� contr�l�s.
message.index.paragraph3=Chaque s�rie de campagnes est conduite selon une strat�gie d''�chantillonnage sp�cifique. Sauf cas particuliers, les analyses et interpr�tations doivent �tre conduites par s�rie, en prenant en compte les strat�gies d''�chantillonnage propres � chacune de ces s�ries. Sur le site, les donn�es sont pr�sent�es par s�rie.
message.index.paragraph4=Dans les tables de donn�es, toutes les esp�ces sont identifi�es selon le r�f�rentiel taxinomique du Syst�me d''informations halieutiques de l''Ifremer ({0}).
+message.index.paragraph5=Les liens ci-dessous vous permet d''extraire les �l�ments du site (graphique et donn�es) sous la forme d''un fichier .zip (contenant un document pdf et les donn�es)
message.index.partnertitle=Membres du groupe
message.index.partnerparagraph1=Les r�sultats pr�sent�s sur ce site sont le produit de l''activit� d''un groupe de travail de l''Ifremer qui se r�unit chaque ann�e depuis 2001 pour d�velopper des indicateurs de populations et de peuplements � partir des donn�es des s�ries de campagnes halieutiques standardis�es conduites depuis la fin des ann�es 1970 par l''Ifremer le long des c�tes de France m�tropolitaine. Les principaux membres du groupe sont (par ordre alphab�tique de site et de patronyme)\u00A0: Florence Sanchez (Anglet), Franck Coppin, Sandrine Vaz et Yves V�rin (Boulogne-sur-mer), Andr� Battaglia et Jean-Pierre L�aut� (L''Houmeau), Jean-Claude Mah� et Mich�le Salaun (Lorient), Jacques Bertrand, Anik Brind''Amour, Yves D�saunay, Pascal Laffargue, Olivier Le Pape, J�r�my Lobry, Pascal Lorance, Jean-Charles Poulard, Marie-Jo\u00EBlle Rochet et Verena Trenkel (Nantes), Marie-Laure Cochard, Jocelyne Morin et Ivan Schlaich (Port-en-Bessin), Ang�lique Jadaud et Arnaud Souplet (S�te). La d�marche qualit� est g�r�e par Vincent Badts. Le support informatique de gestion des donn�es est assur� par Olivier Berthel�.
message.index.qualitymessage=Avertissement qualit�
@@ -115,6 +125,14 @@
message.quality.paragraph4=Pour les campagnes d''une m�me s�rie, des changements dans les proc�dures d''�chantillonnage, dans les caract�ristiques des engins, dans la p�riode de r�alisation de la campagne et la zone couverte peuvent influencer les captures. Pour pr�venir les risques de biais dans les analyses en raison de ces facteurs, les jeux de donn�es doivent �tre pr�alablement filtr�s ad�quatement.
message.quality.paragraph5=Il est vivement recommand� aux utilisateurs de donn�es de les traiter avec pr�caution. Si des utilisateurs s''interrogent sur la validit� de donn�es, ils sont invit�s � contacter l''administrateur de la base de donn�es ({0}).
message.quality.title=Avertissement Qualit�
+message.search.extract.extract=Extraire
+message.search.extract.speciesindicators=Esp�ces et indicateurs
+message.search.extract.title=Extraction des donn�es
+message.search.extract.updatelists=Mise � jour des listes
+message.search.extract.waittitle=Extraction en cours...
+message.search.extract.waitparagraph1=Les donn�es sont en cours d''extraction. Merci de patienter.
+message.search.extract.waitparagraph2=Cette op�ration peut prendre plusieurs minute dans le cas o� de nombreux graphiques doivent �tre g�n�r�s.
+message.search.extract.zonetype=Zone et type de donn�es
message.source.download=T�l�charger
message.source.paragraph1=Les donn�es de base sont pr�sent�es selon quatre tables fournissant des informations de base �lev�es � l''op�ration d''�chantillonnage (en g�n�ral un trait de chalut) et organis�es selon des unit�s g�ographiques d�finies en relation avec le plan d''�chantillonnage. Une table suppl�mentaire pr�sente le r�f�rentiel taxinomique associ� aux donn�es. Il s''agit des donn�es utilis�es pour r�aliser les calculs des indicateurs pr�sent�s. Ces donn�es ont fait l''objet de filtrages et de regroupements �ventuels par rapport aux donn�es de base de chaque s�rie, afin d''assurer la coh�rence des jeux de donn�es en vue du calcul des indicateurs. Ainsi, pour certaines s�ries, des groupes entiers (e.g. les amphihalins) ont pu �tre retir�s. Pour certaines s�ries, certaines ann�es ou certaines strates ont �t� retir�es afin de pr�server l''homog�n�it� de la s�rie. Dans des cas d''�volution du niveau de d�termination au cours de la s�rie, plusieurs taxons ont �t� regroup�s � un niveau sup�rieur.
message.source.paragraph2=Les donn�es IBTS (donn�es fran�aises et donn�es des autres pays) issues de la base Datras du CIEM (http://datras.ices.dk) ont fait l''objet des m�mes contr�les de qualit� que les autres s�ries de donn�es utilis�es, ainsi que de filtrages et de regroupements taxinomiques pour en pr�server la coh�rence vis-�-vis du pr�sent objectif de production d''indicateurs de tendances.
Modified: trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/index.jsp 2012-11-16 15:25:34 UTC (rev 1084)
@@ -36,6 +36,9 @@
<p>
<h2><s:text name="message.index.datatypetitle" /></h2>
+ <s:text name="message.index.paragraph4">
+ <s:param><a href="http://sih.ifremer.fr/">sih.ifremer.fr</a></s:param>
+ </s:text>
<ul class="datalist">
<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>
@@ -45,9 +48,11 @@
</p>
<p>
- <s:text name="message.index.paragraph4">
- <s:param><a href="http://sih.ifremer.fr/">sih.ifremer.fr</a></s:param>
- </s:text>
+ <h2><s:text name="message.index.extractdatatitle" /></h2>
+ <p><s:text name="message.index.paragraph5" /></p>
+ <s:a action="extract" namespace="/search">
+ <s:text name="message.index.extractdatalink" />
+ </s:a>
</p>
<p>
Added: trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-input.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-input.jsp (rev 0)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-input.jsp 2012-11-16 15:25:34 UTC (rev 1084)
@@ -0,0 +1,168 @@
+<!--
+ #%L
+ Coser :: Web
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2012 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.search.extract.title" /></title>
+ </head>
+ <body>
+
+ <form action="<s:url action="extract" />" method="post">
+
+ <h2><s:text name="message.search.extract.zonetype" /></h2>
+
+ <table style="width:100%">
+ <tr>
+ <td><s:text name="message.common.zones" /> :</td>
+ <td>
+ <select name="selectZones" multiple="multiple" style="width:100%" id="selectZones">
+ <s:iterator value="zones" var="zone">
+ <option value="<s:property value="key" />"
+ <s:if test="selectZones.contains(#zone.key)">
+ selected="selected"
+ </s:if>>
+ <s:property value="value" /></option>
+ </s:iterator>
+ </select></td>
+ <td style="vertical-align:top">
+ <img src="<s:url value='/images/stock_select_table.png' />"
+ onClick="javascript:coserSelectAll($('#selectZones'))" />
+ <br />
+ <img src="<s:url value='/images/stock_select_clear.png' />"
+ onClick="javascript:coserUnSelectAll($('#selectZones'))" /></td>
+ </tr>
+ <tr>
+ <td><s:text name="message.common.datatypes" /> :</td>
+ <td>
+ <select name="selectTypes" multiple="multiple" style="width:100%" id="selectTypes">
+ <option value="<s:property value="@fr.ifremer.coser.util.DataType@MAP" />"
+ <s:if test="selectTypes.contains(@fr.ifremer.coser.util.DataType@MAP)">
+ selected="selected"
+ </s:if>>
+ <s:text name="message.index.datatypemap" /></option>
+ <option value="<s:property value="@fr.ifremer.coser.util.DataType@POPULATION" />"
+ <s:if test="selectTypes.contains(@fr.ifremer.coser.util.DataType@POPULATION)">
+ selected="selected"
+ </s:if>>
+ <s:text name="message.index.datatypepop" /></option>
+ <option value="<s:property value="@fr.ifremer.coser.util.DataType@COMMUNITY" />"
+ <s:if test="selectTypes.contains(@fr.ifremer.coser.util.DataType@COMMUNITY)">
+ selected="selected"
+ </s:if>>
+ <s:text name="message.index.datatypecom" /></option>
+ <option value="<s:property value="@fr.ifremer.coser.util.DataType@SOURCE" />"
+ <s:if test="selectTypes.contains(@fr.ifremer.coser.util.DataType@SOURCE)">
+ selected="selected"
+ </s:if>>
+ <s:text name="message.index.datatypesource.short" /></option>
+ </select></td>
+ <td style="vertical-align:top">
+ <img src="<s:url value='/images/stock_select_table.png' />"
+ onClick="javascript:coserSelectAll($('#selectTypes'))" />
+ <br />
+ <img src="<s:url value='/images/stock_select_clear.png' />"
+ onClick="javascript:coserUnSelectAll($('#selectTypes'))" /></td>
+ </tr>
+ <tr>
+ <td colspan="2"><s:submit value="%{getText('message.search.extract.updatelists')}" /></td>
+ </tr>
+ </table>
+
+ <s:if test="!selectZones.empty">
+ <h2><s:text name="message.search.extract.speciesindicators" /></h2>
+
+ <table style="width:100%">
+ <tr>
+ <td><s:text name="message.common.species" /> :</td>
+ <td>
+ <select name="selectSpecies" multiple="multiple" style="width:100%" size="10" id="selectSpecies">
+ <s:iterator value="species" var="specy">
+ <option value="<s:property value="key" />"
+ <s:if test="selectSpecies.contains(#specy.key)">
+ selected="selected"
+ </s:if>>
+ <s:property value="value" /></option>
+ </s:iterator>
+ </select></td>
+ <td style="vertical-align:top">
+ <img src="<s:url value='/images/stock_select_table.png' />"
+ onClick="javascript:coserSelectAll($('#selectSpecies'))" />
+ <br />
+ <img src="<s:url value='/images/stock_select_clear.png' />"
+ onClick="javascript:coserUnSelectAll($('#selectSpecies'))" /></td>
+ </tr>
+ <s:if test="comIndicators.size() != 0">
+ <tr>
+ <td><s:text name="message.common.indicatorsof" /><br />
+ <s:text name="message.common.community" /> :</td>
+ <td>
+ <select name="selectComIndicators" multiple="multiple" style="width:100%" size="10" id="selectComIndicators">
+ <s:iterator value="comIndicators" var="comIndicator">
+ <option value="<s:property value="key" />"
+ <s:if test="selectComIndicators.contains(#comIndicator.key)">
+ selected="selected"
+ </s:if>>
+ <s:property value="value" /></option>
+ </s:iterator>
+ </select></td>
+ <td style="vertical-align:top">
+ <img src="<s:url value='/images/stock_select_table.png' />"
+ onClick="javascript:coserSelectAll($('#selectComIndicators'))" />
+ <br />
+ <img src="<s:url value='/images/stock_select_clear.png' />"
+ onClick="javascript:coserUnSelectAll($('#selectComIndicators'))" /></td>
+ </tr>
+ </s:if>
+ <s:if test="popIndicators.size() != 0">
+ <tr>
+ <td><s:text name="message.common.indicatorsof" /><br />
+ <s:text name="message.common.population" /> :</td>
+ <td>
+ <select name="selectPopIndicators" multiple="multiple" style="width:100%" size="10" id="selectPopIndicators">
+ <s:iterator value="popIndicators" var="popIndicator">
+ <option value="<s:property value="key" />"
+ <s:if test="selectPopIndicators.contains(#popIndicator.key)">
+ selected="selected"
+ </s:if>>
+ <s:property value="value" /></option>
+ </s:iterator>
+ </select></td>
+ <td style="vertical-align:top">
+ <img src="<s:url value='/images/stock_select_table.png' />"
+ onClick="javascript:coserSelectAll($('#selectPopIndicators'))" />
+ <br />
+ <img src="<s:url value='/images/stock_select_clear.png' />"
+ onClick="javascript:coserUnSelectAll($('#selectPopIndicators'))" /></td>
+ </tr>
+ </s:if>
+ <tr>
+ <td colspan="2"><s:submit name="submitAction" value="%{getText('message.search.extract.extract')}" /></td>
+ </tr>
+ </table>
+ </s:if>
+ </form>
+ </body>
+</html>
\ No newline at end of file
Added: trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-success.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-success.jsp (rev 0)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-success.jsp 2012-11-16 15:25:34 UTC (rev 1084)
@@ -0,0 +1,69 @@
+<!--
+ #%L
+ Coser :: Web
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2012 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.search.extract.title" /></title>
+ </head>
+ <body>
+
+ <h2><s:text name="message.search.extract.title" /></h2>
+
+ <h3><s:text name="message.quality.title" /></h3>
+
+ <p><s:text name="message.quality.paragraph1" /></p>
+ <ul>
+ <li><s:text name="message.quality.paragraph2" /></li>
+ <li><s:text name="message.quality.paragraph3" /></li>
+ <li><s:text name="message.quality.paragraph4" /></li>
+ </ul>
+ <p>
+ <s:text name="message.quality.paragraph5">
+ <s:param><a href="mailto:<s:property value='adminEmail' />"><s:property value='adminEmail' /></a></s:param>
+ </s:text>
+ </p>
+
+ <s:form action="extract-quality" method="post">
+ <s:iterator value="selectZones">
+ <input type="hidden" name="selectZones" value="<s:property />" />
+ </s:iterator>
+ <s:iterator value="selectTypes">
+ <input type="hidden" name="selectTypes" value="<s:property />" />
+ </s:iterator>
+ <s:iterator value="selectSpecies">
+ <input type="hidden" name="selectSpecies" value="<s:property />" />
+ </s:iterator>
+ <s:iterator value="selectPopIndicators">
+ <input type="hidden" name="selectPopIndicators" value="<s:property />" />
+ </s:iterator>
+ <s:iterator value="selectComIndicators">
+ <input type="hidden" name="selectComIndicators" value="<s:property />" />
+ </s:iterator>
+ <s:checkbox name="accepted" fieldValue="true" label="%{getText('message.quality.acceptance')}"/>
+ <s:submit value="%{getText('message.source.download')}"></s:submit>
+ </s:form>
+ </body>
+</html>
\ No newline at end of file
Added: trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-wait.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-wait.jsp (rev 0)
+++ trunk/coser-web/src/main/webapp/WEB-INF/content/search/extract-wait.jsp 2012-11-16 15:25:34 UTC (rev 1084)
@@ -0,0 +1,40 @@
+<!--
+ #%L
+ Coser :: Web
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2012 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.search.extract.title" /></title>
+ <meta http-equiv="refresh" content="5;url=<s:url includeParams="all" />"/>
+ </head>
+ <body>
+
+ <h2><s:text name="message.search.extract.title" /></h2>
+
+ <h3><s:text name="message.search.extract.waittitle" /></h3>
+ <p><s:text name="message.search.extract.waitparagraph1" /></p>
+ <p><s:text name="message.search.extract.waitparagraph2" /></p>
+ </body>
+</html>
\ No newline at end of file
Added: trunk/coser-web/src/main/webapp/images/stock_select_clear.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/stock_select_clear.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Added: trunk/coser-web/src/main/webapp/images/stock_select_table.png
===================================================================
(Binary files differ)
Property changes on: trunk/coser-web/src/main/webapp/images/stock_select_table.png
___________________________________________________________________
Added: svn:mime-type
+ image/png
Modified: trunk/coser-web/src/main/webapp/js/coser.js
===================================================================
--- trunk/coser-web/src/main/webapp/js/coser.js 2012-11-14 10:49:43 UTC (rev 1083)
+++ trunk/coser-web/src/main/webapp/js/coser.js 2012-11-16 15:25:34 UTC (rev 1084)
@@ -28,3 +28,13 @@
// affiche la carte selectionnee
$('#' + prefix + $(select).val()).show();
}
+
+// selection tous les elements d'un select
+function coserSelectAll(select) {
+ $(select).children("option").prop('selected',true);
+}
+
+// deselection tous les elements d'un select
+function coserUnSelectAll(select) {
+ $(select).children("option").prop('selected',false);
+}
1
0
r1083 - trunk/coser-web/src/main/webapp/images/zones
by echatellier@users.forge.codelutin.com 14 Nov '12
by echatellier@users.forge.codelutin.com 14 Nov '12
14 Nov '12
Author: echatellier
Date: 2012-11-14 11:49:43 +0100 (Wed, 14 Nov 2012)
New Revision: 1083
Url: http://forge.codelutin.com/repositories/revision/coser/1083
Log:
Wrong commit
Removed:
trunk/coser-web/src/main/webapp/images/zones/es.png
Deleted: trunk/coser-web/src/main/webapp/images/zones/es.png
===================================================================
(Binary files differ)
1
0
Author: echatellier
Date: 2012-11-14 11:19:36 +0100 (Wed, 14 Nov 2012)
New Revision: 1082
Url: http://forge.codelutin.com/repositories/revision/coser/1082
Log:
Update to itextpdf 5.3.4
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-10-30 09:50:42 UTC (rev 1081)
+++ trunk/pom.xml 2012-11-14 10:19:36 UTC (rev 1082)
@@ -270,7 +270,7 @@
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
- <version>5.3.2</version>
+ <version>5.3.4</version>
<scope>compile</scope>
</dependency>
1
0
r1081 - in trunk: coser-business/src/main/java/fr/ifremer/coser coser-business/src/main/java/fr/ifremer/coser/bean coser-business/src/main/java/fr/ifremer/coser/services coser-ui/src/main/java/fr/ifremer/coser/ui coser-ui/src/main/java/fr/ifremer/coser/ui/result coser-ui/src/main/java/fr/ifremer/coser/ui/selection coser-ui/src/main/java/fr/ifremer/coser/ui/selection/model coser-ui/src/main/resources/i18n
by echatellier@users.forge.codelutin.com 30 Oct '12
by echatellier@users.forge.codelutin.com 30 Oct '12
30 Oct '12
Author: echatellier
Date: 2012-10-30 10:50:42 +0100 (Tue, 30 Oct 2012)
New Revision: 1081
Url: http://forge.codelutin.com/repositories/revision/coser/1081
Log:
fixes #1613: Inclure le fichier reftax dans l'export rsufi
fixes #1615: Archivage des autres fichiers d'entr?\195?\169e de RSUFI
Added:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionFilesView.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/model/FileListModel.java
Removed:
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/OtherDataFileListModel.java
Modified:
trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResultPath.java
trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java
trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionEditResultDialog.jaxx
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx
trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties
trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/CoserConstants.java 2012-10-30 09:50:42 UTC (rev 1081)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ * Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -59,6 +59,9 @@
/** Nom du dossier de sauvegarde des selections. */
public static final String STORAGE_SELECTION_DIRECTORY = "selections";
+ /** Nom du dossier de stockage des autres fichier de la selection a inclure dans l'export rsufi. */
+ public static final String STORAGE_SELECTION_FILES = "others";
+
/** Nom du dossier des resultats RSufi. */
public static final String STORAGE_RESULTS_DIRECTORY = "results";
@@ -66,7 +69,7 @@
public static final String STORAGE_MAPS_DIRECTORY = "maps";
/** Nom du dossier de stockage des autres fichier de resultats rsufi. */
- public static final String STORAGE_OTHERS_DIRECTORY = "others";
+ public static final String STORAGE_RESULT_FILES = "others";
/** Suffix des nom de fichiers data apres control. */
public static final String STORAGE_CONTROL_SUFFIX = "_co";
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResultPath.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResultPath.java 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/RSufiResultPath.java 2012-10-30 09:50:42 UTC (rev 1081)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2011 Ifremer, Codelutin, Chatellier Eric
+ * Copyright (C) 2011 - 2012 Ifremer, Codelutin, Chatellier Eric
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
@@ -106,8 +106,7 @@
if (!(obj instanceof RSufiResultPath)) {
result = false;
- }
- else {
+ } else {
RSufiResultPath other = (RSufiResultPath)obj;
result &= project.getName().equals(other.project.getName());
result &= selection.getName().equals(other.selection.getName());
Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java
===================================================================
--- trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/bean/Selection.java 2012-10-30 09:50:42 UTC (rev 1081)
@@ -25,6 +25,7 @@
package fr.ifremer.coser.bean;
+import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Properties;
@@ -93,6 +94,9 @@
protected boolean validated;
+ /** Liste des nom de fichiers/dossier present dans other files */
+ protected List<File> otherFiles;
+
protected List<RSufiResult> rsufiResults;
public Selection() {
@@ -261,6 +265,14 @@
getPropertyChangeSupport().firePropertyChange("selectedSpeciesMaturityComment", oldValue, selectedSpeciesMaturityComment);
}
+ public List<File> getOtherFiles() {
+ return otherFiles;
+ }
+
+ public void setOtherFiles(List<File> otherFiles) {
+ this.otherFiles = otherFiles;
+ }
+
public boolean isValidated() {
return validated;
}
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 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2012-10-30 09:50:42 UTC (rev 1081)
@@ -476,7 +476,17 @@
} finally {
IOUtils.closeQuietly(inputStream);
}
-
+
+ // other files dir
+ File othersDir = new File(selectionDirectory, CoserConstants.STORAGE_SELECTION_FILES);
+ List<File> otherFiles = new ArrayList<File>();
+ if (othersDir.isDirectory()) {
+ for (File file : othersDir.listFiles()) {
+ otherFiles.add(file);
+ }
+ }
+ selection.setOtherFiles(otherFiles);
+
List<RSufiResult> rsufiResults = loadRSufiResults(selectionDirectory);
selection.setRsufiResults(rsufiResults);
@@ -539,7 +549,7 @@
rsufiResult.setMapsAvailable(mapsDir.isDirectory());
// other files dir
- File othersDir = new File(resultDirectory, CoserConstants.STORAGE_OTHERS_DIRECTORY);
+ File othersDir = new File(resultDirectory, CoserConstants.STORAGE_RESULT_FILES);
List<File> otherFiles = new ArrayList<File>();
if (othersDir.isDirectory()) {
for (File file : othersDir.listFiles()) {
@@ -1135,7 +1145,7 @@
}
// sauvegarde des fichiers autre
- File otherFilesDirectory = new File(rsufiResultDirectory, CoserConstants.STORAGE_OTHERS_DIRECTORY);
+ File otherFilesDirectory = new File(rsufiResultDirectory, CoserConstants.STORAGE_RESULT_FILES);
for (File othersFile : othersFiles) {
if (othersFile.isDirectory()) {
FileUtils.copyDirectoryToDirectory(othersFile, otherFilesDirectory);
@@ -1156,7 +1166,7 @@
rsufiResult.setMapsAvailable(mapsDir.isDirectory());
// update other files list
- File othersDir = new File(rsufiResultDirectory, CoserConstants.STORAGE_OTHERS_DIRECTORY);
+ File othersDir = new File(rsufiResultDirectory, CoserConstants.STORAGE_RESULT_FILES);
List<File> otherFiles = new ArrayList<File>();
if (othersDir.isDirectory()) {
for (File file : othersDir.listFiles()) {
@@ -1188,7 +1198,7 @@
File selectionDirectory = new File(selectionsDirectory, selection.getName());
File resultsDirectory = new File(selectionDirectory, CoserConstants.STORAGE_RESULTS_DIRECTORY);
File rsufiResultDirectory = new File(resultsDirectory, rsufiResult.getName());
- File otherFilesDirectory = new File(rsufiResultDirectory, CoserConstants.STORAGE_OTHERS_DIRECTORY);
+ File otherFilesDirectory = new File(rsufiResultDirectory, CoserConstants.STORAGE_RESULT_FILES);
// property file
try {
@@ -1211,10 +1221,9 @@
}
}
// update other files list
- File othersDir = new File(rsufiResultDirectory, CoserConstants.STORAGE_OTHERS_DIRECTORY);
List<File> otherFiles = new ArrayList<File>();
- if (othersDir.isDirectory()) {
- for (File file : othersDir.listFiles()) {
+ if (otherFilesDirectory.isDirectory()) {
+ for (File file : otherFilesDirectory.listFiles()) {
otherFiles.add(file);
}
}
@@ -2849,15 +2858,15 @@
public File extractRSUfiData(Project project, Selection selection, File directory, boolean onlyDataTable) throws CoserBusinessException {
// Nommer le dossier RSUFI_DATA_nomduprojet....
- File projectDirectory = new File(directory, "RSUFI_DATA_" + project.getName());
- projectDirectory.mkdirs();
+ File exportDirectory = new File(directory, "RSUFI_DATA_" + project.getName());
+ exportDirectory.mkdirs();
// extract 4 data files
for (Category category : Category.values()) {
if (category.isDataCategory()) {
// originals names without suffix
String storageFileName = commonService.getDataStorageFileName(project, category, null);
- File dataFile = new File(projectDirectory, storageFileName);
+ File dataFile = new File(exportDirectory, storageFileName);
if (log.isDebugEnabled()) {
log.debug("Saving selection file : " + dataFile);
}
@@ -2870,11 +2879,11 @@
if (!onlyDataTable) {
// extract additionnal data file (selected species)
- File listSpeciesFile = new File(projectDirectory, "ListEspeces" + project.getName() + ".txt");
+ File listSpeciesFile = new File(exportDirectory, "ListEspeces" + project.getName() + ".txt");
fillListSpeciesFile(selection, listSpeciesFile);
// extract additionnal project information
- File informationFile = new File(projectDirectory, "project.txt");
+ File informationFile = new File(exportDirectory, "project.txt");
PrintStream out = null;
try {
out = new PrintStream(new BufferedOutputStream(new FileOutputStream(informationFile)));
@@ -2888,6 +2897,20 @@
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, config.getLocale());
out.println(_("coser.business.extract.creationdate") + dateFormat.format(project.getCreationDate()));
+ // add selection additional files
+ File projectsDirectory = config.getProjectsDirectory();
+ File projectDirectory = new File(projectsDirectory, project.getName());
+ File selectionsDirectory = new File(projectDirectory, CoserConstants.STORAGE_SELECTION_DIRECTORY);
+ File selectionDirectory = new File(selectionsDirectory, selection.getName());
+ File otherFilesDirectory = new File(selectionDirectory, CoserConstants.STORAGE_SELECTION_FILES);
+ if (otherFilesDirectory.isDirectory()) {
+ FileUtils.copyDirectoryToDirectory(otherFilesDirectory, exportDirectory);
+ }
+
+ // add reftax
+ File reftaxFile = new File(projectDirectory, CoserConstants.Category.REFTAX_SPECIES.getStorageFileName());
+ FileUtils.copyFileToDirectory(reftaxFile, exportDirectory);
+
} catch (IOException ex) {
throw new CoserBusinessException("Can't save project information file", ex);
}
@@ -2896,7 +2919,7 @@
}
}
- return projectDirectory;
+ return exportDirectory;
}
/**
@@ -3189,47 +3212,54 @@
return CoserUtils.sortByValue(speciesMap);
}
- /*
- * Retourne le nom d'affichage d'une espèce pour l'utilisateur suivant
- * les préférences qu'il a choisit.
+ /**
+ * Save existing rsufi result.
*
- * @param project le projet pour avoir accès au reftax
- * @param speciesId le code a retranscrire
- * @return display name
- * @since 1.3
- *
- public String getSpeciesDisplayField(Project project, String speciesId) {
+ * @param project project
+ * @param selection selection
+ * @param rsufiResult new result to save
+ * @throws CoserBusinessException
+ * @since 1.4
+ */
+ public void editSelectionOptions(Project project, Selection selection, List<File> othersFile) throws CoserBusinessException {
- // "C_Perm";"NumSys";"NivSys";"C_VALIDE";"L_VALIDE";"AA_VALIDE";"C_TxPère";"Taxa"
- int index = -1;
- switch (project.getStorageSpeciesType()) {
- case C_Valide:
- index = ((ReftaxMemoryDataStorage)project.getRefTaxSpecies()).indexOfCValide(speciesId);
- break;
- case C_PERM:
- index = ((ReftaxMemoryDataStorage)project.getRefTaxSpecies()).indexOfCode(speciesId);
- break;
- case L_Valide:
- index = ((ReftaxMemoryDataStorage)project.getRefTaxSpecies()).indexOfLValide(speciesId);
- break;
- }
+ File projectsDirectory = config.getProjectsDirectory();
+ File projectDirectory = new File(projectsDirectory, project.getName());
+ File selectionsDirectory = new File(projectDirectory, CoserConstants.STORAGE_SELECTION_DIRECTORY);
+ File selectionDirectory = new File(selectionsDirectory, selection.getName());
+ File otherFilesDirectory = new File(selectionDirectory, CoserConstants.STORAGE_SELECTION_FILES);
- String speciesText = speciesId;
- if (index >= 0) {
- String[] data = project.getRefTaxSpecies().get(index);
- switch (project.getDisplaySpeciesType()) {
- case C_Valide:
- speciesText = data[3];
- break;
- case C_PERM:
- speciesText = data[0];
- break;
- case L_Valide:
- speciesText = data[4];
- break;
+ // property file
+ try {
+ saveProjectSelection(project, selection);
+
+ // remove some files
+ Collection<File> toDeletes = CollectionUtils.subtract(selection.getOtherFiles(), othersFile);
+ for (File toDelete : toDeletes) {
+ FileUtils.deleteQuietly(toDelete);
}
+ // copy new file
+ for (File otherFile : othersFile) {
+ // non modified result, skipping it
+ if (!otherFile.getAbsolutePath().startsWith(otherFilesDirectory.getAbsolutePath())) {
+ if (otherFile.isDirectory()) {
+ FileUtils.copyDirectoryToDirectory(otherFile, otherFilesDirectory);
+ } else {
+ FileUtils.copyFileToDirectory(otherFile, otherFilesDirectory);
+ }
+ }
+ }
+ // update other files list
+ List<File> otherFiles = new ArrayList<File>();
+ if (otherFilesDirectory.isDirectory()) {
+ for (File file : otherFilesDirectory.listFiles()) {
+ otherFiles.add(file);
+ }
+ }
+ selection.setOtherFiles(otherFiles);
+
+ } catch (IOException ex) {
+ throw new CoserBusinessException("Can't edit result", ex);
}
-
- return speciesText;
- }*/
+ }
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2012-10-30 09:50:42 UTC (rev 1081)
@@ -42,7 +42,6 @@
import javax.swing.filechooser.FileFilter;
import jaxx.runtime.JAXXContext;
-import jaxx.runtime.JAXXUtil;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
Deleted: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/OtherDataFileListModel.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/OtherDataFileListModel.java 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/OtherDataFileListModel.java 2012-10-30 09:50:42 UTC (rev 1081)
@@ -1,85 +0,0 @@
-/*
- * #%L
- *
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-package fr.ifremer.coser.ui.result;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.AbstractListModel;
-
-/**
- * Modele de list pour la list des fichiers et répertoire des fichiers
- * additionnels.
- *
- * @author chatellier
- * @version $Revision$
- *
- * Last update : $Date$
- * By : $Author$
- */
-public class OtherDataFileListModel extends AbstractListModel {
-
- /** serialVersionUID. */
- private static final long serialVersionUID = -8652851018076968539L;
-
- protected List<File> otherFiles;
-
- public OtherDataFileListModel() {
- otherFiles = new ArrayList<File>();
- }
-
- public List<File> getOtherFiles() {
- return otherFiles;
- }
-
- public void setOtherFiles(List<File> otherFiles) {
- this.otherFiles = otherFiles;
- fireContentsChanged(this, 0, otherFiles.size() - 1);
- }
-
- public void add(File file) {
- otherFiles.add(file);
- fireIntervalAdded(this, otherFiles.size() - 1, otherFiles.size() - 1);
- }
-
- public void remove(File file) {
- int index = otherFiles.indexOf(file);
- if (otherFiles.remove(file)) {
- fireIntervalRemoved(this, index, index);
- }
- }
-
- @Override
- public int getSize() {
- return otherFiles.size();
- }
-
- @Override
- public Object getElementAt(int index) {
- return otherFiles.get(index);
- }
-}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionAddResultDialog.jaxx 2012-10-30 09:50:42 UTC (rev 1081)
@@ -143,7 +143,7 @@
<row>
<cell columns="3" weighty="1" fill="both">
<JScrollPane>
- <OtherDataFileListModel id="otherDataFileListModel" />
+ <fr.ifremer.coser.ui.selection.model.FileListModel id="otherDataFileListModel" />
<JList id="otherDataFileList" model="{otherDataFileListModel}"/>
</JScrollPane>
</cell>
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionEditResultDialog.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionEditResultDialog.jaxx 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectionEditResultDialog.jaxx 2012-10-30 09:50:42 UTC (rev 1081)
@@ -85,7 +85,7 @@
<row>
<cell columns="2" weighty="1" fill="both">
<JScrollPane>
- <OtherDataFileListModel id="otherDataFileListModel" />
+ <fr.ifremer.coser.ui.selection.model.FileListModel id="otherDataFileListModel" />
<JList id="otherDataFileList" model="{otherDataFileListModel}"/>
<ListSelectionModel javaBean="otherDataFileList.getSelectionModel()"
onValueChanged="removeOtherFile.setEnabled(getOtherDataFileList().getSelectedIndex() != -1)" />
@@ -102,7 +102,8 @@
</cell>
<cell>
<JButton id="removeOtherFile" text="coser.ui.result.removeOtherDataFile"
- onActionPerformed="getHandler().removeSelectedFile(this)"/>
+ onActionPerformed="getHandler().removeSelectedFile(this)"
+ enabled="false"/>
</cell>
<cell weightx="1" anchor="east">
<JButton text="coser.ui.result.cancel"
Added: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionFilesView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionFilesView.jaxx (rev 0)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionFilesView.jaxx 2012-10-30 09:50:42 UTC (rev 1081)
@@ -0,0 +1,68 @@
+<!--
+ #%L
+ Coser :: UI
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2012 Ifremer, Codelutin, Chatellier Eric
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU 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 General Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/gpl-3.0.html>.
+ #L%
+ -->
+<JDialog title="coser.ui.selection.option.editFilesTitle" modal="true">
+ <SelectionHandler id="handler" javaBean="null" />
+ <Table>
+ <row>
+ <cell fill="horizontal">
+ <JLabel text="coser.ui.selection.option.filesDetails" />
+ </cell>
+ </row>
+ <row>
+ <cell weighty="1" fill="both">
+ <JScrollPane>
+ <fr.ifremer.coser.ui.selection.model.FileListModel id="selectionFilesListModel" />
+ <JList id="selectionFilesList" model="{selectionFilesListModel}"
+ onValueChanged="removeOtherFile.setEnabled(getSelectionFilesList().getSelectedIndex() != -1)" />
+ </JScrollPane>
+ </cell>
+ </row>
+ <row>
+ <cell fill="horizontal" insets="0">
+ <Table>
+ <row>
+ <cell>
+ <JButton text="coser.ui.selection.option.addSelectionFile"
+ onActionPerformed="getHandler().selectResultFileOrDirectory(this, selectionFilesList)"/>
+ </cell>
+ <cell>
+ <JButton id="removeOtherFile" text="coser.ui.selection.option.removeSelectionFile"
+ onActionPerformed="getHandler().removeSelectedFile(this)"
+ enabled="false"/>
+ </cell>
+ <cell weightx="1" anchor="east">
+ <JButton text="coser.ui.result.cancel"
+ onActionPerformed="dispose()"/>
+ </cell>
+ <cell>
+ <JButton id="saveResultButton" text="coser.ui.selection.option.validSelectionFiles"
+ onActionPerformed="getHandler().performSaveSelectionFiles(this)"/>
+ </cell>
+ </row>
+ </Table>
+ </cell>
+ </row>
+ </Table>
+</JDialog>
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2012-10-30 09:50:42 UTC (rev 1081)
@@ -72,6 +72,7 @@
import fr.ifremer.coser.bean.Selection;
import fr.ifremer.coser.services.ProjectService;
import fr.ifremer.coser.services.PublicationService;
+import fr.ifremer.coser.ui.CoserFrameHandler.SelectionFileFilter;
import fr.ifremer.coser.ui.common.DataHandler;
import fr.ifremer.coser.ui.common.SpeciesListRenderer;
import fr.ifremer.coser.ui.control.ControlGraphFrame;
@@ -1341,7 +1342,7 @@
Project project = view.getContextValue(Project.class);
Selection selection = view.getContextValue(Selection.class);
ProjectService projectService = view.getContextValue(ProjectService.class);
- List<File> otherFiles = view.getOtherDataFileListModel().getOtherFiles();
+ List<File> otherFiles = view.getOtherDataFileListModel().getFiles();
RSufiResult newResult = view.getRsufiResult();
@@ -1372,7 +1373,7 @@
// TODO chatellier 20101121 il ne faudrait pas que ca soit le
// meme, sinon meme en annulant il est modifié
editResultView.setRsufiResult(result);
- editResultView.getOtherDataFileListModel().setOtherFiles(new ArrayList<File>(result.getOtherFiles()));
+ editResultView.getOtherDataFileListModel().setFiles(new ArrayList<File>(result.getOtherFiles()));
editResultView.setHandler(this);
editResultView.pack();
editResultView.setLocationRelativeTo(view);
@@ -1391,7 +1392,7 @@
RSufiResult editedResult = view.getRsufiResult();
try {
- List<File> newOthersFile = view.getOtherDataFileListModel().getOtherFiles();
+ List<File> newOthersFile = view.getOtherDataFileListModel().getFiles();
projectService.editRsufiResults(project, selection, editedResult, newOthersFile);
}
catch (CoserBusinessException ex) {
@@ -1545,7 +1546,25 @@
view.getOtherDataFileListModel().add(selectedFile);
}
}
+
+ /**
+ * Select other files (file or directory).
+ *
+ * @param view view
+ * @param listComponent list component to set selected file
+ */
+ public void selectResultFileOrDirectory(SelectionFilesView view, JList listComponent) {
+ CoserConfig config = view.getContextValue(CoserConfig.class);
+ JFileChooser selectFileChooser = getFileChooserInstance(config.getProjectsDirectory());
+ selectFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+ int result = selectFileChooser.showOpenDialog(view);
+ if (result == JFileChooser.APPROVE_OPTION) {
+ File selectedFile = selectFileChooser.getSelectedFile();
+ view.getSelectionFilesListModel().add(selectedFile);
+ }
+ }
+
/**
* Remove selected file in other file list.
*
@@ -1558,6 +1577,17 @@
}
/**
+ * Remove selected file in other file list.
+ *
+ * @param view
+ * @since 1.4
+ */
+ public void removeSelectedFile(SelectionFilesView view) {
+ File selectedFile = (File)view.getSelectionFilesList().getSelectedValue();
+ view.getSelectionFilesListModel().remove(selectedFile);
+ }
+
+ /**
* Genere le log des modifications faites lors du control en HTML
* et l'ouvre dans le navigateur systeme.
*
@@ -1576,4 +1606,42 @@
throw new CoserException("Can't generate html report", ex);
}
}
+
+ /**
+ * Affiche la dialog de modification des fichiers d'une selection.
+ * (appelée depuis l'onglet rsufi)
+ *
+ * @param view parent view
+ * @since 1.4
+ */
+ public void showSelectionFilesEdit(SelectionRsufiView view) {
+ Selection selection = view.getContextValue(Selection.class);
+
+ SelectionFilesView selectionFilesView = new SelectionFilesView(view);
+ selectionFilesView.getSelectionFilesListModel().setFiles(new ArrayList<File>(selection.getOtherFiles()));
+ selectionFilesView.setHandler(this);
+ selectionFilesView.pack();
+ selectionFilesView.setLocationRelativeTo(view);
+ selectionFilesView.setVisible(true);
+ }
+
+ /**
+ * Sauvegarde des options de la selection.
+ *
+ * @param view view containing option
+ */
+ public void performSaveSelectionFiles(SelectionFilesView view) {
+ Project project = view.getContextValue(Project.class);
+ Selection selection = view.getContextValue(Selection.class);
+ ProjectService projectService = view.getContextValue(ProjectService.class);
+
+ try {
+ List<File> newOthersFile = view.getSelectionFilesListModel().getFiles();
+ projectService.editSelectionOptions(project, selection, newOthersFile);
+ }
+ catch (CoserBusinessException ex) {
+ JOptionPane.showMessageDialog(view, ex.getMessage(), _("coser.ui.result.saveError"), JOptionPane.ERROR_MESSAGE);
+ }
+ view.dispose();
+ }
}
Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionRsufiView.jaxx 2012-10-30 09:50:42 UTC (rev 1081)
@@ -32,6 +32,18 @@
<SelectionHandler id="handler" javaBean="null" />
<row>
<cell weightx="1" fill="horizontal">
+ <Table border='{BorderFactory.createTitledBorder(_("coser.ui.selection.option.optionTitle"))}'>
+ <row>
+ <cell weightx="1" anchor="west">
+ <JButton text="coser.ui.selection.option.editFiles"
+ onActionPerformed="getHandler().showSelectionFilesEdit(this)"/>
+ </cell>
+ </row>
+ </Table>
+ </cell>
+ </row>
+ <row>
+ <cell weightx="1" fill="horizontal">
<Table border='{BorderFactory.createTitledBorder(_("coser.ui.result.extractDataTitle"))}'>
<row>
<cell>
Copied: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/model/FileListModel.java (from rev 1064, trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/OtherDataFileListModel.java)
===================================================================
--- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/model/FileListModel.java (rev 0)
+++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/model/FileListModel.java 2012-10-30 09:50:42 UTC (rev 1081)
@@ -0,0 +1,85 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2010 - 2012 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.coser.ui.selection.model;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.AbstractListModel;
+
+/**
+ * Modele de list pour la list des fichiers et répertoire des fichiers
+ * additionnels.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class FileListModel extends AbstractListModel {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = -8652851018076968539L;
+
+ protected List<File> files;
+
+ public FileListModel() {
+ files = new ArrayList<File>();
+ }
+
+ public List<File> getFiles() {
+ return files;
+ }
+
+ public void setFiles(List<File> files) {
+ this.files = files;
+ fireContentsChanged(this, 0, files.size() - 1);
+ }
+
+ public void add(File file) {
+ files.add(file);
+ fireIntervalAdded(this, files.size() - 1, files.size() - 1);
+ }
+
+ public void remove(File file) {
+ int index = files.indexOf(file);
+ if (files.remove(file)) {
+ fireIntervalRemoved(this, index, index);
+ }
+ }
+
+ @Override
+ public int getSize() {
+ return files.size();
+ }
+
+ @Override
+ public Object getElementAt(int index) {
+ return files.get(index);
+ }
+}
Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties
===================================================================
--- trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-10-30 09:50:42 UTC (rev 1081)
@@ -243,6 +243,13 @@
coser.ui.selection.nonJustifiedTitle=Unjustified selection
coser.ui.selection.occurrenceDensitySpecies=L2 \: Filtered species (%d/%d)
coser.ui.selection.occurrencedensityrenderer=<html>%s<span style\='font-size\:85%%;color\:gray;'>(Occ\=%.2f, Dens\=%.2f)</span></html>
+coser.ui.selection.option.addSelectionFile=Add
+coser.ui.selection.option.editFiles=Selection files
+coser.ui.selection.option.editFilesTitle=Edit files
+coser.ui.selection.option.filesDetails=This files will be saved into current selection and copied into RSufi export.
+coser.ui.selection.option.optionTitle=Options
+coser.ui.selection.option.removeSelectionFile=Remove
+coser.ui.selection.option.validSelectionFiles=Save
coser.ui.selection.reloadcontroldata=Reload controled data
coser.ui.selection.replay.chooseselection=Choose selection to replay \:
coser.ui.selection.replay.choosespecies=Choose species to keep \:
Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties
===================================================================
--- trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-10-29 15:16:15 UTC (rev 1080)
+++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-10-30 09:50:42 UTC (rev 1081)
@@ -243,6 +243,13 @@
coser.ui.selection.nonJustifiedTitle=Sélection non justifiée
coser.ui.selection.occurrenceDensitySpecies=L2 \: Espèces filtrées (%d/%d)
coser.ui.selection.occurrencedensityrenderer=<html>%s<span style\='font-size\:85%%;color\:gray;'>(Occ\=%.2f, Dens\=%.2f)</span></html>
+coser.ui.selection.option.addSelectionFile=Ajouter
+coser.ui.selection.option.editFiles=Fichiers de la sélection
+coser.ui.selection.option.editFilesTitle=Modifier les fichiers
+coser.ui.selection.option.filesDetails=Les fichiers suivants seront sauvegardés dans la sélection courante et copier dans l'export RSufi.
+coser.ui.selection.option.optionTitle=Options
+coser.ui.selection.option.removeSelectionFile=Supprimer
+coser.ui.selection.option.validSelectionFiles=Sauver
coser.ui.selection.reloadcontroldata=Recharger les données contrôlées
coser.ui.selection.replay.chooseselection=Choisissez la sélection à rejouer \:
coser.ui.selection.replay.choosespecies=Choisissez les espèces à conserver \:
1
0
r1080 - in trunk: . coser-business coser-ui coser-web
by echatellier@users.forge.codelutin.com 29 Oct '12
by echatellier@users.forge.codelutin.com 29 Oct '12
29 Oct '12
Author: echatellier
Date: 2012-10-29 16:16:15 +0100 (Mon, 29 Oct 2012)
New Revision: 1080
Url: http://forge.codelutin.com/repositories/revision/coser/1080
Log:
Set next version to 1.4
Modified:
trunk/coser-business/pom.xml
trunk/coser-ui/pom.xml
trunk/coser-web/pom.xml
trunk/pom.xml
Modified: trunk/coser-business/pom.xml
===================================================================
--- trunk/coser-business/pom.xml 2012-10-24 16:16:01 UTC (rev 1079)
+++ trunk/coser-business/pom.xml 2012-10-29 15:16:15 UTC (rev 1080)
@@ -6,7 +6,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>coser</artifactId>
- <version>1.3.1-SNAPSHOT</version>
+ <version>1.4-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.coser</groupId>
Modified: trunk/coser-ui/pom.xml
===================================================================
--- trunk/coser-ui/pom.xml 2012-10-24 16:16:01 UTC (rev 1079)
+++ trunk/coser-ui/pom.xml 2012-10-29 15:16:15 UTC (rev 1080)
@@ -6,7 +6,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>coser</artifactId>
- <version>1.3.1-SNAPSHOT</version>
+ <version>1.4-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.coser</groupId>
Modified: trunk/coser-web/pom.xml
===================================================================
--- trunk/coser-web/pom.xml 2012-10-24 16:16:01 UTC (rev 1079)
+++ trunk/coser-web/pom.xml 2012-10-29 15:16:15 UTC (rev 1080)
@@ -6,7 +6,7 @@
<parent>
<groupId>fr.ifremer</groupId>
<artifactId>coser</artifactId>
- <version>1.3.1-SNAPSHOT</version>
+ <version>1.4-SNAPSHOT</version>
</parent>
<groupId>fr.ifremer.coser</groupId>
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2012-10-24 16:16:01 UTC (rev 1079)
+++ trunk/pom.xml 2012-10-29 15:16:15 UTC (rev 1080)
@@ -6,12 +6,12 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>3.4</version>
+ <version>3.4.2</version>
</parent>
<groupId>fr.ifremer</groupId>
<artifactId>coser</artifactId>
- <version>1.3.1-SNAPSHOT</version>
+ <version>1.4-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
1
0
r1079 - in trunk/coser-web/src/main/webapp: WEB-INF/decorators js
by echatellier@users.forge.codelutin.com 24 Oct '12
by echatellier@users.forge.codelutin.com 24 Oct '12
24 Oct '12
Author: echatellier
Date: 2012-10-24 18:16:01 +0200 (Wed, 24 Oct 2012)
New Revision: 1079
Url: http://forge.codelutin.com/repositories/revision/coser/1079
Log:
fixes #1622 : Udpate to jquery 1.8.2
Added:
trunk/coser-web/src/main/webapp/js/jquery-1.8.2.min.js
Removed:
trunk/coser-web/src/main/webapp/js/jquery-1.7.1.min.js
Modified:
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/js/jquery.expander.min.js
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2012-10-24 16:13:02 UTC (rev 1078)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2012-10-24 16:16:01 UTC (rev 1079)
@@ -29,7 +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.7.1.min.js' />"></script>
+ <script type="text/javascript" language="javascript" src="<s:url value='/js/jquery-1.8.2.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' />" />
<link rel="icon" type="image/png" href="<s:url value='/favicon.png' />" />
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2012-10-24 16:13:02 UTC (rev 1078)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2012-10-24 16:16:01 UTC (rev 1079)
@@ -29,7 +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.7.1.min.js' />"></script>
+ <script type="text/javascript" language="javascript" src="<s:url value='/js/jquery-1.8.2.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' />" />
<link rel="icon" type="image/png" href="<s:url value='/favicon.png' />" />
Deleted: trunk/coser-web/src/main/webapp/js/jquery-1.7.1.min.js
===================================================================
--- trunk/coser-web/src/main/webapp/js/jquery-1.7.1.min.js 2012-10-24 16:13:02 UTC (rev 1078)
+++ trunk/coser-web/src/main/webapp/js/jquery-1.7.1.min.js 2012-10-24 16:16:01 UTC (rev 1079)
@@ -1,4 +0,0 @@
-/*! %%Ignore-License jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={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,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
Added: trunk/coser-web/src/main/webapp/js/jquery-1.8.2.min.js
===================================================================
--- trunk/coser-web/src/main/webapp/js/jquery-1.8.2.min.js (rev 0)
+++ trunk/coser-web/src/main/webapp/js/jquery-1.8.2.min.js 2012-10-24 16:16:01 UTC (rev 1079)
@@ -0,0 +1,2 @@
+/*! %%Ignore-License jQuery v1.8.2 jquery.com | jquery.org/license */
+(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.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 contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={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,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
Modified: trunk/coser-web/src/main/webapp/js/jquery.expander.min.js
===================================================================
--- trunk/coser-web/src/main/webapp/js/jquery.expander.min.js 2012-10-24 16:13:02 UTC (rev 1078)
+++ trunk/coser-web/src/main/webapp/js/jquery.expander.min.js 2012-10-24 16:16:01 UTC (rev 1079)
@@ -1,24 +1,24 @@
-/*!%%Ignore-License
- * jQuery Expander Plugin v1.4
+/*! %%Ignore-License
+ * jQuery Expander Plugin v1.4.4
*
- * Date: Sun Dec 11 15:08:42 2011 EST
+ * Date: Sun Sep 16 21:07:05 2012 EDT
* Requires: jQuery v1.3+
*
* Copyright 2011, Karl Swedberg
* Dual licensed under the MIT and GPL licenses (just like jQuery):
* http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
*
*
*
*
+ *
*/
-(function(d){d.expander={version:"1.4",defaults:{slicePoint:100,preserveWords:true,widow:4,expandText:"read more",expandPrefix:"… ",expandAfterSummary:false,summaryClass:"summary",detailClass:"details",moreClass:"read-more",lessClass:"read-less",collapseTimer:0,expandEffect:"fadeIn",expandSpeed:250,collapseEffect:"fadeOut",collapseSpeed:200,userCollapse:true,userCollapseText:"read less",userCollapsePrefix:" ",onSlice:null,beforeExpand:null,afterExpand:null,onCollapse:null}};d.fn.expander=function(k){function H(a,
-c){var g="span",h=a.summary;if(c){g="div";if(w.test(h)&&!a.expandAfterSummary)h=h.replace(w,a.moreLabel+"$1");else h+=a.moreLabel;h='<div class="'+a.summaryClass+'">'+h+"</div>"}else h+=a.moreLabel;return[h,"<",g+' class="'+a.detailClass+'"',">",a.details,"</"+g+">"].join("")}function I(a){var c='<span class="'+a.moreClass+'">'+a.expandPrefix;c+='<a href="#">'+a.expandText+"</a></span>";return c}function x(a,c){if(a.lastIndexOf("<")>a.lastIndexOf(">"))a=a.slice(0,a.lastIndexOf("<"));if(c)a=a.replace(J,
-"");return a}function y(a,c){c.stop(true,true)[a.collapseEffect](a.collapseSpeed,function(){c.prev("span."+a.moreClass).show().length||c.parent().children("div."+a.summaryClass).show().find("span."+a.moreClass).show()})}function K(a,c,g){if(a.collapseTimer)z=setTimeout(function(){y(a,c);d.isFunction(a.onCollapse)&&a.onCollapse.call(g,false)},a.collapseTimer)}var u="init";if(typeof k=="string"){u=k;k={}}var r=d.extend({},d.expander.defaults,k),L=/^<(?:area|br|col|embed|hr|img|input|link|meta|param).*>$/i,
-J=/(&(?:[^;]+;)?|\w+)$/,M=/<\/?(\w+)[^>]*>/g,A=/<(\w+)[^>]*>/g,B=/<\/(\w+)>/g,w=/(<\/[^>]+>)\s*$/,N=/^<[^>]+>.?/,z;k={init:function(){this.each(function(){var a,c,g,h,l,n,v,C=[],s=[],o={},p=this,f=d(this),D=d([]),b=d.meta?d.extend({},r,f.data()):r,O=!!f.find("."+b.detailClass).length,q=!!f.find("*").filter(function(){return/^block|table|list/.test(d(this).css("display"))}).length,t=(q?"div":"span")+"."+b.detailClass,E="span."+b.moreClass,P=b.expandSpeed||0,m=d.trim(f.html());d.trim(f.text());var e=
-m.slice(0,b.slicePoint);if(!d.data(this,"expander")){d.data(this,"expander",true);d.each(["onSlice","beforeExpand","afterExpand","onCollapse"],function(i,j){o[j]=d.isFunction(b[j])});e=x(e);for(summTagless=e.replace(M,"").length;summTagless<b.slicePoint;){newChar=m.charAt(e.length);if(newChar=="<")newChar=m.slice(e.length).match(N)[0];e+=newChar;summTagless++}e=x(e,b.preserveWords);h=e.match(A)||[];l=e.match(B)||[];g=[];d.each(h,function(i,j){L.test(j)||g.push(j)});h=g;c=l.length;for(a=0;a<c;a++)l[a]=
-l[a].replace(B,"$1");d.each(h,function(i,j){var F=j.replace(A,"$1"),G=d.inArray(F,l);if(G===-1){C.push(j);s.push("</"+F+">")}else l.splice(G,1)});s.reverse();if(O){c=f.find(t).remove().html();e=f.html();m=e+c;a=""}else{c=m.slice(e.length);if(c===""||c.split(/\s+/).length<b.widow)return;a=s.pop()||"";e+=s.join("");c=C.join("")+c}b.moreLabel=f.find(E).length?"":I(b);if(q)c=m;e+=a;b.summary=e;b.details=c;b.lastCloseTag=a;if(o.onSlice)b=(g=b.onSlice.call(p,b))&&g.details?g:b;q=H(b,q);f.html(q);n=f.find(t);
-v=f.find(E);n.hide();v.find("a").unbind("click.expander").bind("click.expander",function(i){i.preventDefault();v.hide();D.hide();o.beforeExpand&&b.beforeExpand.call(p);n.stop(false,true)[b.expandEffect](P,function(){n.css({zoom:""});o.afterExpand&&b.afterExpand.call(p);K(b,n,p)})});D=f.find("div."+b.summaryClass);b.userCollapse&&!f.find("span."+b.lessClass).length&&f.find(t).append('<span class="'+b.lessClass+'">'+b.userCollapsePrefix+'<a href="#">'+b.userCollapseText+"</a></span>");f.find("span."+
-b.lessClass+" a").unbind("click.expander").bind("click.expander",function(i){i.preventDefault();clearTimeout(z);i=d(this).closest(t);y(b,i);o.onCollapse&&b.onCollapse.call(p,true)})}})},destroy:function(){if(this.data("expander")){this.removeData("expander");this.each(function(){var a=d(this),c=d.meta?d.extend({},r,a.data()):r,g=a.find("."+c.detailClass).contents();a.find("."+c.moreClass).remove();a.find("."+c.summaryClass).remove();a.find("."+c.detailClass).after(g).remove();a.find("."+c.lessClass).remove()})}}};
-k[u]&&k[u].call(this);return this};d.fn.expander.defaults=d.expander.defaults})(jQuery);
+(function(c){c.expander={version:"1.4.4",defaults:{slicePoint:100,preserveWords:true,widow:4,expandText:"read more",expandPrefix:"… ",expandAfterSummary:false,summaryClass:"summary",detailClass:"details",moreClass:"read-more",lessClass:"read-less",collapseTimer:0,expandEffect:"slideDown",expandSpeed:250,collapseEffect:"slideUp",collapseSpeed:200,userCollapse:true,userCollapseText:"read less",userCollapsePrefix:" ",onSlice:null,beforeExpand:null,afterExpand:null,onCollapse:null}};c.fn.expander=
+function(l){function I(a,d){var e="span",h=a.summary;if(d){e="div";if(x.test(h)&&!a.expandAfterSummary)h=h.replace(x,a.moreLabel+"$1");else h+=a.moreLabel;h='<div class="'+a.summaryClass+'">'+h+"</div>"}else h+=a.moreLabel;return[h,"<",e+' class="'+a.detailClass+'"',">",a.details,"</"+e+">"].join("")}function J(a){var d='<span class="'+a.moreClass+'">'+a.expandPrefix;d+='<a href="#">'+a.expandText+"</a></span>";return d}function y(a,d){if(a.lastIndexOf("<")>a.lastIndexOf(">"))a=a.slice(0,a.lastIndexOf("<"));
+if(d)a=a.replace(K,"");return c.trim(a)}function z(a,d){d.stop(true,true)[a.collapseEffect](a.collapseSpeed,function(){d.prev("span."+a.moreClass).show().length||d.parent().children("div."+a.summaryClass).show().find("span."+a.moreClass).show()})}function L(a,d,e){if(a.collapseTimer)A=setTimeout(function(){z(a,d);c.isFunction(a.onCollapse)&&a.onCollapse.call(e,false)},a.collapseTimer)}var u="init";if(typeof l=="string"){u=l;l={}}var v=c.extend({},c.expander.defaults,l),M=/^<(?:area|br|col|embed|hr|img|input|link|meta|param).*>$/i,
+K=v.wordEnd||/(&(?:[^;]+;)?|[a-zA-Z\u00C0-\u0100]+)$/,B=/<\/?(\w+)[^>]*>/g,C=/<(\w+)[^>]*>/g,D=/<\/(\w+)>/g,x=/(<\/[^>]+>)\s*$/,N=/^<[^>]+>.?/,A;l={init:function(){this.each(function(){var a,d,e,h,m,i,o,w,E=[],s=[],p={},q=this,f=c(this),F=c([]),b=c.extend({},v,f.data("expander")||c.meta&&f.data()||{});i=!!f.find("."+b.detailClass).length;var r=!!f.find("*").filter(function(){return/^block|table|list/.test(c(this).css("display"))}).length,t=(r?"div":"span")+"."+b.detailClass;a=b.moreClass+"";d=b.lessClass+
+"";var O=b.expandSpeed||0,n=c.trim(f.html());c.trim(f.text());var g=n.slice(0,b.slicePoint);b.moreSelector="span."+a.split(" ").join(".");b.lessSelector="span."+d.split(" ").join(".");if(!c.data(this,"expanderInit")){c.data(this,"expanderInit",true);c.data(this,"expander",b);c.each(["onSlice","beforeExpand","afterExpand","onCollapse"],function(j,k){p[k]=c.isFunction(b[k])});g=y(g);for(d=g.replace(B,"").length;d<b.slicePoint;){a=n.charAt(g.length);if(a=="<")a=n.slice(g.length).match(N)[0];g+=a;d++}g=
+y(g,b.preserveWords);h=g.match(C)||[];m=g.match(D)||[];e=[];c.each(h,function(j,k){M.test(k)||e.push(k)});h=e;d=m.length;for(a=0;a<d;a++)m[a]=m[a].replace(D,"$1");c.each(h,function(j,k){var G=k.replace(C,"$1"),H=c.inArray(G,m);if(H===-1){E.push(k);s.push("</"+G+">")}else m.splice(H,1)});s.reverse();if(i){i=f.find(t).remove().html();g=f.html();n=g+i;a=""}else{i=n.slice(g.length);a=c.trim(i.replace(B,""));if(a===""||a.split(/\s+/).length<b.widow)return;a=s.pop()||"";g+=s.join("");i=E.join("")+i}b.moreLabel=
+f.find(b.moreSelector).length?"":J(b);if(r)i=n;g+=a;b.summary=g;b.details=i;b.lastCloseTag=a;if(p.onSlice)b=(e=b.onSlice.call(q,b))&&e.details?e:b;r=I(b,r);f.html(r);o=f.find(t);w=f.find(b.moreSelector);o[b.collapseEffect](0);w.find("a").unbind("click.expander").bind("click.expander",function(j){j.preventDefault();w.hide();F.hide();p.beforeExpand&&b.beforeExpand.call(q);o.stop(false,true)[b.expandEffect](O,function(){o.css({zoom:""});p.afterExpand&&b.afterExpand.call(q);L(b,o,q)})});F=f.find("div."+
+b.summaryClass);b.userCollapse&&!f.find(b.lessSelector).length&&f.find(t).append('<span class="'+b.lessClass+'">'+b.userCollapsePrefix+'<a href="#">'+b.userCollapseText+"</a></span>");f.find(b.lessSelector+" a").unbind("click.expander").bind("click.expander",function(j){j.preventDefault();clearTimeout(A);j=c(this).closest(t);z(b,j);p.onCollapse&&b.onCollapse.call(q,true)})}})},destroy:function(){this.each(function(){var a,d,e=c(this);if(e.data("expanderInit")){a=c.extend({},e.data("expander")||{},
+v);d=e.find("."+a.detailClass).contents();e.removeData("expanderInit");e.removeData("expander");e.find(a.moreSelector).remove();e.find("."+a.summaryClass).remove();e.find("."+a.detailClass).after(d).remove();e.find(a.lessSelector).remove()}})}};l[u]&&l[u].call(this);return this};c.fn.expander.defaults=c.expander.defaults})(jQuery);
1
0
24 Oct '12
Author: echatellier
Date: 2012-10-24 18:13:02 +0200 (Wed, 24 Oct 2012)
New Revision: 1078
Url: http://forge.codelutin.com/repositories/revision/coser/1078
Log:
Speed up startup
Modified:
trunk/coser-web/src/main/webapp/WEB-INF/web.xml
Modified: trunk/coser-web/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/web.xml 2012-10-24 16:07:03 UTC (rev 1077)
+++ trunk/coser-web/src/main/webapp/WEB-INF/web.xml 2012-10-24 16:13:02 UTC (rev 1078)
@@ -6,7 +6,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2010 - 2011 Ifremer, Codelutin, Chatellier Eric
+ Copyright (C) 2010 - 2012 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
@@ -26,7 +26,8 @@
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ metadata-complete="true">
<display-name>Coser ${project.version}</display-name>
1
0
r1077 - trunk/coser-web/src/main/webapp/WEB-INF/decorators
by echatellier@users.forge.codelutin.com 24 Oct '12
by echatellier@users.forge.codelutin.com 24 Oct '12
24 Oct '12
Author: echatellier
Date: 2012-10-24 18:07:03 +0200 (Wed, 24 Oct 2012)
New Revision: 1077
Url: http://forge.codelutin.com/repositories/revision/coser/1077
Log:
Update sih website link
Modified:
trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2012-10-24 16:05:20 UTC (rev 1076)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2012-10-24 16:07:03 UTC (rev 1077)
@@ -54,7 +54,7 @@
<div id="conteneur">
<div id="head" class="clearfix">
- <a href="http://www.ifremer.fr/sih/" class="logoSIH" target="_blank">Système d'Information Halieutique</a>
+ <a href="http://sih.ifremer.fr/" class="logoSIH" target="_blank">Système d'Information Halieutique</a>
<h1>
<s:text name="message.layout.title" />
</h1>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2012-10-24 16:05:20 UTC (rev 1076)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2012-10-24 16:07:03 UTC (rev 1077)
@@ -54,7 +54,7 @@
<div id="conteneur_int">
<div id="head" class="clearfix">
- <a href="http://www.ifremer.fr/sih/" class="logoSIH" target="_blank">Système d'Information Halieutique</a>
+ <a href="http://sih.ifremer.fr/" class="logoSIH" target="_blank">Système d'Information Halieutique</a>
<h1>
<s:text name="message.layout.title" />
</h1>
1
0
r1076 - trunk/coser-web/src/main/webapp/WEB-INF/decorators
by echatellier@users.forge.codelutin.com 24 Oct '12
by echatellier@users.forge.codelutin.com 24 Oct '12
24 Oct '12
Author: echatellier
Date: 2012-10-24 18:05:20 +0200 (Wed, 24 Oct 2012)
New Revision: 1076
Url: http://forge.codelutin.com/repositories/revision/coser/1076
Log:
Update sih website link
Modified:
trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2012-10-24 16:03:21 UTC (rev 1075)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2012-10-24 16:05:20 UTC (rev 1076)
@@ -93,7 +93,7 @@
<h3><s:text name="message.layout.oceanicdatatitle" /></h3>
<ul>
<li><a href="http://www.ifremer.fr/sismer/index_FR.htm" class="lien" target="_blank"><s:text name="message.layout.oceanicdata1" /></a></li>
- <li><a href="http://www.ifremer.fr/sih/" class="lien" target="_blank"><s:text name="message.layout.oceanicdata2" /></a></li>
+ <li><a href="http://sih.ifremer.fr/" class="lien" target="_blank"><s:text name="message.layout.oceanicdata2" /></a></li>
</ul>
</div>
</div>
Modified: trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp
===================================================================
--- trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2012-10-24 16:03:21 UTC (rev 1075)
+++ trunk/coser-web/src/main/webapp/WEB-INF/decorators/sublayout.jsp 2012-10-24 16:05:20 UTC (rev 1076)
@@ -94,7 +94,7 @@
<h3><s:text name="message.layout.oceanicdatatitle" /></h3>
<ul>
<li><a href="http://www.ifremer.fr/sismer/index_FR.htm" class="lien" target="_blank"><s:text name="message.layout.oceanicdata1" /></a></li>
- <li><a href="http://www.ifremer.fr/sih/" class="lien" target="_blank"><s:text name="message.layout.oceanicdata2" /></a></li>
+ <li><a href="http://sih.ifremer.fr/" class="lien" target="_blank"><s:text name="message.layout.oceanicdata2" /></a></li>
</ul>
</div>
</div>
1
0